通过形式PHP更新表(PHP update table by form)

2019-09-18 09:53发布

我试图从表单更新表。

我有3页。 第一个查询所有从我的表中的行与“编辑”链接。 当编辑被点击(第2页)的代码拉$ ID,并把它的URL。 在$ ID从URL中拉出并在查询中使用填写的表格。

我的问题是经过更新的表单信息,以我的表。 基本上,更新没有发生。

第二页

<?php

  include '../db/config.php';
  include '../db/opendb.php';

$id = $_GET["id"]; 

  $order = "SELECT * FROM tableName where id='$id'";
  $result = mysql_query($order);
  $row = mysql_fetch_array($result);

  ?>

  <form method="post" action="edit_data.php">
  <input type="hidden" name="id" value="<?php echo "$row[id]"?>">
    <tr>        
      <td>Title</td>
<td>
<input type="text" name="title" size="20" value="<?php echo"$row[title]"?>">
</td>
    </tr>
    <tr>
      <td>Post</td>
    <td>
<input type="text" name="post" size="40" value="<?php echo
  "$row[post]"?>">
</td></tr>
<tr>
<td align="right">
<input type="submit" name="submit value" value="Edit">
</td>
    </tr>
</form>

第三页

          include '../db/config.php';
      include '../db/opendb.php';

   $query = "UPDATE tableName SET '$_POST[title]', '$post[post]' WHERE id='$id'";
        mysql_query($query);

Answer 1:

if (isset($_POST[title])){
$title = mysql_real_escape_string(trim($_POST['title']));
    }else{
$title = NULL;
    }

if (isset($_POST[post])){
$post = mysql_real_escape_string(trim($_POST['post']));
    }else{
$post = NULL;
    }


$query = "UPDATE tableName SET title='$title', post='$post' WHERE id='$id'";           
mysql_query($query); 

我还建议mysqli的功能,而不是MySQL的,我可能不会把一个变量和表列“后”,以避免混乱。



Answer 2:

它应该是

UPDATE tableName SET `title` = {$_POST['title']}, `post` = {$_POST['post']}...

问问你自己,你有什么设置?



Answer 3:

数据库更新你的SQL语句是错误的。 它不仅应包括新值,而且相应字段名的列表。 这意味着它应该看起来更像是这样的:

$query = "UPDATE tableName SET `title` = {$_POST['title']}, `post` = {$_POST['post']} WHERE id = '$id'";

请注意,你也应该拥抱的领域$_POST用两个大括号的字符串里( {}或将其放在引号之外。 (如" = " .$_POST['title']. ", " 如果你使用标准的方法来访问那些与他引用(例如,不这是绝对必要的$_POST[title]$_POST['title']$_POST["title"]

此外,您应该添加以下代码:

  • 一些错误处理 ,目前你甚至不知道出事了。 最简单的方法是检查返回值mysql_query()的函数null ,如果是null ,与获得MySQL错误信息mysql_error()
  • 摆脱了传递的值。 目前,你直接发布数据传递到一个MySQL查询,这是非常不安全的。 (参见例如SQL注入 的维基百科 )您应使用mysql_real_escape_string()将它们插入到查询之前的所有形式的数据。 该逃逸,可能是恶意的所有部分。


Answer 4:

那是因为你没有设置值。 在声明中:

$query = "UPDATE tableName SET '$_POST[title]', '$post[post]' WHERE id='$id'";

你应该通过列名进行更新。



Answer 5:

如果你不使用PDO语句没有防止SQL注入攻击,那么你应该使用更多的保护,那么只是mysql_real_escape_string()。 在逃离的数据之上,你应该验证所提交的数据,其实是你期待。

IE浏览器。 在你的代码在这里:

  $id = $_GET["id"]; 

  $order = "SELECT * FROM tableName where id='$id'";
  $result = mysql_query($order);
  $row = mysql_fetch_array($result);

如果你说:

if(is_numeric($_GET['id'])){
   $id = mysql_real_escape_string(trim($_GET["id"]));

   $order = "SELECT id, title, post FROM tableName where id='$id'";
   $result = mysql_query($order);
   $row = mysql_fetch_array($result);
  }

这至少会验证你正在执行什么实际上是一个ID号(也就是说,如果ID实际上是一个数)。 你可以,如果你还没有使用PDO陈述适用这个逻辑您的所有投入。 如果你期待的信件,然后进行验证字母,数字验证数字,特殊字符进行转义。 再次,这是最低限度。 我真的建议对数百个SQL注入技术阅读,并开始对PDO的阅读起来。

此外,关于使用SELECT *语句。 我会尽量避免它。 它增加了脆弱性的一个层,你的陈述,如果更改表中的字段的顺序,并使用了$行[0](编号请求)可事情搞砸的时候,最后,如果你的表包含数据的其他字段是无关的,你需要,那么你正在使用此页面上,那么你加载你不需要信息的人。

 $order = "SELECT id, title, post FROM tableName where id='$id'";

将解决这个很好。 :) 祝好运!



文章来源: PHP update table by form