我在HTML表格中有发票。您选择项目名称,然后选择项目批次和项目#。最后有一个复选框,标记是否已售罄。
<input type="checkbox" name="soldout[]">
当我处理表单时,$ _POST复选框数组显然不包含未选中的复选框。这使我在将复选框与项目
匹配时出现问题foreach($productID as $key=>$id){
$p = $id;
if(isset($soldout[$key])){
$so = true;
}
}
因此,如果我有三个订单项,并且第一个和最后一个标记已售罄,那么它将在前2个售罄,最后一个未售罄。
我认为我不能这样做:
<input type="checkbox" name="soldout[<?php echo $i; ?>]">
因为我在需要时使用javascript添加空发票行,并且不知道如何增加数组键。
关于如何处理这个的任何想法?
答案 0 :(得分:1)
没有直接的HTML解决方案。如果Javascript是一个选项,你可以看一下,但是如果你想要一个直接的HTML解决方案,一个未经检查的复选框不会出现在PHP中,而是一个单选按钮。
<input type="radio" name="soldout[<?php echo $i; ?>]" value="true"> Yes
<input type="radio" name="soldout[<?php echo $i; ?>]" value="false"> No
然后在PHP中,您可以像
一样访问它foreach($productID as $key=>$id){
$p = $id;
if($soldout[$key] == "true"){
$so = true;
}
else {
$so = false;
}
}
请记住"true"
周围的引号,因为它是一个字符串
然后,如果你填写服务器端的复选框,你也应该知道哪些值应该存在,如果$_POST
中没有这些值,则假设它们未经检查。
foreach ($availableProductIDs as $id) {
if(isset($_POST['soldout'][$id]){
$so = true;
}
else {
$so = false;
}
}
答案 1 :(得分:1)
使用JS增加数组时,只需将名称更改为soldout_new,然后增加变量。
这样的事情:
var soldout_new = 0;
function add()
{
'<input type="checkbox" name="soldout_new[' + soldout_new + ']">';
soldout_new += 1;
}
或者您也可以将变量设置为来自php的id:
var soldout = <?php echo $i; ?>;
function add()
{
'<input type="checkbox" name="soldout[' + soldout + ']">';
soldout += 1;
}
答案 2 :(得分:0)
为什么不做这样的事情?
<input type="checkbox" name="soldout[]" value="<?= $productID[0] ?>">
<input type="checkbox" name="soldout[]" value="<?= $productID[1] ?>">
然后在PHP中
foreach($productID as $key=>$id) {
$p = $id;
if(in_array($id, $soldout) {
$so = true;
}
}
答案 3 :(得分:0)
Java免费解决方案:
<input type="hidden" name="hsoldout[]" value="$value">
<input type="checkbox" name="soldout[]" value="$value"><br />
提交后,如果soldout
和hsoldout
之间出现差异,则表示checkbox
已合并。实际上,每个表单只需要一个隐藏键:
if(array_key_exists($_POST[hsoldout],$i)) { <br/>
$_POST[soldout][$i] = $_POST[soldout][$i]; // makes sure it is set as a
$_POST var <br />
.... <br />
}