【问题标题】:Being able to delete data from the click of a button on a page which also deletes the data from the database能够通过单击页面上的按钮来删除数据,这也会从数据库中删除数据
【发布时间】:2018-04-02 11:21:42
【问题描述】:

我的网页上的表格中有多个文本框,这些文本框是从我网站上的用户填写的表格中填充的。我的功能是能够删除每一行以及编辑我网站上显示的每一行数据。我遇到的问题是只能编辑/删除表格的最后一行。例如,当我单击表格第一行上的删除按钮时,由于某种原因它会删除最后一行而不是第一行。另外,更新/编辑按钮也是一样,只能修改最后一行,不能修改我网站上表格最后一行上方的任何内容。

更多信息: form_id 是我数据库中的主键。

我的代码:

 <?php
  $con = @mysql_connect("localhost","root","");
  if (!$con){
  die("Can not connect: " . mysql_error());
  }
  mysql_select_db("formsystem", $con);

  if(isset($_POST['update'])){
    $UpdateQuery = "UPDATE form SET form_name='$_POST[name]', form_description='$_POST[description]' WHERE form_id='$_POST[hidden]'";               
    mysql_query($UpdateQuery, $con);
};

if(isset($_POST['delete'])){
$DeleteQuery = "DELETE FROM form WHERE form_id='$_POST[hidden]'";          
mysql_query($DeleteQuery, $con);
};

  $sql = "SELECT * FROM form";

  $myData = mysql_query($sql,$con);

   echo "<table>
   <tr>
   <th>Title</th>
   <th>Description</th>
   <th></th>
   <th></th>
   <th></th>
   </tr>";
   while($record = mysql_fetch_array($myData)){
   echo "<form action=findGroup.php method=post>";
   echo "<tr>";
   echo "<td>" ."<input type=text name=name value='" . $record['form_name'] . "'/> </td>";
   echo "<td>" ."<input type=text name=description value='" . $record['form_description'] . "'/> </td>";
   echo "<td>" ."<input type=hidden name=hidden value='" . $record['form_id'] . "'/></td>";
   echo "<td>" ."<input type=submit name=update value='update" . "'/> </td>";
   echo "<td>" ."<input type=submit name=delete value='delete" . "'/> </td>";
   echo "</tr>";
  }
  echo "</table>";

?>

【问题讨论】:

    标签: php html button edit sql-delete


    【解决方案1】:

    更新

    正确括住form 元素:

    <?php
      $con = @mysql_connect("localhost","root","");
      if (!$con){
        die("Can not connect: " . mysql_error());
      }
        mysql_select_db("formsystem", $con);
    
        if(isset($_POST['update'])){
          $UpdateQuery = "UPDATE form SET form_name='".$_POST['name']."', form_description='".$_POST['description']."' WHERE form_id='".$_POST['hidden']."';";               
        mysql_query($UpdateQuery, $con);
      };
    
      if(isset($_POST['delete'])){
        $DeleteQuery = "DELETE FROM form WHERE form_id='".$_POST['hidden']."';";          
        mysql_query($DeleteQuery, $con);
      };
    
      $sql = "SELECT * FROM form";
    
      $myData = mysql_query($sql,$con);
    
      echo "<table>
       <tr>
       <th>Title</th>
       <th>Description</th>
       <th></th>
       <th></th>
       <th></th>
       </tr>";
       while($record = mysql_fetch_array($myData)){
         echo "<form action=findGroup.php method=post>";
         echo "<tr>";
         echo "<td>" ."<input type=text name=name value='" . $record['form_name'] . "'/> </td>";
         echo "<td>" ."<input type=text name=description value='" . $record['form_description'] . "'/> </td>";
         echo "<td>" ."<input type=hidden name=hidden value='" . $record['form_id'] . "'/></td>";
         echo "<td>" ."<input type=submit name=update value='update" . "'/> </td>";
         echo "<td>" ."<input type=submit name=delete value='delete" . "'/> </td>";
         echo "</tr>"
         echo "</form>";
       }
      echo "</table>";
    
    ?>
    

    为了安全问题,最好使用mysqli_real_escape_string包装变量,例如:

    "DELETE FROM form WHERE form_id='".mysqli_real_escape_string($_POST['hidden'])."';";
    

    但这是另一个问题,这里是thread

    【讨论】:

    • 感谢您的输入,虽然连接查询字符串似乎破坏了我的代码
    • @Hasan,有什么细节吗?
    • 随着您的新调整,删除按钮的作用仍与以前相同,并且即使选择另一行进行删除,也始终删除文本框的最后一行。此外,现在更新按钮不能完全与调整一起使用。
    • @Hasan,很抱歉我缺少单引号,它应该将变量包装在查询字符串中。我已经更新了。
    • 谢谢,我已经更新了。仍然无法解决我遇到的主要问题:D
    【解决方案2】:

    首先,检查这些潜在问题:

    1. 您正在以 root 身份连接。不建议。您应该以对该表具有 M.A.D 权限的 MySQL 用户身份进行连接(修改、添加、删除)。

    2. 您是否检查过 MySQL 和系统/PHP 日志以查看是否报告了任何错误?然后你可以根据这些错误调整你的代码。

    3. 您是否尝试手动运行删除语句以确认它删除了所需的行?

    4. 在您的代码中,您是否尝试过在您的删除语句中使用 $sql = DELETE... 语法?

    【讨论】:

    • 感谢您的帮助,似乎在日志中找不到任何有用的内容,是的,手动删除确实有效。我仍然是 SQL/PHP 的初学者,也许 SQL 查询/php 代码可以改进,您有什么建议吗?非常感谢您的帮助!
    猜你喜欢
    • 2021-12-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 2016-04-29
    • 2020-04-16
    • 1970-01-01
    相关资源
    最近更新 更多