isset函数提交while循环PHP中的所有按钮

isset函数提交while循环PHP中的所有按钮,php,while-loop,submit-button,Php,While Loop,Submit Button,我遇到了这个问题,while循环中的submit按钮重新执行while循环 PHP: $query1=$con->query(“从房间中选择*); 如果($query1->num_rows>0){ 而($row1=$query1->fetch_array()){ $idroom=$row1['idroom']; 回声“; 回显“$idroom”; 回声“; 回声“; 如果(isset($_POST['delete'])){ $query2=$con->query(“从idroom='$idroo

我遇到了这个问题,while循环中的submit按钮重新执行while循环

PHP:

$query1=$con->query(“从房间中选择*);
如果($query1->num_rows>0){
而($row1=$query1->fetch_array()){
$idroom=$row1['idroom'];
回声“;
回显“$idroom”;
回声“;
回声“;
如果(isset($_POST['delete'])){
$query2=$con->query(“从idroom='$idroom'的房间中删除”);
}
}
}
下表: [1] :

问题是,当我单击“删除”按钮时,它只是删除所有房间,而不是我要删除的房间。我相信程序认为我一次按下所有的删除按钮是因为“isset”功能

我尝试过的事情:

  • 将isset内的$query2行替换为
    echo$idroom输出为
    room1room2room3
    。这意味着程序认为我一次按下了所有的按钮

    • 在代码中,您没有遵循基本结构。使用JS编辑/删除的点击事件,并使用ajax调用要执行的操作

      这里有一个基于粘贴的代码解决方案,它不是标准代码,但可以帮助您解决问题

      $query1 = $con->query("SELECT * FROM room");
      if($query1->num_rows > 0) {
          while($row1 = $query1->fetch_array()) {
              $idroom = $row1['idroom'];
      
              $tr = "<tr>";
              $tr .= "<td> $idroom </td>";
              $tr .= "<td><form method='POST'>";
              $tr .= "<input type='hidden' name='room_id' value='".$idroom."'>";
              $tr .= "<input type='submit' name='delete' value='DELETE'> </form></td>";
              $tr .= "</tr>";
      
              echo $tr;
          }
      }
      
      if(isset($_POST['delete'])) {
        $roomId = $_POST['room_id'];
        $query2 = $con->query("DELETE FROM room WHERE idroom='$roomId'");
      }
      
      $query1=$con->query(“从房间中选择*);
      如果($query1->num_rows>0){
      而($row1=$query1->fetch_array()){
      $idroom=$row1['idroom'];
      $tr=”“;
      $tr.=“$idroom”;
      $tr.=”;
      $tr.=”;
      $tr.=”;
      $tr.=”;
      echo$tr;
      }
      }
      如果(isset($_POST['delete'])){
      $roomId=$\u POST['roomu\u id'];
      $query2=$con->query(“从idroom='$roomId'所在的房间中删除”);
      }
      
      这段代码有很多错误,尤其是它非常不安全,容易被注入。在继续之前,你应该阅读准备好的陈述。教程没有结尾,所以我不会在这里介绍这些答案。为了帮助一个新的程序员(不久前我还是新来的),我将在这里指出我认为出错的地方:

    • $query1=$con->query(“从房间中选择*)
    • 每次脚本运行时都会运行此操作。这是需要认识到的关键。如果你加载了页面,或者你提交了一个帖子删除,这种情况总是会发生。这导致:

    • if($query1->num_rows>0){而($row1=$query1->fetch_array()){…
    • 开始循环,在
      每条
      记录中循环。注意
      每条

      因此,对于每个记录,您可以检查:

    • if(设置($\u POST['delete']){…
    • 这是你的记录被删除的地方,也是CBroe在评论中所指的。你认为(我认为)你检查了删除这条记录,但是你只检查了
      isset($\u POST['delete'])
      并对每个
      记录执行此操作。请记住,
      POST
      变量一直存在,直到脚本结束或删除为止。因此,通过单击delete并提交该
      \u POST
      值,可以为循环中的每个记录传递此条件

      • 在继续之前,你应该先消化一下这一点,因为这是新程序员的常见错误。请记住,计算机按顺序阅读和操作脚本,请记住它也会完全按照你的要求进行操作。经典的例子是描述煮一杯咖啡。如果我对你说“放”打开水壶,把咖啡放进杯子里,注满水,加牛奶“你会煮一杯咖啡,但如果你对电脑说这句话,你最终会变成这样,充其量是一台电脑带着水壶,寻找一杯咖啡,告诉你牛奶不是一个数字
      所以解决方案是这样的。我不打算为你写,有不同的选择。你应该向帖子传递某种特定于你想要的记录的标识符,然后你需要检查一下。
      isset POST[delete]&&isset(POST['room\u id'])
      。然后,您需要在脚本开始时,在不同的脚本中,可能不是在循环中(这很少是优秀编程的标志)确定执行此操作的最佳位置。如果要删除记录,您可能应该在为其创建输出之前执行此操作。(为什么收集记录只是为了删除它,这样效率高吗?)

      如果您确实必须在循环中执行此操作,那么在运行delete之前,需要进行某种检查,确保文件室的id与post值的id相同


      希望这是有帮助的,但请确保您作为紧急事项查看并开始使用准备好的声明-在2020年没有理由不这样做

      “这意味着程序认为我一次按下了所有按钮。”-不,不是。在创建输出的过程中,您在那里显式循环所有记录。首先不应将记录的删除混为一谈。您需要以某种方式将要删除的记录的ID与表单一起传递。我建议您阅读一个可以在internet上轻松找到的教程。您可以将能够从那里获得基础知识。这里没有
      ajax
      代码,或者实际上根本没有任何
      js
      代码。亲爱的@jameson2012,请在匆忙添加评论之前阅读文本。我已经明确地联系他使用js并使用ajax提交。我确实阅读了文本,而你的回答没有回答OP的问题。事实上你说,所以你鼓励一个新程序员编程得很糟糕,而不是把它们指向一个积极的方向。你也模糊地提到一个概念,没有任何说明如何实现它,所以总之,我认为这是一个无用的答案。
      $query1 = $con->query("SELECT * FROM room");
      if($query1->num_rows > 0) {
          while($row1 = $query1->fetch_array()) {
              $idroom = $row1['idroom'];
      
              $tr = "<tr>";
              $tr .= "<td> $idroom </td>";
              $tr .= "<td><form method='POST'>";
              $tr .= "<input type='hidden' name='room_id' value='".$idroom."'>";
              $tr .= "<input type='submit' name='delete' value='DELETE'> </form></td>";
              $tr .= "</tr>";
      
              echo $tr;
          }
      }
      
      if(isset($_POST['delete'])) {
        $roomId = $_POST['room_id'];
        $query2 = $con->query("DELETE FROM room WHERE idroom='$roomId'");
      }