我的代码主要用于工作。我在发布comp_id而不是名称的位置存在问题,即公司。
我无法弄清楚原因。有人可以看看这段代码并告诉我错误在哪里?
表格是comp,字段是comp_id和name。
测试页面为: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>';
?>
答案 0 :(得分:2)
您的选项值是comps的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']
如果能解决问题,请告诉我!
答案 1 :(得分: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: </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>';
?>
答案 2 :(得分: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
。