我让这段代码大部分工作。 我有一个问题,它在哪里发布comp_id而不是名称,即公司。
我不知道为什么。这里有人可以查看此代码并告诉我错误在哪里吗?
表是复合的,字段是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: </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>';
?>
您的选项值是合成的 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']
捕获参数
让我知道这是否解决了问题!
我解决了这个问题,这里的人帮助了我,并为我指明了正确的方向。问题是不是一个人给出了正确的答案,而是多个人给出了完整答案的一部分。
这是完整的脚本。
<?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: </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>';
?>
首先,你真的不应该像这样使用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>
元素的值。浏览器不会发布标签之间的内容("内部 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
。