За последние 24 часа нас посетили 8303 программиста и 468 роботов. Сейчас ищут 226 программистов ...

Передать выбранные значения в checkbox...

Тема в разделе "Прочие вопросы по PHP", создана пользователем Cyusik, 2 июл 2020.

Метки:
  1. Cyusik

    Cyusik Новичок

    С нами с:
    12 апр 2020
    Сообщения:
    12
    Симпатии:
    0
    Здравствуйте! Долгое время никак не получается как решить следующую проблему:
    1. Запросом GET по имени вывожу данные из БД в табличном виде в input-ы для того, чтобы их можно было отредактировать и POST запросом по кнопке вновь занести в БД.
    2. Поскольку могут выводиться несколько строк из базы данных, пытаюсь сделать checkbox для того, чтобы можно было удалить или сохранить в бд только выбранные строки.
    Проблема:
    1. Не могу понять как именно связать выводимую строку с выбираемым checkbox. У меня получается что либо по кнопке передаются абсолютно все выведенные данные (если всем инпутам дать имя как у чекбокса), либо последняя выведенная строка из бд по get запросу, вне зависимости от того на какой checkbox я ставлю галочку...
    Вот код запроса данных и внизу две кнопки "Сохранить" и "Удалить"
    PHP:
    1. <?php
    2.       if (isset($_GET['names'])) {
    3.          $names = $_GET['names'];
    4.          if($names == false) {
    5.             echo "<br><b style='color:red'>Введи имя</b>";
    6.          }
    7.          else {
    8.             mysqli_query($link, "SET NAMES 'utf8'");
    9.             $query = "SELECT * FROM tablballs WHERE nickname='$names'";
    10.             $result = mysqli_query($link, $query) or die("Ошибка ".mysqli_error($link));
    11.             if($result) {
    12.                $rows = mysqli_num_rows($result);
    13.                if ($rows > 0) {
    14.                echo "<br>Данные игрока <b style='color:red'>$names</b><br><br>";
    15.                echo "<form method='POST' action=''><table class='table_dark2'><tr>
    16.               <th>Выбор</th>
    17.               <th>id</th>
    18.               <th>Имя</th>
    19.               <th>Очки</th>
    20.               </tr>";
    21. echo "<tr>";
    22. for($i = 0; $i < $rows; ++$i) {
    23.    $row = mysqli_fetch_row($result);
    24.       echo "<td><input class='input_checkbox' type='checkbox' name='check' value=' '>";
    25.          echo nl2br("<td><input class='input' name='id_user' value='$row[0]' readonly='readonly'</td>");
    26.          echo nl2br("<td><input class='input' name='nick_user' value='$row[1]'></td>");
    27.          echo nl2br("<td><input class='input' name='point_user' value='$row[2]'></td>");
    28.       echo "</tr>";
    29.       echo "<th colspan='4'>История игрока</th>";
    30.       echo "<tr>";
    31.          echo "<td colspan='4'><textarea class='textarea' name='history_user'>$row[3]</textarea></td>";
    32.       echo "</tr>";
    33.    }
    34.          echo "</table><br><br>";
    35.          echo "
    36.         <div class='block_button'>
    37.            <button class='button10' type='submit' name='update_line'>Сохранить изменения</button>
    38.            <button class='button10' type='submit' name='del_line'>Удалить строку</button>
    39.         </div></form>";
    40.             } else {
    41.                   echo "<table class='table_dark2'>
    42.                        <tr>
    43.                           <th>Ошибка</th>
    44.                        </tr>
    45.                        <tr>
    46.                           <td>Такого имени нет</td>
    47.                        </tr>
    48.                        </table>";
    49.                }
    50.             }
    51.          }
    52.       }
    53.       ?>
    54. include_once '../script/editing.php';
    Далее код editing.php , но он актуален только для простых строк без чекбоксов..

    PHP:
    1. <?php
    2. // Обновление данных
    3. if (isset($_POST['update_line'])) {
    4.       include_once 'connect.php';
    5.       $id_player = $_POST['id_user'];
    6.       $nickname_player = $_POST['nick_user'];
    7.       $points_player = $_POST['point_user'];
    8.       $history_player = $_POST['history_user'];
    9.       $query ="UPDATE tablballs SET nickname='$nickname_player', balls='$points_player', history='$history_player' WHERE id='$id_player'";
    10.       $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link));
    11.       if($result) {
    12.          echo "<b style='color:red'>Данные игрока $nickname_player обновлены</b>";
    13.       }
    14. }
    15. // Удаление данных
    16. if (isset($_POST['del_line'])) {
    17.    include_once 'connect.php';
    18.    $id = $_POST['id_user'];
    19.    $nickname = $_POST['nick_user'];
    20.    $query = "DELETE FROM tablballs WHERE id = '$id'";
    21.    $result = mysqli_query($link, $query) or die("Ошибка ".mysqli_error($link));
    22.    echo "<br><b style='color:red;'>Игрок $nickname (id $id) удален из таблицы</b>";
    23. }
    Вот что примерно выводится
    Screenshot_2.png

    т.е. мне нужно чтобы при нажатии на 2 галочку изменялась вторая строка)
    Подскажите пожалуйста как реализовать, какие темы почитать или скиньте ссылку с темой где я могу найти ответы на свои вопросы, я сколько искал но не нашел того, что бы мне помогло..
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.708
    Симпатии:
    429
    Множественное редактирование – это идиотизм. Даже когда для пользователя оно выглядит так, в реале обновление происходит отдельными записями или даже отдельными полями отдельных записей.
    --- Добавлено ---
    Осваивайте AJAX или переходите на редактирование отдельными записями.
     
  3. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.194
    Симпатии:
    373
    @Cyusik я делал такое буквально недавно, человеку надо было без JS для лабораторной работы:

    PHP:
    1. function table_2( $db )
    2. {
    3.     $sql ="SELECT `mg`.id, `ms`.`fio`, `ml`.`lesson`, `mg`.grade
    4.  FROM `my_student` AS `ms`
    5.  LEFT JOIN `my_grade` AS `mg` ON `mg`.`student_id` = `ms`.`id`
    6.  LEFT JOIN `my_lessons` AS `ml` ON `ml`.`id` = `mg`.`lesson_id`";
    7.     $query = $db->prepare($sql);
    8.     $query->execute();
    9.     $row = $query->fetchAll();
    10.  
    11.     $table = '<form method="post"><table border="1" style="text-align:center; padding: 2px">
    12.       <caption>Полный список</caption>
    13.       <tr>
    14.        <th>ФИО</th>
    15.        <th>Предмет</th>
    16.        <th>Оценка</th>
    17.        <th>Изменить</th>
    18.       </tr>';
    19.  
    20.  
    21.     foreach( $row as $key =>  $item )
    22.     {
    23.       $select = "<select name='chage[{$key}]'><option selected disabled>Выберите оценку</option>";
    24.       for ($i = 1; $i <= 10; $i++) {
    25.         $select .= "<option value='{$i}'>{$i}</option>";
    26.       }
    27.    
    28.       $select .= "</select><input type='hidden'  name='grade_id[$key]' value='{$item['id']}'/>";
    29.    
    30.        $table .= "<tr>
    31.        <td>{$item['fio']}</td>
    32.        <td>{$item['lesson']}</td>
    33.        <td>{$item['grade']}</td>
    34.        <td>{$select}</td>
    35.        </tr>";
    36.     }
    37.  
    38.    $table .= "</table><br><input type='submit' value='Изменить оценки'/>
    39.   </form>";
    40.      return $table;
    41. }
    insert не покажу, но думаю будет понятно как надо)
    как работает тут http://testui.ru/
     
  4. Cyusik

    Cyusik Новичок

    С нами с:
    12 апр 2020
    Сообщения:
    12
    Симпатии:
    0
    "Идите и учитесь" - что может быть проще.. Хоть бы подсказали, что на Ваш взгляд лучше и с чего начать, я то не против.
    --- Добавлено ---
    Буду пробовать, может что-то путное выйдет с foreach. Спасибо Вам
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.708
    Симпатии:
    429
    А вам не понятно, что на мой взгляд лучше, исходя из этого:
    P.S. При редактировании отдельных записей, конечно, тоже можно использовать AJAX. Вся разница в том, как отображается форма редактирования, на отдельной странице или на странице списка (во всплывающем блоке).
     
  6. Drunkenmunky

    Drunkenmunky Новичок

    С нами с:
    12 авг 2020
    Сообщения:
    170
    Симпатии:
    28
    Проблема в недопонимании как работает этот элемент формы.
    У вас что-то вроде:
    Код (Text):
    1. <form method=post action="checkbox.php">
    2.   <input type=checkbox name="check" value="check1"><br />
    3.   <input type=checkbox name="check" value="check2"><br />
    4.   <input type=checkbox name="check" value="check3"><br />
    5.   <input type=submit value="GO">
    6. </form>
    Все элементы названы одинаково.
    В этом случае будет отправлен только последний из активированных

    Выхода два.
    Либо именовать все эти элементы различными именами, например:
    Код (Text):
    1. <form method=post action="checkbox.php">
    2.   <input type=checkbox name="check01" value="check1"><br />
    3.   <input type=checkbox name="check02" value="check2"><br />
    4.   <input type=checkbox name="check03" value="check3"><br />
    5.   <input type=submit value="GO">
    6. </form>
    И уже искать в полученном массиве S_POST все элементы с именами начинающимися на "check"
    Либо же преобразовать имена этих элементов в массив. Средствами HTML. Просто добавив к имени элемента [].
    Вот попробуйте:
    PHP:
    1. <?php
    2. if (isset($_POST['check']))
    3. {
    4. print_r($_POST['check']);
    5. }
    6. else
    7. {
    8. echo 'something wrong<br /><br />';
    9. }
    10.  
    11. ?>
    12.  
    13. <form method=post action="checkbox.php">
    14.   <input type=checkbox name="check[]" value="check1"><br />
    15.   <input type=checkbox name="check[]" value="check2"><br />
    16.   <input type=checkbox name="check[]" value="check3"><br />
    17.   <input type=submit value="GO">
    18. </form>