MySQL UPDATE查询问题

时间:2014-03-18 20:50:47

标签: php mysql

我有一个非常简单的问题。我有一个回显用户可以更新的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>";
}
?>

我在这里缺少什么?

提前致谢。

3 个答案:

答案 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>";
}
?>

我确定第二个问题是一个相当愚蠢的问题 - 我是否只是扭转了条件?