_POST не возвращает значение из checkbox

Добрый день
при нажатии на сheckbox в _POST нет никаких данных. пусто
в чем причина может быть?

PHP:
  1. <?php // test.php
  2.  
  3.   require_once ‘login.php’;
  4.    
  5.   try
  6.   {
  7.     $pdo = new PDO($attr, $user, $pass, $opts);
  8.   }
  9.   catch (PDOException $e)
  10.   {
  11.     throw new PDOException($e->getMessage(), (int)$e->getCode());
  12.   }
  13.  
  14.   $query = «SELECT `id`, `Name`, `Date_of`, `Time_of`, `Check`, `Task`, `Note`, `Note2`, `Source` FROM `Tasks`»;
  15.   $result = $pdo->query($query);
  16.  
  17.   echo «<table>
  18.         <tr>
  19.            <th>Id</th>
  20.            <th>Name</th>
  21.            <th>Date_of</th>
  22.            <th>Time_of</th>
  23.            <th>Check</th>
  24.            <th>Task</th>
  25.            <th>Note</th>
  26.            <th>Note2</th>
  27.            <th>Source</th>
  28.        </tr>»;
  29.  
  30.   if (isset($_POST[‘edit’]) && isset($_POST[‘id’]))
  31.   {
  32.     //print $_POST[‘id’];
  33.     //$query = «DELETE FROM classics WHERE isbn=$isbn»;
  34.     //$result = $pdo->query($query);
  35.   }
  36.   if (isset($_POST[‘done’]) && isset($_POST[‘done’]) == 0)
  37.   {
  38.     print $_POST[‘done’];
  39.   }
  40.   print $_POST[‘done’];
  41.  
  42.   while ($row = $result->fetch(PDO::FETCH_NUM))
  43.   {
  44.     echo «<tr>»;
  45.     for ($k = 0 ; $k < 9 ; ++$k)
  46.     {
  47.  
  48.       if ($k === 4)
  49.       {
  50.        
  51.         if (htmlspecialchars($row[4]) == 0)
  52.         {
  53.             //echo ‘<td><form action=»test.php» method=»post»><input type=»checkbox» name=»done» value=0></td>’;
  54.         }
  55.         else
  56.         {
  57.             //echo ‘<td><form action=»test.php» method=»post»><input type=»checkbox» name=»done» checked=»checked» value=1></td>’;
  58.         }  
  59.       }
  60.       else
  61.       {
  62.         echo «<td>» . htmlspecialchars($row[$k]) . «</td>»;
  63.       }
  64.      
  65.       $r0 = htmlspecialchars($row[0]);
  66.     }
  67.  
  68.       echo <<<_END
  69.      
  70.         <td>
  71.         <form action=‘test.php’ method=‘post’>
  72.         <input type=‘hidden’ name=‘edit’ value=‘yes’>
  73.         <input type=‘hidden’ name=‘id’ value=‘$r0’>
  74.         <input type=‘submit’ value=‘Редактировать’></form>    
  75.         </td>
  76.  
  77.         <td>
  78.           <form action=‘test.php’ method=‘post’>
  79.           <input type=‘checkbox’  name=‘done’ value=‘0’>
  80.         </td>
  81.        
  82.         <td>
  83.         <select name=«veg» size=«1»>
  84.           <option value=«Горох»>Горох</option>
  85.           <option value=«Фасоль»>Фасоль</option>
  86.           <option value=«Морковь»>Морковь</option>
  87.           <option value=«Капуста»>Капуста</option>
  88.           <option value=«Брокколи»>Брокколи</option>
  89.         </select>
  90.         </td>
  91.  
  92.       _END;
  93.      
  94.     echo «</tr>»;
  95.   }
  96.   echo «</table>»;
  97.  
  98.   $pdo = null;
  99.  
  100.  
  101.  
  102.  
  103.   ?>
 

не тот раздел и вознаграждение не указано )

 

в коде полный бред… ни одна форма не закрыта, ни одного submit нет
форма в форме.. кароче полный бред…

это условие будет выполнено только в случае если чекбокс будет выбран… не выбранные чекбоксы в форме не передаются вообще

это выполнится — когда чекбокс не выбран .. то есть два раза проверка что существует .. и потом сравнение с 0 типа ложью… наверняка правильно надо так

PHP:
  1. if (isset($_POST[‘done’]) && ($_POST[‘done’] == 0))

это выполнится — если чекбокс выбран

 

Спасибо
Это учебный код, я пока учусь

речь идет о другом —

PHP:
  1. print$_POST[‘done’];

ничего не возвращает, даже если я буду нажимать чекбокс

 

Input находится за пределами формы.

PHP:
  1. <?php
  2.  
  3. if (isset($_POST[‘edit’]) && isset($_POST[‘id’])) {
  4.     //print $_POST[‘id’];
  5.     //$query = «DELETE FROM classics WHERE isbn=$isbn»;
  6.     //$result = $pdo->query($query);
  7. }
  8. if (isset($_POST[‘done’]) && isset($_POST[‘done’]) == 0) {
  9.     print $_POST[‘done’];
  10. }
  11. ?>
  12.  
  13. <table>
  14.     <tr>
  15.         <th>Id</th>
  16.         <th>Name</th>
  17.         <th>Date_of</th>
  18.         <th>Time_of</th>
  19.         <th>Check</th>
  20.         <th>Task</th>
  21.         <th>Note</th>
  22.         <th>Note2</th>
  23.         <th>Source</th>
  24.     </tr>
  25.  
  26.     <tr>
  27.         <td>
  28.             <form action=’test.php’ method=’post’ id=»form_1″>
  29.                 <input type=»hidden» name=»edit» value=»yes»>
  30.                 <input type=»hidden» name=»id» value=»1″>
  31.                 <input type=»submit» value=»Редактировать»>
  32.             </form>
  33.         </td>
  34.         <td>
  35.                 <input type=»checkbox» name=»done» value=»0″ form=»form_1″>
  36.         </td>
  37.  
  38.         <td>
  39.             <select name=»veg» size=»1″ form=»form_1″>
  40.                 <option value=»Горох»>Горох</option>
  41.                 <option value=»Фасоль»>Фасоль</option>
  42.                 <option value=»Морковь»>Морковь</option>
  43.                 <option value=»Капуста»>Капуста</option>
  44.                 <option value=»Брокколи»>Брокколи</option>
  45.             </select>
  46.         </td>
  47.     </tr>
  48. </table>
 

PHP:
  1. <td>
  2.         <form action=‘test.php’ method=‘post’>
  3.         <input type=‘hidden’ name=‘edit’ value=‘yes’>
  4.         <input type=‘hidden’ name=‘id’ value=‘$r0’>
  5.         <input type=‘submit’ value=‘Редактировать’></form>  
  6.         </td>

этот код находится в том же месте что done, но id выдано, а done нет
почему?

 

В данной форме нет поля с done.

 

PHP:
  1.       echo <<<_END
  2.      
  3.         <td>
  4.         <form action=‘test.php’ method=‘post’>
  5.         <input type=‘hidden’ name=‘edit’ value=‘yes’>
  6.         <input type=‘hidden’ name=‘id’ value=‘$r0’>
  7.         <input type=‘submit’ value=‘Редактировать’></form>    
  8.         </td>
  9.  
  10.         <td>
  11.           <form action=‘test.php’ method=‘post’>
  12.           <input type=‘checkbox’  name=‘done’ value=‘0’>
  13.         </td>
  14.        
  15.         <td>
  16.         <select name=«veg» size=«1»>
  17.           <option value=«Горох»>Горох</option>
  18.           <option value=«Фасоль»>Фасоль</option>
  19.           <option value=«Морковь»>Морковь</option>
  20.           <option value=«Капуста»>Капуста</option>
  21.           <option value=«Брокколи»>Брокколи</option>
  22.         </select>
  23.         </td>
  24.  
  25.  
  26.       _END;

вот здесь

 

Первая форма закрывается <input type=’submit’ value=’Редактировать’></form>
Вторая форма, где находится «<input type=’checkbox’ name=’done’ value=’0′>». Открывается, но не закрывается.
Если отправить первую форму отправятся edit и id. Если вторую в ней будет done, но нажав на кнопку ‘Редактировать’ отправляется первая форма.
В примере выше убрана вторая форма, а к первой форме присоединен»<input type=’checkbox’ name=’done’ value=’0′>»

 

Спасибо, очень дельное замечание
я исправил но все равно массив не отображается

PHP:
  1.         <td>
  2.         <form action=‘test.php’ method=‘post’>
  3.         <input type=‘hidden’ name=‘edit’ value=‘yes’>
  4.         <input type=‘hidden’ name=‘id’ value=‘$r0’>
  5.         <input type=‘submit’ value=‘Редактировать’>
  6.         </form>    
  7.         </td>
  8.  
  9.         <td>
  10.           <form action=‘test.php’ method=‘post’>
  11.           <input type=‘checkbox’  name=‘done’ value=‘0’>
  12.           </form>
  13.         </td>
 

PHP:
  1. <td>
  2.    <form action=‘test.php’ method=‘post’ id=«form_1»>
  3.      <input type=‘hidden’ name=‘edit’ value=‘yes’>
  4.      <input type=‘hidden’ name=‘id’ value=‘1’>
  5.      <input type=‘submit’ value=‘Редактировать’>
  6.    </form>
  7. </td>
  8. <td>
  9.      <input type=‘checkbox’ name=‘done’ value=‘0’ form=«form_1»>
  10. </td>

К форме добавлен id=»form_1″, убрана вторая форма и input прикреплен к первой форме form=»form_1″. В таком варианте будет работать.
В вашем примере нажав на кнопку ‘Редактировать’ вторая форма с done не отправляется.

 

я сделал но не работает
мне нужно чтобы на кнопку отправлялась свои данные а по чукбоксу свои

PHP:
  1.         <td>
  2.         <form action=‘test.php’ method=‘post’ id=«form_1»>
  3.         <input type=‘hidden’ name=‘edit’ value=‘yes’>
  4.         <input type=‘hidden’ name=‘id’ value=‘$r0’>
  5.         <input type=‘submit’ value=‘Редактировать’>
  6.         </form>    
  7.         </td>
  8.  
  9.         <td>
  10.           <input type=‘checkbox’  name=‘done’ value=‘0’ id=«form_1»>
  11.         </td>
 

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

 

хорошо
я убрал все формы
остался чекбокс, он тоже не возвращается данные
вопрос — почему?

PHP:
  1.  
  2. <?php // test.php
  3.  
  4.  
  5. print $_POST[‘done’];
  6.  
  7. echo <<<_END
  8.  
  9. <td>
  10. <form action=‘test.php’ method=‘post’>
  11. <input type=‘checkbox’ name=‘done’ value=‘0’>
  12. </form>
  13. </td>
  14. _END;
  15.  
  16.  
  17. ?>
 

Потому что не выполняется submit формы.
PHP: Работа с формами — Manual

 

Спасибо
но если я сделаю submit, у меня появится кнопка. а мне нужно чтобы по чукбоксу отправлялись данные

 

Спасибо
как я понял обработка чекбокса возможна только с помощью JS?
а стандартными средствами POST нельзя?

 

Стандартными средствами html ?
стандартными средствами это отправка формы по нажатию на кнопку submit.

Если нужна отправка формы без перезагрузки страницы, то с помощью js тогда

 

Добрый день!
Обработка событий происходит на JS в браузере.
В Вашем случае нужно установить на объект чекбокс обработчик события Click:

HTML:
  1. <form action=‘test.php’ method=‘post’>
  2. <input type=‘checkbox’ name=‘done’ value=‘0’ onClick=‘this.parentElement.submit()’>
  3. </form>

Удачи!

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *