【发布时间】:2014-03-18 20:50:47
【问题描述】:
我有一个超级简单的问题。我有一个表单,它回显了用户可以更新的 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>";
}
?>
这里有什么我遗漏的吗?
提前致谢。
【问题讨论】:
-
你试过查看
mysqli_error()的输出吗? -
您容易受到SQL injection attacks 的攻击。并使用
mysql_error()(没有i的那个),而不是mysqli_error()(WITH一个i)。 -
您的 HTML 输入名为
name="id",但您的 PHP 引用了$_POST['personid']。 -
mysqli_*和mysql_*功能的混合用于一件事echo mysql_error();这样对您没有帮助。将其更改为echo mysqli_error($mysqli);,它会告诉您“不”发生了什么。 -
我没有得到 'mysqli_error()' 的任何输出。我收到一条成功消息。