我有一个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]
)(而不是随机数)。
我坚持的另一部分是,如果我决定保留命名策略,那么如何获取它。我想到的是使用循环来提取所携带的真/假数据,但我不知道如何执行它。当然,我可以编写for
或while
循环,但我不知道如何提取对象的名称。
对于PHP来说,我是一个初学者。我知道如何使用for
循环,while
循环,基本命令(如echo)...但我真的缺乏
答案 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数据也可以在提交之前更改!