Передать переменные из одной таблицы в другую на другой странице PHP

Я выполняю задание в школе, где мы должны имитировать интернет-магазин, который отправляет продукты из базы данных через PHP для конечного пользователя. Затем пользователь должен добавить товар в корзину с помощью флажка и нажать кнопку, которая приведет их в корзину, где должны отображаться только выбранные элементы из таблицы продуктов.

Я сделал большой прогресс, но я застрял в этой маленькой крошечной проблеме, а именно: я не могу понять, как представить выбранные элементы в таблице. Позвольте мне показать вам, как выглядит мой рабочий стол:

Таблица продуктов

И код:

<form action="selected_products.php" method="POST">
<table>
    <tr>
        <th>Select</th>
        <th>Product-ID</th>
        <th>Product Name</th>
        <th>Price SEK</th>
    <tr>

<?php
// Print out all entries in a table
foreach ($rows as $value) {
    extract($value);

    echo "<tr><td><input type='checkbox' name='SelectedData[]' alt='Checkbox' value='$id&$name&$price'></td>";
    echo "</td><td>".$id.'';
    echo "</td><td>".$name.'';
    echo "</td><td>".$price.'';
    echo "</td></tr>";
}
?>
</table>
<br>
<input type="submit" value="Add to cart" />
</form>

Когда пользователь выбирает продукты с помощью флажка и нажимает кнопку, он переносит их на страницу selected_products.php, которая будет выглядеть так:

Выбранные продукты

И код:

<table>
    <tr>
        <th>Product-ID</th>
        <th>Product Name</th>
        <th>Price SEK</th>
    <tr>
<?php
if(!empty($_POST['SelectedData'])) {
    foreach($_POST['SelectedData'] as $selected) {
            echo "<tr><td>".$selected.'';
            echo "</td></tr>";
    }
}
?>

Итак, мой вопрос: как я могу сделать выбранные продукты заполнять всю таблицу, а не быть собранными в одном столбце, как сейчас? Я передаю его с помощью value='$id&$name&$price', но как я могу заставить эту строку значений помещать каждую запись в соответствующий столбец на странице selected_products.php?

Ответ 1

Как уже было сказано в комментариях, вы можете использовать explode() для решения этой проблемы.

foreach($_POST['SelectedData'] as $selected) {
    list($id, $name, $price) = explode("&", $selected);
    echo "<tr><td>".$id.'';
    echo "</td><td>".$name.'';
    echo "</td><td>".$price.'';
    echo "</td></tr>";
}

но это довольно плохая идея, потому что она позволяет каждому заполнить все, что захочет. Это связано с тем, что каждый может отправлять почтовый запрос любым желаемым контентом. Лучшим способом было бы установить выбранный идентификатор элемента, а затем снова прочитать данные, которые вам нужны из базы данных, используя идентификатор элемента. Таким образом могут отображаться только те элементы, которые находятся в базе данных.

Ответ 2

Разделите строку на &.

explode("&",$selected);

Создает массив, содержащий значения в отдельности.

[0] => 3
[1] => Samsung 960 Pro
[2] => 3150

Хороший внешний вид с вашим проектом;)

UPDATE: Как @mplungjan сказал: используйте pipe для разделения значений. Тогда go

explode("|", $selected);