Php post数组中的复选框值不在正确的mysql行中

Php post数组中的复选框值不在正确的mysql行中,php,html,arrays,checkbox,Php,Html,Arrays,Checkbox,您好,我正在尝试将输入表单字段转换为复选框。在输入字段中输入1或0,这可以正常工作,并正确存储在MySQL数据库中。我试图将输入字段更改为复选框,以便checked=1和unchecked=0 当我将输入更改为复选框值时,它无法正常工作。这些值存储在mysql中的错误行中。有人能帮忙吗 <?php include('config.php'); ?> <?php $mm = "SELECT * FROM test_mysql"; $result = mysql

您好,我正在尝试将输入表单字段转换为复选框。在输入字段中输入1或0,这可以正常工作,并正确存储在MySQL数据库中。我试图将输入字段更改为复选框,以便
checked=1
unchecked=0

当我将输入更改为复选框值时,它无法正常工作。这些值存储在mysql中的错误行中。有人能帮忙吗

<?php include('config.php'); ?>
<?php       $mm = "SELECT * FROM test_mysql";
    $result = mysqli_query($mysqli, $mm) or die('-1'.mysqli_error());
 $count = $result->num_rows;
printf("Result set has %d rows.\n", $count);
// Count table rows 

?>

<table width="500" border="0" cellspacing="1" cellpadding="0">
<form  method="post" action="">
<tr> 
<td>
<table width="500" border="0" cellspacing="1" cellpadding="0">

<tr>
<td align="center"><strong>Id</strong></td>
<td align="center"><strong>Name</strong></td>
<td align="center"><strong>Lastname</strong></td>
<td align="center"><strong>Paid</strong></td>
</tr>

<?php
        while ($rows = mysqli_fetch_assoc($result)) {
            $checked = $rows['paid'];
?>

<tr>
<td align="center">
<input name="id[]" type="text" id="id" value="<? echo $rows['id']; ?>">
</td>
<td align="center">
<input name="name[]" type="text" id="name" value="<? echo $rows['name']; ?>">
</td>
<td align="center">
<input name="lastname[]" type="text" id="lastname" value="<? echo $rows['lastname']; ?>">
</td>
<td align="center">
<?php /*?><input name="paid[]" type="text" id="paid" value="<? echo $rows['paid']; ?>"><?php */?>
</td>
<td align="center">
<input type="hidden" name="paid[]" value="0" />
<input type="checkbox" name="paid[]" value="1"<?php if ($checked == 1 ) echo 'checked' ?>/>

</td>
</tr>
<?php } ?>
<tr>
<td colspan="4" align="center"> <button type="input" name="submit" value="editTask" class="btn btn-success btn-lg btn-icon"><i class="fa fa-check-square-o"></i>submit</button></td>
</tr>
</table>
</td>
</tr>
</form>
</table>
        <?php

// Check if button name "Submit" is active, do this 
if (isset($_POST['submit']) && $_POST['submit'] == 'editTask'){
    $entryId = $mysqli->real_escape_string($_POST['id']);

    foreach($_POST['id'] as $key=>$id) {

        $name = $_POST['name'][$key];
        $lastname = $_POST['lastname'][$key];
        $paid = $_POST['paid'][$key];
$stmt = $mysqli->prepare("UPDATE test_mysql SET name=?, lastname=?, paid=? WHERE id = ?");
$stmt->bind_param('ssss', $name, $lastname, $paid,$id);
$stmt->execute();

}
$stmt->close();
header("location:page.php");
}
?>
当付费[]post未发布未选中复选框值=0时更新 谢谢 乔恩

在@aimme的帮助下解决

<input type="hidden" class="checkbox_handler" name="paid[]" value="<? echo $rows['paid']; ?>"<?php if ($checked == 1 ) echo 'checked' ?> />
<input type="checkbox" name="paidcheck[]" value="1" <?php if ($checked == 1 ) echo 'checked' ?>/>
/>

这是因为复选框的空值根本不随表单一起发布。这使得数组向上移动而不包括空值。在每个复选框中使用一个隐藏的文本框,因为文本框中没有值,至少在提交表单时会将空值与表单一起发布

下面是使用Jquery实现这一点的方法

<?php 
echo '<pre>';
print_r($_POST);
echo '</pre>';
$checked=0;
?>

<html>

<head>
  <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
 </head>
 <body>
 <form method="post" action="">
<input type="hidden" name="paidHidden" id="paid" value="<?php echo ($checked == 1)?'1':'0'; ?>" />
<!-- for debugging to check whether it works
<input type="text" name="paidHidden" id="paid" value="0" />
-->
<input type="checkbox" name="dummy" id="dummy" <?php echo ($checked == 1)?'checked':''; ?>/>
<input type="submit" name="sub" />
</form> 
  <script>
      $("#dummy").click(function(){
          if ($(this).is(":checked"))
            {$("#paid").val(1);}
          else
          {$("#paid").val(0);}
      });
  </script>
 </body>
 </html>

/>
$(“#虚拟”)。单击(函数(){
如果($(this).is(“:checked”))
{$(“#已付”).val(1);}
其他的
{$(“#已付”).val(0);}
});

这是因为复选框的空值根本不随表单一起发布。这使得数组向上移动而不包括空值。在每个复选框中使用一个隐藏的文本框,因为文本框中没有值,至少在提交表单时会将空值与表单一起发布

下面是使用Jquery实现这一点的方法

<?php 
echo '<pre>';
print_r($_POST);
echo '</pre>';
$checked=0;
?>

<html>

<head>
  <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
 </head>
 <body>
 <form method="post" action="">
<input type="hidden" name="paidHidden" id="paid" value="<?php echo ($checked == 1)?'1':'0'; ?>" />
<!-- for debugging to check whether it works
<input type="text" name="paidHidden" id="paid" value="0" />
-->
<input type="checkbox" name="dummy" id="dummy" <?php echo ($checked == 1)?'checked':''; ?>/>
<input type="submit" name="sub" />
</form> 
  <script>
      $("#dummy").click(function(){
          if ($(this).is(":checked"))
            {$("#paid").val(1);}
          else
          {$("#paid").val(0);}
      });
  </script>
 </body>
 </html>

/>
$(“#虚拟”)。单击(函数(){
如果($(this).is(“:checked”))
{$(“#已付”).val(1);}
其他的
{$(“#已付”).val(0);}
});

您为什么使用付费[]发送电子邮件。请在选中之前删除空格
echo'checked'?>/>
对不起,id=“email”我已更改为id=“paid”,并且忘记更改我正在处理的演示代码。为什么您在电子邮件中使用paid[]。请在选中之前删除空格
echo'checked'?>/>
对不起,id=“email”我已更改为id=“paid”,并且忘记更改演示代码我正在为您提供建议,但我已经有了
ya我知道。在提交表单之前,使用JavaScript检测相应复选框上的更改,并将复选框的值指定给隐藏的文本框。:)编辑代码如何使用javascript实现这一点?你能给我指一下正确的方向吗?是的。我会的。解决了这个问题谢谢你的帮助!!我已经在原始问题的更新中发布了工作代码,谢谢AIMMANK您的建议,但我已经有了
ya我知道。在提交表单之前,使用JavaScript检测相应复选框上的更改,并将复选框的值指定给隐藏的文本框。:)编辑代码如何使用javascript实现这一点?你能给我指一下正确的方向吗?是的。我会的。解决了这个问题谢谢你的帮助!!我已经将工作代码发布在原始问题的更新中,谢谢
<?php 
echo '<pre>';
print_r($_POST);
echo '</pre>';
$checked=0;
?>

<html>

<head>
  <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
 </head>
 <body>
 <form method="post" action="">
<input type="hidden" name="paidHidden" id="paid" value="<?php echo ($checked == 1)?'1':'0'; ?>" />
<!-- for debugging to check whether it works
<input type="text" name="paidHidden" id="paid" value="0" />
-->
<input type="checkbox" name="dummy" id="dummy" <?php echo ($checked == 1)?'checked':''; ?>/>
<input type="submit" name="sub" />
</form> 
  <script>
      $("#dummy").click(function(){
          if ($(this).is(":checked"))
            {$("#paid").val(1);}
          else
          {$("#paid").val(0);}
      });
  </script>
 </body>
 </html>