如何在PHP中访问具有未知名称的复选框

时间:2015-09-22 01:37:59

标签: php mysql forms

我有一个MySQL数据库,其中包含自动增量列“行号”。在提交给脚本的表单中,有复选框。我不知道有多少个复选框,因为每个Customer都有不同数量的服务,他们可以访问这些服务。单击复选框时,它们已使用服务,该行Available中的整数需要减1。有时,用户可以说使用了多个服务,并且需要影响多行。

我陷入困境的地方有两件事:如何命名复选框,如果我用行号命名它们,如何使用PHP访问它们。

while($cell = mysqli_fetch_array($service_details_query)) {
                    echo "</br>";
                    echo "<input type='checkbox' name='" . $cell['line_item'] . "'>";
                }

上面的代码是我如何制作复选框。问题的最大部分可能是我如何更好地命名它,以便我可以预测提交表单时要查找的名称($_POST[name])(而不是随机数)。

我坚持的另一部分是,如果我决定保留命名策略,那么如何获取它。我想到的是使用循环来提取所携带的真/假数据,但我不知道如何执行它。当然,我可以编写forwhile循环,但我不知道如何提取对象的名称

  • 除了名字之外,我有什么方法可以将额外数据传送到PHP脚本吗?
  • 有没有更好的方法可以命名复选框,这样我就不必费心找出复杂的方法来查找数据,检索名称等等。

对于PHP来说,我是一个初学者。我知道如何使用for循环,while循环,基本命令(如echo)...但我真的缺乏

4 个答案:

答案 0 :(得分:3)

while($cell = mysqli_fetch_array($service_details_query)) {
                    echo "</br>";
                    echo "<input type='checkbox' name='checkboxname[]' value ='".$cell['line_item']."'>";
                }

它应该在该数组中执行名为$_POST的{​​{1}}数组,找到值。 您可以发现它将checkboxname作为一个数组进行威胁。

答案 1 :(得分:1)

尝试将其命名为:"checkbox_" . $cell['line_item'],这样您就可以执行以下操作:

foreach($_POST as $name => $value)
{
   if(substr($name, 9) == "checkbox_"){
       //USE the value
   }
}

或者你可以这样命名:

echo "<input type='checkbox' name='services[]' value='" . $cell['id'] . "'>";

并将其作为这样的数组:$services = $_POST["services"];

答案 2 :(得分:0)

我会根据上下文预先设置名称,例如:

<input type='checkbox' name='service_" . $cell['line_item'] . "'>"

这样,如果复选框代表服务,您可以通过预先识别它来识别它。

答案 3 :(得分:0)

好的。既然你想能够添加额外的数据,我想我会重新开始复杂的事情!但它完成了这项工作。可以在代码注释中找到解释。

首先是HTML和Javascript部分:

<!DOCTYPE HTML>
<html>
    <head>
        <script type="text/javascript">
        // First we need to get our form
        var myForm = document.getElementById("myForm");

        // Next we're adding an event listener to the form submit so we can catch it
        // and use a function to do some stuff before sending it over to the php file
        myForm.addEventListener("submit", function(event){
            // Now we need to temporarely stop the form from submitting
            event.preventDefault();

            // Next we need to get all our checkboxes
            var checkBoxes = document.getElementsByClassName("myCheckbox");

            // Now we need some arrays for all the data we're going to send over
            // Basicly you make one for each data attribute
            var lineNr = [];
            var someThing = [];

            // Lets loop through all checkboxes
            for (var i=0; i<checkBoxes.length; i++) {
                // Catch the ones checked
                if (checkBoxes[i].checked) {
                    // Push the data attribute values to the arrays
                    lineNr.push(checkBoxes[i].dataset.linenr);
                    someThing.push(checkBoxes[i].dataset.something);
                }
            }

            // Now we to JSON encode these arrays to send them over to PHP
            var jsonLineNr = JSON.stringify(lineNr);
            var jsonSomeThing = JSON.stringify(someThing);

            // Since we cannot directly add these variables to our form submit,
            // unless we use Ajax, we need to add them to our form in some
            // hidden fields
            myForm.innerHTML += "<input type='hidden' name='jsonLineNrs' value='"+ jsonLineNr +"' />";
            myForm.innerHTML += "<input type='hidden' name='jsonSomeThings' value='"+ jsonSomeThing +"' />";

            // All done, now we submit our form
            myForm.submit();
        }
        </script>
    </head>
    <body>
        <form method="POST" action="your_php_file.php" id="myForm" accept-charset="utf-8">
            <input type="checkbox" class="myCheckbox" data-linenr="1" data-something="value1" />
            <br />
            <input type="checkbox" class="myCheckbox" data-linenr="2" data-something="value2" />
            <br />
            <input type="checkbox" class="myCheckbox" data-linenr="3" data-something="value3" />
            <br />
            <input type="submit" value="Submit" />
        </form>
    </body>
</form>

接下来的PHP部分:

<?php

// First we need to decode the JSON strings so we can use them

$jsonLineNrs = json_decode($_POST['jsonLineNrs']);
$jsonSomeThings = json_decode($_POST['jsonSomeThings']);

// Now both of those variables are arrays that contain all the data you wanted
// You can loop each of them to do stuff like
foreach($jsonLineNrs as $jsonLineNr){
    echo $jsonLineNr; //Will echo out each line number
}

// Or if you want to loop through both simultaneously so you can
// keep each checked box data values together:
for($i=0; $i<count($jsonLineNrs)-1; $i++) {
    echo $jsonLineNrs[$i].' - '.$jsonSomeThings[$i];
}

?>

在我完成这个答案之前,最后一个警告:我没有清理Javascript部分中的用户输入。它会使这个答案变得更复杂,也更长。一定要这样做,因为你永远不能相信用户输入!即使它只是复选框,POST数据也可以在提交之前更改!