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