我有以下php代码,它使用从表单发布的已编辑数据更新sql表:
$user_input_id = $_POST['id'];
$user_input_abc = $_POST['abc'];
$user_input_def = $_POST['def'];
$user_input_xyz = $_POST['xyz'];
$sqlTable = 'abc_table';
$stmt = $mysqli->prepare("UPDATE $sqlTable SET abc=?, def=?, xyz=? WHERE id=?");
$rc = $stmt->bind_param("sssi", $user_input_abc, $user_input_def, $user_input_xyz, $user_input_id);
$stmt->execute();
echo 'Your information was updated to the database.';
$stmt->close();
$mysqli->close();
当我编辑表单并提交更改时,带有上述脚本的php页面显示"您的信息已更新到数据库。"但是当我检查数据库时,编辑没有更新,它仍然显示旧数据。
我还尝试回显像echo $user_input_id, $user_input_abc, $user_input_def, $user_input_xyz;
之类的变量,以确保变量确实具有从上一页中的from发布的编辑文本,并且它们看似正确。它只是认为显示成功的更新查询不是更新我的sql表中的编辑文本。
我的代码有什么问题吗?
答案 0 :(得分:1)
导致问题的是$_POST['id']
。将ID传递给此update.php文件的上一个表单页面为<input type="hidden" name="id" value="<? echo $id ?>" />
而不是<input type="hidden" name="id" value="<?php echo $id ?>" />
。我在php
之后错过了<?
。因此,发布的ID为空。我确实对prepare() failed
,bind_param() failed
和execute() failed
进行了错误检查(虽然我只显示了上面的简短代码而没有错误检查行),但它仍然显示任何错误并且查询显示一样成功。这是由于空id字段引起的,因此查询成功并且didint显示任何错误,但由于id为空,因此表中的行没有更新。一旦我确保id被正确发布,其他一切都有效。 (愚蠢的错误让我头疼)
感谢大家的意见,帮助我注意到我的错误。