isset函数提交while循环PHP中的所有按钮
我遇到了这个问题,while循环中的submit按钮重新执行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
$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']){…
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'");
}