【问题标题】:Checkbox always checked PHP/HTML复选框始终选中 PHP/HTML
【发布时间】:2016-04-01 16:17:23
【问题描述】:

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

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

how it looks now picture

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;
        }

    }
}
?>

【问题讨论】:

    标签: php checkbox submit


    【解决方案1】:

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

    您应该从该行中删除 &lt;form&gt; 标记:

    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>
    

    【讨论】:

    • 带标签是指还是“”?另外,如果我删除了回声,php 会创建不可见的 html 表单吗?我是 PHP 和 HTML 的初学者(只学过 C 语言)。循环遍历文件夹中的所有文件并将它们回显出来,我不知道如何以另一种方式做到这一点。谢谢你的回复
    • 我的教训是始终将所有表单成员包含在表单中?
    • 如果这些表单的用途完全不同(例如搜索表单和登录表单),您只想在一个页面上有多个表单。但除此之外,所有表单成员都应该是同一个表单的孩子,是的。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      只有选中的复选框才会发布,所以请尝试

      print_r($_POST)

      您将看到带有值的已选中复选框,并且未选中的复选框不会发布。希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2014-11-12
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多