我正在尝试使用PHP将提交表单中的数据更新到MySQL数据库中。当我单击按钮更新数据库中的值时,它变为空。
此外,我还收到以下两条错误消息:
注意:第64行上C:''examplep''htdocs''test1''edit.php中的未定义变量:id
警告:第66行C:''examplep''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>
如有任何帮助/建议,我们将不胜感激。提前谢谢。
您的表单正在发送POST,并且您正在尝试使用get获取值。
如果$id未在$_GET['editQ']中设置,则不会初始化它。然而,如果在这种情况下您仍然需要它,我想您知道该实例的一些默认id。然后在脚本顶部定义它,以防以后它不会被$_GET值覆盖。
尝试将$id
赋值拉到if
语句之外:
<?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);
}
}
?>
编辑:上面的代码清除了未设置的变量错误,但用户仍在区分
$id
和$editQ
。$id
。它在定义$id
的if
语句isset($_GET['editQ'])
的else
部分中;
另外,使用以下内容代替foreach
,并使用mysqli结果
while($row = $result->fetch_assoc())
{
// STUFF
}