За последние 24 часа нас посетили 36910 программистов и 7901 робот. Сейчас ищут 1717 программистов ...

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

Тема в разделе "PHP для новичков", создана пользователем Сергей111222, 21 сен 2023.

  1. Сергей111222

    Сергей111222 Новичок

    С нами с:
    21 сен 2023
    Сообщения:
    10
    Симпатии:
    0
    Добрый день
    при нажатии на с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.   ?>
     

    Вложения:

    • test.txt
      Размер файла:
      2,4 КБ
      Просмотров:
      0
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    не тот раздел и вознаграждение не указано )
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    в коде полный бред... ни одна форма не закрыта, ни одного submit нет
    форма в форме.. кароче полный бред...

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

    это выполнится - когда чекбокс не выбран .. то есть два раза проверка что существует .. и потом сравнение с 0 типа ложью... наверняка правильно надо так
    PHP:
    1. if (isset($_POST['done']) && ($_POST['done'] == 0))
    это выполнится - если чекбокс выбран
     
  4. Сергей111222

    Сергей111222 Новичок

    С нами с:
    21 сен 2023
    Сообщения:
    10
    Симпатии:
    0
    Спасибо
    Это учебный код, я пока учусь

    речь идет о другом -
    PHP:
    1. print$_POST['done'];
    ничего не возвращает, даже если я буду нажимать чекбокс
     
  5. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    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>
     
    #5 Aleksandr.B, 22 сен 2023
    Последнее редактирование: 22 сен 2023
  6. Сергей111222

    Сергей111222 Новичок

    С нами с:
    21 сен 2023
    Сообщения:
    10
    Симпатии:
    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='Редактировать'></form>  
    6.         </td>
    этот код находится в том же месте что done, но id выдано, а done нет
    почему?
     
  7. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    В данной форме нет поля с done.
     
  8. Сергей111222

    Сергей111222 Новичок

    С нами с:
    21 сен 2023
    Сообщения:
    10
    Симпатии:
    0
    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;

    вот здесь
     
  9. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    Первая форма закрывается <input type='submit' value='Редактировать'></form>
    Вторая форма, где находится "<input type='checkbox' name='done' value='0'>". Открывается, но не закрывается.
    Если отправить первую форму отправятся edit и id. Если вторую в ней будет done, но нажав на кнопку 'Редактировать' отправляется первая форма.
    В примере выше убрана вторая форма, а к первой форме присоединен"<input type='checkbox' name='done' value='0'>"
     
  10. Сергей111222

    Сергей111222 Новичок

    С нами с:
    21 сен 2023
    Сообщения:
    10
    Симпатии:
    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>
     
  11. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    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 не отправляется.
     
    #11 Aleksandr.B, 22 сен 2023
    Последнее редактирование: 22 сен 2023
  12. Сергей111222

    Сергей111222 Новичок

    С нами с:
    21 сен 2023
    Сообщения:
    10
    Симпатии:
    0
    я сделал но не работает
    мне нужно чтобы на кнопку отправлялась свои данные а по чукбоксу свои

    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>
     
  13. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    В таком случае нужны две формы. Каждая из них отправляется отдельно по нажатию кнопки в данной форме или по событию js для данной формы, но возможно не совсем понял тз.
     
  14. Сергей111222

    Сергей111222 Новичок

    С нами с:
    21 сен 2023
    Сообщения:
    10
    Симпатии:
    0
    хорошо
    я убрал все формы
    остался чекбокс, он тоже не возвращается данные
    вопрос - почему?

    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. ?>
     
  15. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Потому что не выполняется submit формы.
    PHP: Работа с формами - Manual
     
  16. Сергей111222

    Сергей111222 Новичок

    С нами с:
    21 сен 2023
    Сообщения:
    10
    Симпатии:
    0
    Спасибо
    но если я сделаю submit, у меня появится кнопка. а мне нужно чтобы по чукбоксу отправлялись данные
     
  17. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
  18. Сергей111222

    Сергей111222 Новичок

    С нами с:
    21 сен 2023
    Сообщения:
    10
    Симпатии:
    0
    Спасибо
    как я понял обработка чекбокса возможна только с помощью JS?
    а стандартными средствами POST нельзя?
     
  19. yanuzay

    yanuzay Активный пользователь

    С нами с:
    28 мар 2018
    Сообщения:
    503
    Симпатии:
    58
    Стандартными средствами html ?
    стандартными средствами это отправка формы по нажатию на кнопку submit.

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

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    485
    Симпатии:
    97
    Адрес:
    Бавария, Германия
    Добрый день!
    Обработка событий происходит на JS в браузере.
    В Вашем случае нужно установить на объект чекбокс обработчик события Click:
    HTML:
    1. <form action='test.php' method='post'>
    2. <input type='checkbox' name='done' value='0' onClick='this.parentElement.submit()'>
    3. </form>
    Удачи!
     
  21. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    чУкбоксы только у Чукчей.... )))