Как отобразить записи, соответствующие определенной переменной $_SESSION

#php #mysql #mysqli

#php #mysql #mysqli

Вопрос:

На моей странице будет отображаться список доступных ресторанов с использованием mysqli_fetch_array в цикле while. Из них я могу выбрать ресторан, который я хочу. После этого я пытаюсь отобразить пункты меню, соответствующие данному, restaurant на основе его rest_id .

В index.php я поместил rest_id значения, полученные из restaurant таблицы, в переменную $_SESSION[‘restid’]. Т.е.

$_SESSION[‘restid’] = $row[‘rest_id’];

Однако, когда я использую переменную $_SESSION в viewMenu.php для отображения menu записей, соответствующих заданному rest_id , будут отображаться только записи, соответствующие окончательному значению rest_id в restaurant таблице.

Я думаю, это потому, что в цикле while для отображения записей для restaurant переменной $ _SESSION будет установлено последнее rest_id значение, полученное циклом. Я могу придумать массив, но понятия не имею, как его реализовать.

Итак, мой вопрос: как мне получить конкретное значение $ _SESSION, которое соответствует определенному rest_id , которое я выбрал, чтобы я получал только записи, основанные на ресторане, который я фактически выбрал?

index.php

      <?php
            //Connect to mysql db
            $con = mysqli_connect('127.0.0.1','root','toor');
            //select database
            mysqli_select_db($con,'eatrebs');
            //Select query
            $sql = "SELECT * FROM restaurant";
            //Execute query
            $records = mysqli_query($con,$sql);

            ?>

            <?php
                    session_start();
            while ($row = mysqli_fetch_array($records))
            {

                echo '<tr><form action="update.php" method="post">';
                echo"<input type=hidden name=id value='".$row['rest_id']."'></td>";
                echo "<td><input type = text name = "rname"  value = '".$row['rest_name']."'</td>";
                echo "<td><input type = text name = "email"  value = '".$row['email']."'</td>";
                echo "<td><input type = text name = "address"  value = '".$row['address']."'</td>";
                echo'<td><input type=submit value="Update" onclick="return confirm('Are you sure?');">';
                echo'<td><Button btn btn-primary btn-lg pull-left name=del onclick="return confirm('Are you sure?');">Delete</Button>';
                echo "</form>";

                echo '<form action="Menu/viewMenu.php" method="post">';
                echo"<input type=hidden name=iid value='".$row['rest_id']."'></td>";
                $_SESSION['restid'] = $row['rest_id'];
                echo"<td><input type=submit value="View Menu" name=viewMenu>";
                echo'</form></tr>';

            }





//viewMenu.php
    <?php
        session_start();
        $con = mysqli_connect("localhost","root","toor");
        mysqli_select_db($con, 'eatrebs');
        $sql = "SELECT items.* FROM items INNER JOIN restaurant ON restaurant.rest_id = items.rest_id Where items.rest_id = '{$_SESSION['restid']}' ";

        $menu = mysqli_query($con,$sql);

    ?>
  

Комментарии:

1. $_SESSION['restid'] = $row['rest_id']; перезаписывает значение на каждой итерации цикла — следовательно, появляется только для сохранения ПОСЛЕДНЕЙ записи. Используйте $_SESSION['restid'][] = $row['rest_id']; для добавления в массив. Возможно, есть два способа обойти эту проблему, включив restid либо в form action URL, либо в качестве скрытого поля

2. кстати, ваш HTML недопустим — вы не можете поместить form элемент туда, где он у вас есть, а затем добавлять td теги здесь и там…. либо поместите форму полностью в td , либо поместите всю таблицу в форму…

3. в viewMenu.php не пытайтесь использовать значение сеанса — вместо этого либо ищите значение GET в строке запроса ( если вы назначили действие формы как viewmenu?rest_id=X ), либо ищите размещенную iid переменную

4. viewMenu Предполагается, что это позволит мне снова обновлять меню с помощью другого updateMenu.php скрипта. Я действительно использовал $ _POST [rest_id], как вы описали. Но, когда я выполняю обновление и страница перенаправляется на viewMenu , я получаю iid ошибку без ссылки.