【发布时间】:2015-02-27 15:29:40
【问题描述】:
我正在尝试使用 PHP 将提交表单中的数据更新到 MySQL 数据库中。当我单击按钮更新数据库中的值时,它变为空。
此外,我还收到以下两条错误消息:
注意:未定义变量:第 64 行 C:\xampp\htdocs\test1\edit.php 中的 id
警告:第 66 行 C:\xampp\htdocs\test1\edit.php 中为 foreach() 提供的参数无效
以下是我的 PHP 代码:
<?php
$name = '';
if (isset($_GET['editQ'])) {
$ok = true;
$id = $_GET['editQ'];
if ($ok) {
// add database code here
$db = mysqli_connect('localhost', 'root', '', 'test2015');
$sql = sprintf("UPDATE question SET question_body='%s'
WHERE question_id=%s",
mysqli_real_escape_string($db, $name),$id);
mysqli_query($db, $sql);
echo '<p>User updated.</p>';
mysqli_close($db);
}
} else {
$db = mysqli_connect('localhost', 'root', '', 'test2015');
$sql = sprintf('SELECT * FROM question WHERE question_id=%s', $id);
$result = mysqli_query($db, $sql);
foreach ($result as $row) {
$name = $row['question_body'];
}
mysqli_close($db);
}
?>
<form name="editQ" method="POST" action="edit.php" >
<td>Please Edit the Question</td>
<input type="text" name="<?php echo ($q)?>" value="<?php
echo htmlspecialchars($name);?>" />
<input type="submit" name="submit" value="Edit">
</form>
任何帮助/建议将不胜感激。提前致谢。
【问题讨论】:
-
您的查询字符串中有什么内容。?
-
为什么不使用带有prepared statement的pdo库?
-
@nana.chorage 你是什么意思?
-
警告:当使用
mysqli时,您应该使用参数化查询和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值来完成此操作,因为您将创建严重的SQL injection bugs。请不要使用sprintf,这是一个脆弱且容易出错的替代方案。 -
@Marco Mura 我正在使用 (mysqli)