2011-12-30 50 views
0

我得到这个代码工作,主要是。我在发布comp_id而不是公司名称的位置存在问题。为什么在发布公司名称时发布该ID?

我不明白为什么。有人可以看看这段代码,告诉我错误在哪里吗?

该表是comp,字段是comp_id和名称。

测试页:http://kaboomlabs.com/PDI/test4.php

我知道我失去了一些东西,但我在此代码一直盯着太久,我没有看到明显的错误了。谢谢。

<?php 
require_once('connectvars.php'); 
     $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
     or die('Error connecting to MySQL .'); 

if (isset($_POST['submit'])) { 
    $comp = mysqli_real_escape_string($dbc,$_POST['comp']); 
} 


//Access the Database 
    if (!empty($comp)) { 
     $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
     or die('Error connecting to MySQL server.'); 

    $query = "INSERT INTO ncmr (comp) VALUES ('$comp')"; 

    $data = mysqli_query($dbc, $query) or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $query"); 
     mysqli_close($dbc); 
    } 


echo "<form method='post'>"; 
     echo '<fieldset>'; 
      echo'<div id="comp">'; 
      $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
     $mysqli->select_db('comp'); 
      echo '<span class="b">Company:&nbsp;&nbsp;</span>'; 
      $result = $mysqli->query("SELECT * FROM comp"); 
      $i = 0; 
      echo "<SELECT name='comp'>\n"; 
      while($row = $result->fetch_assoc()) { 
      if ($i == 4) echo '<option value="lines">-----</option>'; 
      echo "<option value='{$row['name']}'>{$row['name']}         </option>\n"; 
      $i++;} 
     echo "</select>\n"; 
      echo '</div>'; 
      echo '<div id="button"><input type="submit" value="Submit NCMR" name="submit" /></div>'; 
    echo '</fieldset>'; 
echo '</form>'; 
?> 
+1

那么...不要只是盯着代码。做一些积极的调试,例如检查浏览器中生成的HTML,使用'var_dump()'显示接收到的post值,检查生成的SQL代码... – 2011-12-30 13:43:55

+0

您在页面上收到'mysqli_real_escape_string()'警告。 mysqli_connect();函数中的第一个参数是链接标识符吗? – sooper 2011-12-30 13:47:33

+0

@Sooper,我不知道。我也注意到了。 @阿尔瓦罗,怎么样? – 2011-12-30 13:51:36

回答

1

我解决了这个问题,这里的人帮了忙,并指出了我的正确方向。问题是没有一个人给出正确的答案,但是有多个人给出了完整答案的一部分。

这里是整个脚本。

<?php 
require_once('connectvars.php'); 
     $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
     or die('Error connecting to MySQL .'); 

if (isset($_POST['submit'])) { 
    $comp = mysqli_real_escape_string($dbc,$_POST['comp']); 
} 


//Access the Database 
    if (!empty($comp)) { 
     $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
     or die('Error connecting to MySQL server.'); 
    $query = "INSERT INTO ncmr (comp) VALUES ('$comp')"; 
    $data = mysqli_query($dbc, $query) or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $query"); 
     mysqli_close($dbc); 
    } 
echo "<form method='post'>"; 
    echo '<fieldset>'; 
     echo'<div id="comp">'; 
      $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
       $mysqli->select_db('comp'); 
      echo '<span class="b">Company:&nbsp;&nbsp;</span>'; 
       $result = $mysqli->query("SELECT * FROM comp"); 
       $i = 0; 
      echo "<SELECT name='comp'>\n"; 
       while($row = $result->fetch_assoc()) { 
        if ($i == 4) echo '<option value="lines">-----</option>'; 
      echo "<option value='{$row['name']}'>{$row['name']}</option>\n"; 
       $i++; 
      } 
     echo "</select>\n"; 
     echo '</div>'; 
     echo '<div id="button"><input type="submit" value="Submit NCMR" name="submit" /></div>'; 
    echo '</fieldset>'; 
echo '</form>'; 
?> 
+0

请勿错过接受答案:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – 2011-12-31 13:50:14

2

你的选项值是谱曲的ID,当你提​​交与下拉菜单形式,什么东西发送是每一个下拉列表中,不显示文本中选定的选项的值。

你应该改变这一行:

 echo "<option value='{$row['comp_id']}'>{$row['name']}</option>\n"; 

对于这一点:

echo "<option value='{$row['name']}'>{$row['name']}</option>\n"; 

让我知道这是否可以帮助你!

编辑 实际上有您的代码2级的错误,第一个是上面的变化,第二个是你的form标签没有action属性的事实。 您需要指定表单在某处发布内容。

它应该是这样的:

<form method="post" action="your_script.php">

而且在your_script.php你需要捕捉与$_POST['comp']

的参数让我知道这是否解决了问题!

+0

我现在收到一个错误: 警告:mysqli_real_escape_string()期望参数1为mysqli,null为在第5行\ kaboomlabs.com/PDI/test4.php中给出的空间 – 2011-12-30 13:47:56

+0

这是因为您在尝试将它用作参数mysqli_real_escape_string后定义了'$ dbc' '。看到我的答案的底部。 – 2011-12-30 13:52:34

+0

抱歉,不能将其切换为php和html的组合。我花了太长时间尝试使用php来完成这项工作。我只想请求一个在PHP使用的答案。 – 2011-12-30 14:49:25

0

首先,你真的不应该使用echo来输出你所有的HTML。最好是做这样的事情:

<?php 
    // Connect to database, etc... 
    $result = $mysqli->query("SELECT * FROM `comp`); 
?> 
<!-- Output your HTML here, outside of PHP tags --> 
<form method="post"> 
    <fieldset> 
     <div id="comp"> 
<?php while ($row = $result->fetch_assoc()) { ?> 
      <option value="lines">-----</option> 
      <option value='<?php echo $row['name']; ?>'><?php echo $row['name']; ?></option> 
<?php } ?> 

我省略了很多代码,但我希望你明白。

您在发布comp_id字段的原因是因为那是您的<option>元素的值。浏览器不会POST标签之间的内容(“内部HTML”),它会发布value属性。我发现上面的这种变化:

<option value='{$row['comp_id']}'>{$row['name']}</option> 

应该是:

<option value='{$row['name']}'>{$row['name']}</option> 

最后,你得到一个mysqli_real_escape_string错误,因为这条线的原因是:

$comp = mysqli_real_escape_string($dbc, trim($_POST['comp'])); 

到来之前:

$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
     or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $query"); 

因此,当您给mysqli_real_escape_string参数$dbc时,它不知道这是什么,因为您在尝试将其作为参数提供后定义$dbc

相关问题