#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
ошибку без ссылки.