За последние 24 часа нас посетили 8919 программистов и 611 роботов. Сейчас ищут 175 программистов ...

Не выводятся данные в select

Тема в разделе "PHP и базы данных", создана пользователем lordconst, 7 дек 2019.

  1. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    Привет!)
    Имеется такой код:
    if($_GET['value'] == student) {
    $link = mysqli_connect($host, $user, $password, $database)
    or die("Ошибка " . mysqli_error($link));

    $query = 'SELECT ID_student, FIO_student, group_name
    FROM student INNER JOIN study_group ON (student.ID_group = study_group.ID_group)';
    $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link));
    $queryGroup = 'SELECT * FROM study_group';
    $resultGroup = mysqli_query($link, $queryGroup) or die("Ошибка " . mysqli_error($link));
    $dataGroup = mysqli_fetch_assoc($resultGroup);

    echo '<form method = "POST" action = "edit.php">
    <h2>Студенты</h2>
    <table class = "table table-hover table-striped">
    <thead class = "thead-inverse thead-dark">
    <tr>
    <th>Номер студента</th>
    <th>ФИО студента</th>
    <th>Название группы</th>
    </tr>
    </thead>
    <tbody>';
    while($data = mysqli_fetch_assoc($result)) {
    echo '<tr>
    <th scope="row">'.$data['ID_student'].'</th>
    <th scope="row">
    <input type="text" size="30" name="FIO_student" value="'.$data['FIO_student'].'">
    </th>
    <th scope="row">
    <select name="ID_group" class="form-control">
    <option selected value="'.$data['ID_group'].'">'.$data['group_name'].'</option>
    <option value="'.$dataGroup['ID_group'].'">'.$dataGroup['group_name'].'</option>
    </select>
    </th>
    </tr>';
    }
    echo '</tbody>
    </table>';
    echo $htmlEnd;
    }
    Выводится таблица студентов. В первой колонке порядковый номер, вторая колонка это ФИО студента, а в третьей группа студента. По умолчанию указана текущая группа студента, а внутри списка должны выводиться все остальные существующие группы (их несколько).
    В чем проблема? Почему выводится лишь одна группа?
     

    Вложения:

  2. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.621
    Симпатии:
    269
    потому, что ты забираешь и выводишь из БД всего одну группу
    студентов ты забираешь и выводишь в цикле, тоже самое должно быть и с группами
    т.е. <option value="'.$dataGroup['ID_group'].'">'.$dataGroup['group_name'].'</option> должен быть завёрнут в цикл + проверка на совпадение текущей группы студента
    PHP:
    1. while($rowGroup = mysqli_fetch_assoc($dataGroup)) {
    2.   if ($rowGroup ['ID_group'] != $data['ID_group']) {
    3.      echo '<option value="'.$rowGroup ['ID_group'].'">'.$rowGroup ['group_name'].'</option>';
    4.   }
    5. }
    только не забудь разделить вывод echo на до и после этого цикла
    ну и смущает INNER JOIN почему именно он, а не LEFT JOIN?
    или студенты без группы идут лесом?
     
  3. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.621
    Симпатии:
    269
    Упс не увидел. Наверху убрать строку mysqli_fetch_assoc, а в цикле заменить $dataGroup на $resultGroup
     
  4. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    Теперь все группы выводит только у одного студента и его текущую группу он дублирует. А у всех остальных один единственный выбор в списке.
    Есть мысли как это исправить?
    Полный код исправленный:
    PHP:
    1. if($_GET['value'] == student) {
    2.     $link = mysqli_connect($host, $user, $password, $database)
    3.             or die("Ошибка " . mysqli_error($link));
    4.  
    5.         $query = 'SELECT ID_student, FIO_student, group_name
    6.        FROM student INNER JOIN study_group ON (student.ID_group = study_group.ID_group)';
    7.         $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link));
    8.         $queryGroup = 'SELECT * FROM study_group';
    9.         $resultGroup = mysqli_query($link, $queryGroup) or die("Ошибка " . mysqli_error($link));
    10.  
    11.         echo '<form method = "POST" action = "edit.php">
    12.                <h2>Студенты</h2>
    13.                <table class = "table table-hover table-striped">
    14.                    <thead class = "thead-inverse thead-dark">
    15.                        <tr>
    16.                            <th>Номер студента</th>
    17.                            <th>ФИО студента</th>
    18.                            <th>Название группы</th>
    19.                        </tr>
    20.                    </thead>
    21.                    <tbody>';
    22.         while($data = mysqli_fetch_assoc($result)) {
    23.             echo '<tr>
    24.                    <th scope="row">'.$data['ID_student'].'</th>
    25.                    <th scope="row">
    26.                        <input type="text" size="30" name="FIO_student" value="'.$data['FIO_student'].'">
    27.                    </th>
    28.                    <th scope="row">
    29.                        <select name="ID_group" class="form-control">
    30.                            <option selected value="'.$data['ID_group'].'">'.$data['group_name'].'</option>';
    31.                             while($rowGroup = mysqli_fetch_assoc($resultGroup)) {
    32.                                   if ($rowGroup ['ID_group'] != $data['ID_group']) {
    33.                                     echo '<option value="'.$rowGroup ['ID_group'].'">'.$rowGroup ['group_name'].'</option>';
    34.                                 }
    35.                             }
    36.                         '</select>
    37.                    </th>
    38.                  </tr>';
    39.         }
    40.         echo '</tbody>
    41.              </table>';
    42.     echo $htmlEnd;
    43. }
     

    Вложения:

  5. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.621
    Симпатии:
    269
    @lordconst, сорь туплю, три часа ночи было. Тут два варианта, либо сначала выгрузить данные из БД в массив и уже его использовать в цикле foreach вместо while($rowGroup=mysqli_fetch_assoc($resultGroup)). Либо каждый раз сдвигать указатель и тянуть данные из БД. Первый вариант предпочтительнее, поэтому второй (data_seek) не буду описывать.
    Верни назад свою строчку $dataGroup = mysqli_fetch_assoc($resultGroup); только взамест mysqli_fetch_assoc иcпользуй mysqli_fetch_all.
    Соответственно вместо while($rowGroup=mysqli_fetch_assoc($resultGroup)) напиши цикл foreach для $dataGroup
     
  6. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    Теперь вот пустоту почему-то выдает(
    Вот итоговый внешний цикл while с foreach внутри
    PHP:
    1. while($data = mysqli_fetch_assoc($result)) {
    2.             echo '<tr>
    3.                    <th scope="row">'.$data['ID_student'].'</th>
    4.                    <th scope="row">
    5.                        <input type="text" size="30" name="FIO_student" value="'.$data['FIO_student'].'">
    6.                    </th>
    7.                    <th scope="row">
    8.                        <select name="ID_group" class="form-control">
    9.                            <option selected value="'.$data['ID_group'].'">'.$data['group_name'].'</option>';
    10.                             foreach ($dataGroup as $key => $value) {
    11.                                 echo '<option value="'.$rowGroup ['ID_group'].'">'.$rowGroup ['group_name'].'</option>';
    12.                             }
    13.                         '</select>
    14.                    </th>
    15.                  </tr>';
    16.         }
    Причем mysqli_fetch_assoc изменил на ..._all
     

    Вложения:

  7. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    PHP:
    1. foreach ($dataGroup as $key => $value) {
    2.                                 echo '<option value="'.$dataGroup ['ID_group'].'">'.$dataGroup['group_name'].'</option>';
    3.                             }
    Поправил, все равно не робит. Ту же пустоту выдает во всех строчках
     
  8. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.621
    Симпатии:
    269
    @lordconst, почитай что такое foreach :)
     
  9. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    читал) прошу ткнуть меня пальцем в то что нужно. Вместо $value надо $dataGroup, правильно понимаю? если да, то не работает. И вместо value пытался $dataGroup вставить, все равно пустоту выводит
     
  10. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.621
    Симпатии:
    269
    PHP:
    1. foreach ($dataGroup as $key => $value) {
    2.    echo '<option value="'.$value['ID_group'].'">'.$value['group_name'].'</option>';
    3. }
    не надо пытаться вставить что-то вместо чего-то, ты должен отдавать себе отчёт в том, что ты делаешь
     
  11. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    последние два дня занимаюсь этим проектом) курсовая работа. не могу сообразить. скажи, пожалуйста, в чем ошибка-то? что не так делаю?
     
  12. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.621
    Симпатии:
    269
    это собственно говоря видно невооружённым глазом
    тут и соображать нечего, тем более, что код под спойлером который ты процитировал
    У тебя есть массив $dataGroup котроый надо обойти специально придуманным для этого циклом foreach и вывести. Если у тебя проблема с такими элементарными вещами, то рано ты начал писать курсовой.
     
  13. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    написал же, я $value и пробовал использовать внутри цикла. Все равно выводит пустоту
    Скопировал код из спойлера, так я пробовал уже
     
  14. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.621
    Симпатии:
    269
    @lordconst, значит "шерше ля фам"
    Распечатай print_r($dataGroup) и посмотри, что у тебя в массиве $dataGroup и если там ничего нет ищи где прощёлкал
     
  15. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    ну да, там только текущая группа у каждого из студентов. А в чем может быть причина? Глянул еще раз селект, вроде бы нормально. В недоумении
     
  16. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.621
    Симпатии:
    269
    @lordconst, покажи еще раз весь код, я же не телепат))
     
  17. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    PHP:
    1. if($_GET['value'] == student) {
    2.     $link = mysqli_connect($host, $user, $password, $database)
    3.             or die("Ошибка " . mysqli_error($link));
    4.  
    5.         $query = 'SELECT ID_student, FIO_student, group_name
    6.        FROM student INNER JOIN study_group ON (student.ID_group = study_group.ID_group)';
    7.         $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link));
    8.         $queryGroup = 'SELECT * FROM study_group';
    9.         $resultGroup = mysqli_query($link, $queryGroup) or die("Ошибка " . mysqli_error($link));
    10.         $dataGroup = mysqli_fetch_assoc($resultGroup);
    11.         print_r($dataGroup);
    12.  
    13.         echo '<form method = "POST" action = "edit.php">
    14.                <h2>Студенты</h2>
    15.                <table class = "table table-hover table-striped">
    16.                    <thead class = "thead-inverse thead-dark">
    17.                        <tr>
    18.                            <th>Номер студента</th>
    19.                            <th>ФИО студента</th>
    20.                            <th>Название группы</th>
    21.                        </tr>
    22.                    </thead>
    23.                    <tbody>';
    24.         while($data = mysqli_fetch_assoc($result)) {
    25.             echo '<tr>
    26.                    <th scope="row">'.$data['ID_student'].'</th>
    27.                    <th scope="row">
    28.                        <input type="text" size="30" name="FIO_student" value="'.$data['FIO_student'].'">
    29.                    </th>
    30.                    <th scope="row">
    31.                        <select name="ID_group" class="form-control">
    32.                            <option selected value="'.$data['ID_group'].'">'.$data['group_name'].'</option>';
    33.                             foreach ($dataGroup as $key => $value) {
    34.                                 echo '<option value="'.$value['ID_group'].'">'.$value['group_name'].'</option>';
    35.                             }
    36.                         '</select>
    37.                    </th>
    38.                  </tr>';
    39.         }
    40.         echo '</tbody>
    41.              </table>';
    42.     echo $htmlEnd;
    43. }
    study_group как раз та самая таблица с группами
     
  18. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.621
    Симпатии:
    269
    ????????
     
  19. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    нет, это я для эксперимента попробовал) там _all и все равно тот же результат
     

    Вложения:

  20. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.621
    Симпатии:
    269
    Будь внимательнее, выкладывай актуальную версию кода. Будь внимательнее, смотри на структуру массива. Будь внимательнее читай но официальном сайте php.net описание функции которую используешь. Будь внимательнее, какой параметр надо передать в функцию mysqli_fetch_all, что бы получить ассоциативный массив.
    Будь внимательнее - это всё что требуется при написании кода.
     
  21. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    вот теперь понял)
    а не подскажешь как мне теперь обратно все это в базу запихнуть? допустим, в этой таблице я изменю ФИО и группу одного или нескольких студентов. Как мне сделать апдейт таблиц?
     
  22. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.621
    Симпатии:
    269
    Этого я и боялся :)
    Сделать апдейт не трудно, труднее собрать нужные данные из формы.
    Можно конечно захерачить всю форму, и без разбору проапдейтить все строки со страницы. Те которые не изменились, тупо неперезапишутся, но это вроде как не айс.
    Около года назад я кому-то рисовал подобный код, но боюсь тебе он не подойдёт, так как препод запалит :)
    Смысл в том, что бы передать на сервер информацию какие именно строки изменить, например выделив их чекбоксом. Чекбокс на строке можно устанавливать например при помощи js при изменении опшина.
    --- Добавлено ---
    Курсовой когда сдавать?
     
  23. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    неделя точно есть. Но дальше уже дедлайн.
    Препод не запалит) потому что изначально курсовая на любом выбранном языке делается у нас. Сам препод топит за Delphi + Sybase SQL Anywhere, но это фигня полная.
    Я решил делать на php, чтобы набраться опыта для будущего портфолио
     
  24. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    33
    Симпатии:
    0
    а как сделать постраничную обработку таблицы? допустим, будет кнопка Сохранить (тип submit). таблица же не на одну строку
    если топорно и грубо сразу всю таблицу апдейтить
     
  25. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.621
    Симпатии:
    269
    На этой неделе времени нет вообще. Скину пример как только будет время.