Intereting Posts

значение checkbox в массиве post не в правильной строке mysql

Привет, я пытаюсь преобразовать поле формы ввода в флажок. в поле ввода i введите либо 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"); } ?> 

Каждая работа прекращается до тех пор, пока я не изменю входные данные, внесенные в флажок. Что я делаю не так. Я прокомментировал внесенный вклад, как вы можете видеть в коде, и добавил скрытый ввод под name=paid[] и флажок name=paid[]

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

ОБНОВЛЕНИЕ Когда платная [] почта не публикует флажок без значка = 0, спасибо jon

РЕШЕН С ПОМОЩЬЮ от @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' ?>/> 

добавить JavaScript для изменения скрытого значения

 <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <script> $(document).on("change", "input[type='checkbox']", function() { var checkbox_val = ( this.checked ) ? 1 : 0; $(this).siblings('input.checkbox_handler').val(checkbox_val); });</script> 

Спасибо за вашу помощь!

Это связано с тем, что нулевые значения флажков вообще не отправляются с формой. Это заставляет массив перемещаться вверх, не включая нулевые значения. Используйте скрытое текстовое поле с каждым флажком, так как без значения в текстовом поле по крайней мере нулевой будет опубликован с формой на submit.

Вот как вы могли добиться этого с помощью 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>