我有一个非常简单的问题。我有一个回显用户可以更新的mySQL记录的表单。我进行了更改,它告诉我更新成功,但是当我查看表时,更改不会通过。这有什么问题?
这是第一个脚本。
<?php
require_once("models/config.php");
?>
<table border=1>
<tr>
<td align=center>Edit Form</td>
</tr>
<tr>
<td>
<table>
<?
$personid=$_SERVER['QUERY_STRING'];
$order = "SELECT * FROM persons where personid='$personid'";
$result = mysqli_query($mysqli,$order);
$row = mysqli_fetch_array($result);
?>
<form method="post" action="edit_data.php">
<input type="hidden" name="id" value="<? echo "$row[personid]"?>">
<tr>Person ID:<? echo "$row[personid]"?></tr>
<tr>
<td>First Name</td>
<td>
<input type="text" name="firstname"
size="20" value="<? echo "$row[firstname]"?>">
</td>
</tr>
<tr>
<td>Surname</td>
<td>
<input type="text" name="surname" size="40"
value="<? echo "$row[surname]"?>">
</td>
</tr>
<tr>
<td align="right">
<input type="submit"
name="submit value" value="Edit">
</td>
</tr>
</form>
</table>
</td>
</tr>
</table>
</body>
</html>
然后进入这个:
<?
require_once("models/config.php");
$personid = $_POST['personid'];
$firstname = mysqli_real_escape_string($mysqli, htmlspecialchars($_POST['firstname']));
$surname = mysqli_real_escape_string($mysqli, htmlspecialchars($_POST['surname']));
$order = "UPDATE persons SET firstname='$firstname', surname='$surname' WHERE personid='$personid'";
$result = mysqli_query($mysqli,$order);
if (!$result) {
echo "Error entering data! <BR>";
echo mysql_error();
} else {
echo "User updated to $firstname $surname <BR>";
}
?>
我在这里缺少什么?
提前致谢。
答案 0 :(得分:2)
您正在发送名为id
的隐藏输入并尝试使用$_POST['personid']
正确的
您也可以关注您的评论(SQL注入至少一个)
答案 1 :(得分:0)
您的表单会在id
字段中发送该ID,而您将其称为personid
。
这似乎有效的原因是更新本身是正确的。 $personid
被视为空字符串,因此更新会正确更新所有空personid
的记录,而这些记录根本就没有记录。
答案 2 :(得分:0)
好的,所以这是一个带有预处理语句的修订脚本。该脚本的工作意义是对记录进行更新。两个问题: 1)这对My-SQL注入是否安全? 2)这是成功更新记录,但现在它正在回显“错误输入数据!”,怎么回事?
<?
require_once("models/config.php");
$personid = $_POST['personid'];
$firstname = mysqli_real_escape_string($mysqli, htmlspecialchars($_POST['firstname']));
$surname = mysqli_real_escape_string($mysqli, htmlspecialchars($_POST['surname']));
$order = "UPDATE persons SET firstname=?, surname=? WHERE personid=?";
$stmt = mysqli_prepare($mysqli, $order);
mysqli_stmt_bind_param($stmt, "ssi", $_POST['firstname'], $_POST['surname'], $_POST['personid']);
mysqli_stmt_execute($stmt);
$result = mysqli_query($mysqli,$stmt);
if (!$result) {
echo "Error entering data! <BR>";
echo mysqli_error($mysqli);
} else {
echo "User updated to $firstname $surname <BR>";
}
?>
我确定第二个问题是一个相当愚蠢的问题 - 我是否只是扭转了条件?