$ POST值不更新数据库?糟糕的MySQL查询?

时间:2013-04-23 03:07:42

标签: php html mysql

我正在编写一个应用程序,其中有一个名为devices.php的页面,它查询mysql数据库中的所有记录并将它们显示在html表中。我在表格的每一行都有一个复选框,供用户查看,然后点击"编辑"或提交按钮来编辑该记录。当单击提交按钮时,它会转到另一个页面edit_device.php,然后您可以在其中编辑该设备.. i $ _GET单击复选框的值,这是"主键"然后我查询数据库以输入该查询的值作为另一个html表单的默认值。这里的目标是将该设备拉入表单,如果他们需要更改所有列值那条记录,他们可以,或者如果他们只需要编辑一个列值,他们就可以删除默认值,然后输入新的...我正在尝试$ _GET该表单的值,并更新该记录在数据库中..现在,当我点击devices.php上的编辑时,它需要我edit_devices.php,并从数据库中拉出该记录并将其输入到表单的字段中...我遇到的问题但是,当您更改表单文本框/字段中的某个值时,它不会在数据库中更新。它仍然只是原始值。 继承我的代码:

<!doctype html>
 <html>

    <?php
      include 'dbcon.config';

      $id=$GET_['check_box'];
      $result=mysql_query("SELECT * FROM device_entries WHERE Id=$id");
      $record=mysql_fetch_row($result);

      $ident    = $record[0];
      $suspend  = $record[1];
      $device   = $record[2];
      $ipadd    = $record[3];
      $dep      = $record[4];
      $emailadd= $record[5];
   ?>

    <body>
      <form method="get">
            ID:         <input type="text" value="<?php echo $ident; ?>" name="id">
            Suspended:  <input type="text" value="<?php echo $suspend; ?>" name="sus">
            Device :    <input type="text value="<?php echo $device; ?>" name="device">
            IP :        <input type="text" value="<?php echo $ipadd; ?>" name="ip">
            Dependency: <input type="text" value="<?php echo $dep; ?>" name="depend">
            Email:      <input type="text" value="<?php echo $emailadd; ?>" name="email">

            <input type="submit" value="update" name="submit1">
      </form> 
   </body>
 </html>

<?php
   if(isset($_GET['submit1'])) {
      $id=$_GET['id'];
      $sus=$_GET['sus'];
      $dev=$_GET['device'];
      $ip=$_GET['ip'];
      $depend=$_GET['depend'];
      $email=$_GET['email'];

      $update=mysql_query("UPDATE device_entries SET Suspended=$sus, Device=$dev, IP=$ip, Depend=$depend, Email=$email WHERE Id=$id")
   }
   mysql_close($con);
?>

最重要的部分似乎正在做我想要的......似乎它是$ update查询的东西。

4 个答案:

答案 0 :(得分:2)

尝试更改查询:

"UPDATE `device_entries` SET `Suspended`='$sus', `Device`='$dev', `IP`='$ip', `Depend`='$depend', `Email`='$email' WHERE Id=$id"
  1. ,之前有一个逗号WHERE;
  2. 您可能需要使用backqoutes / backticks来转义列名称;
  3. 您的字符串值应使用单引号'
  4. UPD:

    1&gt;我建议您使用以下方法检查变量:

    var_dump($id, $sus, $dev, $ip, $depend, $email);
    

    在查询执行之前。

    2&gt;位:

    if(mysql_errno())exit(mysql_error());
    
    查询执行后

    自行确定问题。这是一个 调试措施 应该有所帮助。您可以在生产/部署版本中删除它们。

    P.S。: php_mysql已弃用。我建议您改用php_pdophp_mysqli。是的,请注意 NullPointer 说。您的代码难以理解SQL Injection.

答案 1 :(得分:1)

您的查询我错了,您在无效的where子句之前放置逗号。将其更改为此

"UPDATE device_entries SET Suspended=$sus, Device=$dev, IP=$ip, Depend=$depend, Email=$email  WHERE Id='".$id."'";

其次它没有执行,因为你试图将一个名为'sus'的非html现有字段分配给变量$suspend,导致更新查询失败

答案 2 :(得分:0)

更改为

$update=mysql_query("UPDATE device_entries SET Suspended='$sus', Device='$dev', IP='$ip', Depend='$depend', Email='$email' WHERE Id=$id");

答案 3 :(得分:0)

$ update = mysql_query(“UPDATE device_entries SET Suspended ='$ sus',Device ='$ dev',IP ='$ ip',Depend ='$ depend',Email ='$ email'WHERE Id = $ id“);

- 只需在列名称解决之前添加刻度线..以及单引号,我自己尝试过,没有运气