Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中访问名称未知的复选框_Php_Mysql_Forms - Fatal编程技术网

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

如何在PHP中访问名称未知的复选框,php,mysql,forms,Php,Mysql,Forms,我有一个MySQL数据库,自动增加列“行号”。在提交给脚本的表单中,有复选框。我不知道有多少个复选框,因为每个客户都有不同数量的允许他们访问的服务。单击该复选框时,表示他们使用了一项服务,该行的可用列中的整数需要减少1。有时,用户可以说使用了多个服务,需要影响多行 我陷入困境的地方有两件事:复选框的命名方式,如果我按行号命名,如何使用PHP访问它们 while($cell = mysqli_fetch_array($service_details_query)) {

我有一个MySQL数据库,自动增加列“行号”。在提交给脚本的表单中,有复选框。我不知道有多少个复选框,因为每个
客户都有不同数量的允许他们访问的服务。单击该复选框时,表示他们使用了一项服务,该行的
可用列中的整数需要减少1。有时,用户可以说使用了多个服务,需要影响多行

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

while($cell = mysqli_fetch_array($service_details_query)) {
                    echo "</br>";
                    echo "<input type='checkbox' name='" . $cell['line_item'] . "'>";
                }
while($cell=mysqli\u fetch\u数组($service\u details\u query)){
回声“
”; 回声“; }
上面的代码是我如何创建复选框的。可能问题的最大部分是如何更好地命名它,以便在提交表单时(而不是随机数)预测要查找的名称(
$\u POST[name]

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

  • 除了名称之外,还有什么方法可以将额外的数据带到PHP脚本中
  • 有没有更好的方法来命名复选框,这样我就不用费劲地找出查找数据、检索名称等复杂的方法了

说到PHP,我算是个初学者。我知道如何使用
for
循环,而
循环,基本命令,如echo。。。但我确实缺少

我会根据上下文为名称加前缀,例如:

<input type='checkbox' name='service_" . $cell['line_item'] . "'>"
这样,如果复选框代表一项服务,您可以通过前缀来识别它。

尝试将其命名为:
“checkbox”.$cell['line\u item']
,这样您就可以执行以下操作:

foreach($_POST as $name => $value)
{
   if(substr($name, 9) == "checkbox_"){
       //USE the value
   }
}
echo "<input type='checkbox' name='services[]' value='" . $cell['id'] . "'>";
或者你可以这样命名:

foreach($_POST as $name => $value)
{
   if(substr($name, 9) == "checkbox_"){
       //USE the value
   }
}
echo "<input type='checkbox' name='services[]' value='" . $cell['id'] . "'>";
echo”“;
并将其作为如下数组:
$services=$\u POST[“services”];

而($cell=mysqli\u fetch\u数组($service\u details\u query)){
回声“
”; 回声“; }
它应该执行一个名为
checkboxname
$\u POST
数组,在该数组中,您可以找到值。
你可以发现它威胁着
$\u POST['checkboxname']
作为一个数组。

好吧。既然你想添加额外的数据,我想我会开始让事情复杂化很多!但它确实起到了作用。解释可以在代码注释中找到

首先是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>

//首先我们需要拿到我们的表格
var myForm=document.getElementById(“myForm”);
//接下来,我们将向表单submit添加一个事件侦听器,以便捕获它
//并在将其发送到php文件之前使用函数执行一些操作
myForm.addEventListener(“提交”,函数(事件){
//现在我们需要暂时停止提交表单
event.preventDefault();
//下一步,我们需要得到我们所有的复选框
var checkbox=document.getElementsByClassName(“myCheckbox”);
//现在我们需要一些数组来存储我们要发送的所有数据
//基本上,为每个数据属性创建一个
var lineNr=[];
var=[];
//让我们遍历所有复选框

对于(var i=0;iYou可以存储在隐藏变量中提交的复选框数量。有几种方法可以解决您的问题。我的最佳建议是使用Javascript和
数据-
属性。与
名称
属性一样,
数据-
属性可以用于存储数据。而且,您可以拥有任意数量的属性。因此您可以使用
数据名称、数据用户ID、数据项
,几乎任何东西。接下来,您可以使用Javascript检查选中的框以及框上的数据。然后使用Javascript将其发送到PHP脚本。Javascript最美妙的部分是您可以添加事件侦听器。因此,就像复选框更改一样,您可以n让javascript为您做一些事情。比如存储数据以备以后使用。要完成它,您可以使用类似于
的东西。值
,其中
这个
,将是复选框。因此,如果您不想,您甚至不需要
名称
属性。那么,我是否找到一种使用PHP通配符的方法?比如…$\u POST['service\%']?我认为您可以使用数组函数在$\u POST数组中查找包含“service\%”字符串的键。这非常有效!现在我可以将其与while循环结合使用。谢谢。