【问题标题】:A function to check whether a box is checked or not in PHP在 PHP 中检查一个框是否被选中的函数
【发布时间】:2019-12-15 21:44:22
【问题描述】:

我试图掌握如何正确理解 POST 的工作原理,并决定制作一个生成 100 个复选框的 PHP 小程序,然后单击文档顶部的按钮,调用一个函数循环遍历所有复选框并说明它们是否被选中。但是,我实施它的方式似乎不起作用。

这是我在编写此脚本时所想的一个更​​循序渐进的过程,如果有人能告诉我我的想法中的缺陷,我将不胜感激。

  1. 在带有method=post 的表单中创建一个按钮。
  2. 在 PHP 中创建一个数组来存储所有复选框名称。
  3. 创建一个 for 循环。在循环的每次迭代中,都会创建一个格式为 #checkbox 的字符串,因此每个复选框都有自己的唯一标识符。这些字符串中的每一个都存储在一个数组中。 PHP 然后回显一个带有method=post 的表单,每个表单内都有一个复选框。每个复选框都有其唯一的名称。
  4. 每个复选框创建后,您可以通过单击按钮查看每个复选框是否被选中,该按钮调用checkFunction()函数。
  5. 在函数中,有一个foreach 循环。此循环遍历数组中的每个元素以获取复选框名称,使用isset 来查看复选框是否被选中,如果是则回显。

这对我来说似乎很简单,但无论出于何种原因它似乎都不起作用。谁能解释一下为什么不呢?

<!DOCTYPE html>
<html>
    <head>
        <title>Checked Boxes</title>
    </head>
    <body>
        <form method="post"> 
            <input type="submit" name="submit_checked" class="button" value="Check if checkbox is checked"/> 
        </form> 

        <?php
            $checkboxNames = array();
            for ($x = 1; $x <= 100; $x++) {
                $checkboxStr=$x."checkbox";
                $checkboxNames[] = $checkboxStr;
                echo "<form method=\"post\"><input type=\"checkbox\" name=\"$checkboxStr\" value=\"$checkboxStr\">$checkboxStr</form>";
            }

            echo("<hr>");
            echo("<h2>Status of Checkboxes:</h2>");

            function checkFunction(){
                foreach ($checkboxNames as $currentName){
                    if (isset($_POST["$currentName"]))
                        echo("<p>$currentName is checked!</p>");
                    else
                        echo("<p>$currentName is not checked!</p>");
                }
            }

            if(isset($_POST['submit_checked']))
                checkFunction();
        ?>
    </body>
</html>

【问题讨论】:

    标签: php html for-loop checkbox foreach


    【解决方案1】:
    1. 您需要删除foreach 中的表单标签,您应该在表单中只使用1 个&lt;form method="post"&gt;。并将复选框输入放在主表单中;
    2. PHP 函数无法访问该函数之外的变量,因此您应该将该变量放入 params。

    下面是工作代码:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Checked Boxes</title>
    </head>
    <body>
    <form method="post">
        <input type="submit" name="submit_checked" class="button" value="Check if checkbox is
        checked"/><br>
    
        <?php
        $checkboxNames = array();
        for ($x = 1; $x <= 100; $x++) {
            $checkboxStr     = $x."checkbox";
            $checkboxNames[] = $checkboxStr;
            echo "<input type=\"checkbox\" name=\"$checkboxStr\" value=\"$checkboxStr\">$checkboxStr <br>";
        }
    
        echo("<hr>");
        echo("<h2>Status of Checkboxes:</h2>");
    
        function checkFunction($checkboxNames)
        {
            foreach ($checkboxNames as $currentName) {
                if (isset($_POST[$currentName])) {
                    echo("<p>$currentName is checked!</p>");
                } else {
                    echo("<p>$currentName is not checked!</p>");
                }
            }
        }
    
        if (isset($_POST['submit_checked'])) {
            checkFunction($checkboxNames);
        }
        ?>
    
    </form>
    
    </body>
    </html>
    

    【讨论】:

      【解决方案2】:

      您仅在所有复选框都位于未提交的单独表单中时才提交第一个表单。尝试重写循环以在主表单中包含复选框输入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-04
        • 1970-01-01
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        相关资源
        最近更新 更多