复选框总是选中PHP/HTML


Checkbox always checked PHP/HTML

我正在尝试检查选中了哪些复选框,并根据选中的复选框执行文件删除。对我来说,如果我在复选框中得到值"..",即使它们没有被选中,它们似乎总是有一个值。我目前删除了复选框中的值,似乎没有任何区别。

每个复选框都有一个唯一的编号,同时它应该删除的文件具有与其文件名相同的索引作为数据。但它从未看到任何复选框被选中。。没有错误,只是什么都没做。。请帮助

现在的样子

HTML和php:(我正在处理的文档称为protected.php)

<form action="protected.php" method="post"><br>
     <input type="submit" name="Delete" value="Delete">
</form>

<?php
echo 'My files';
"<br>";
$mydr = "D:'wamp'www''";
$dir = $mydr . $_SESSION['userid'];
// Open a directory, and read its contents
$checkbox_gen = 0;
$filename_gen = array();
if (is_dir($dir)){
  if ($dh = opendir($dir)){
    while ((($file = readdir($dh)) !== false)){
        if($file != '.' && $file != '..'){
          echo "<form><input type='"checkbox'" name='"$checkbox_gen'" id='"checkbox'">" . "<a href='"$dir/$file'">$file</a></form>" . "<br>";
          $filename_gen[$checkbox_gen] = $file;
          $checkbox_gen += 1;
        }
     }
    closedir($dh);
  }
}
?>
<br>
<form action="protected.php" method="post"><br>
    <input type="submit" name="Delete" value="Delete">
</form>
<?php
if(isset($_POST['Delete'])) {
    for($i = 0; $i < 10; $i++){
        if(!empty($_POST[$i])) {
            echo $i . 'is checked';
            //$temp = $dir . '''' . $filename_gen[$i];
            //unlink($temp);
            echo $temp;
        }
    }
}
?>

您正在为每个复选框和提交按钮创建一个单独的表单。所以基本上你是在提交"提交按钮"表单,当然没有复选框,因为它没有任何复选框。

您应该删除此行的<form>标签:

echo "<form><input type='"checkbox'" name='"$checkbox_gen'" id='"checkbox'">" . "<a href='"$dir/$file'">$file</a></form>" . "<br>";

而是在循环之外回显它们(还要确保提交按钮的形式相同)。

我想它应该是这样的:

<form action="protected.php" method="post">
<?php
...
if (is_dir($dir)){
  if ($dh = opendir($dir)){
    while ((($file = readdir($dh)) !== false)){
        if($file != '.' && $file != '..'){
            echo "<input type='"checkbox'" name='"$checkbox_gen'" id='"checkbox'">" . "<a href='"$dir/$file'">$file</a>" . "<br>";
            ...
        }
    }
    closedir($dh);
  }
}
?>
<input type="submit" name="Delete" value="Delete">
</form>

只有选中的复选框才会过账,所以请尝试

print_r($_POST)

您将看到带值的选中复选框将在那里,而未选中的复选框将不会被张贴。希望能有所帮助。

每个表单都提交自己的变量,而您正试图创建多个表单。您只在单个表单中提交了一个删除变量。您需要在循环之前用操作和方法回显表单开始标记(每个复选框/文件都没有新的表单标记),只需要在循环之后回显删除/提交按钮和表单结束标记。