我有这些用于识别(如果选中)的复选框应该通过电子邮件发送给相应的客户端,它应该是预先检查的。
但是当它被预先检查,然后当我取消选中一个复选框,例如multipayment_email [1]时,当提交给PHP时,未设置的是最后一个索引multipayment_email [4]。
list_payments.php
:
<form method="POST">
<?php while($row = mysqli_fetch_array($selectQuery) { ?>
<input type="text" name="multipayment_name[]" required/>
<input type="checkbox" name="multipayment_email[]" checked />
<?php } ?>
</form>
SUBMIT_payment.php:
$names = $_POST['multipayment_name'];
$emails = $_POST['multipayment_email'];
foreach ($names as $key => $name)
{
$email = isset($emails[$key]) ? 1:0;
$query = "INSERT INTO payments() VALUES (NULL, '$name', $email)";
$response['message'] .= $query."<br/>";
}
die(json_encode($response));
因此,当我提交表单时,这是输出(假设我取消选中5个复选框中的第二个索引):
"INSERT INTO payments() VALUES (NULL, '1 waw', 1)"
"INSERT INTO payments() VALUES (NULL, '2 wew', 1)"
"INSERT INTO payments() VALUES (NULL, '3 wiw', 1)"
"INSERT INTO payments() VALUES (NULL, '4 wow', 1)"
"INSERT INTO payments() VALUES (NULL, '5 wuw', 0)"
应该是
&#34; INSERT INTO payment()VALUES(NULL,&#39; 2 wew&#39;,0)&#34;
任何启示?
答案 0 :(得分:1)
所有输入都需要具有不同的名称。
现在有一个有两个名称multipayment_name[]
和multipayment_email[]
答案 1 :(得分:1)
试试这个:
<form method="POST">
<?php $idx = 0; ?>
<?php while($row = mysqli_fetch_array($selectQuery)): ?>
<input type="text" name="rows[<?php echo $i; ?>][name]" required/>
<input type="checkbox" name="rows[<?php echo $i; ?>][email]" checked />
<?php ++$idx; ?>
<?php endwhile; ?>
</form>
因此,如果未选中第三个复选框,您将获得以下格式的$ _POST数据:
array(
'rows' => array(
array(
'name' => 'the value of name 1',
'email' => 'on'
),
array(
'name' => 'the value of name 2',
'email' => 'on'
),
array(
'name' => 'the value of name 3'
)
)
)
未检查的复选框将使该字段未设置且未发布,并且您可以轻松地执行isset
检查以确定是否已选中。
$rows = $_POST['rows'];
foreach ($rows as $row) {
$email = isset($row['email') ? 1 : 0;
$name = $row['name'];
$query = "INSERT INTO payments() VALUES (NULL, '$name', $email)";
$response['message'] .= $query."<br/>";
}
但请注意,此代码易受SQL注入攻击。由于这超出了这个问题的范围,所以我们不要在这里深入研究:)
答案 2 :(得分:-1)
最后一个没有被取消选中,这行代码会给你不想要的结果。
$email = isset($emails[$key]) ? 1:0;
取消选中该复选框后,它将不会提交给服务器。转储您提交的复选框数组我想你会得到它)