Передать переменные из одной таблицы в другую на другой странице 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);