Этот вопрос на самом деле является продолжением другого вопроса. Я хотел бы убедиться, что я укажу все подробности в этом.Сессия/проблема с моей корзиной
Я относительно новый программист в подобном Php и у меня есть это задание, где я должен сделать корзины покупок
Я получаю мои данные продукта из базы данных -> затем я нажимаю на продукте - > он переходит на страницу, где он добавляет productid, имя продукта и цену в сеанс с помощью array_push, а затем возвращается на ту же страницу, где находится тележка (тележка находится на той же странице, что и в товарной строке).
cart.class.php -> Это страница, откуда я изначально получаю данные о продукте. Используя my getAllproducts(); Я получаю все данные, которые затем прокручиваю, чтобы отобразить 6 продуктов.
<?php
class Cart
{
private $con;
private $productid;
function __construct(){
$this->con = new PDO('mysql:host=localhost;dbname=#', '#', '#');
}
public function getProductDataById($passedId){
$this->productid = $passedId;
$statement = $this->con->prepare("SELECT productname, productdescription, productimage, price FROM producten WHERE productid = :productid");
$statement->execute(array("productId" => $this->productid));
$data = $statement->fetch();
return($data);
}
public function getAllproducts(){
$statement = $this->con->prepare("SELECT productid, productname, productdescription, productimage, price FROM producten");
$statement->execute();
$data = $statement->fetchAll();
return($data);
}
}
?>
Следующая я использую Cart.php, чтобы показать свою продукцию. На этой странице я проходным продуктов, а затем, когда кто-то нажимает на заказ (bestellen) ProductID, PRODUCTNAME и цена будет отправить add_to_cart.php
<?php
/*errors */
error_reporting(E_ALL);
ini_set("display_errors", 1);
/*Php classes */
require_once("../classes/cart.class.php");
$products = new cart();
$data = $products->getAllproducts();
?>
<title>Side Cart</title>
</head>
<body>
<header>
<div id="cd-cart-trigger"><a class="cd-img-replace" href="#0">Cart</a></div>
<div class="container productline">
<div class="row">
<?php
foreach($data as $value){
echo '<div class="col-md-4 productcage">';
echo '<h2 class="product_name">'.$value["productname"].'</h2>';
echo '<p class="price_tag">€'.$value["price"].' euro</p>';
echo '<p class="#">'.$value["productdescription"].'...</p>';
echo '<a href="/shoppingcart/php/add_to_cart.php?productid='.$value["productid"] . "&productname=" . $value["productname"]. "&price=" . $value["price"].'" class="btn btn_order addcart">Add to cart <span class="glyphicon glyphicon-shopping-cart"></span></a><br/><br/>';
echo '</div>';
}
?>
</div>
</div>
<div id="cd-shadow-layer"></div>
// Here's where the shopping cart starts
<?php
session_start();
if(isset($_SESSION["cart"]) && count($_SESSION["cart"])> 0)
{
echo '<div id="cd-cart">';
echo '<h2>Cart</h2>';
echo '<ul class="cd-cart-items">';
echo '<li>';
foreach($_SESSION['cart'] as $id => $value)
{
echo 'Product Name ' . $value["productname"] . '<br/>';
echo 'Product ID ' . $value["productid"] . '<br/>';
echo 'Product Price ' . $value["price"] . '<br/>';
echo '<br/>';
}
echo '</li>';
echo '</ul>';
echo '<div class="cd-cart-total">';
echo '<p>Total <span>$39.96</span></p>';
echo '</div>';
echo '<a href="#0" class="checkout-btn">Checkout</a>';
echo '<p class="cd-go-to-cart"><a href="#0">Go to cart page</a></p>';
echo '</div>';
}
?>
Затем я перехожу к add_to_cart.php
Это посылает сессию обратно cart.php где ниже я хочу, чтобы петля продуктов в корзине
<?php
session_start();
if(empty($_SESSION['cart'])){
$_SESSION['cart'] = array();
}
array_push($_SESSION['cart'], $_GET['productid'], $_GET['productname'], $_GET['price']);
?>
<p>Het product is toegevoegd aan uw winkelwagen</p> <a href="../cart.php">Naar winkelwagen</a>
TL; DR, когда я пытаюсь Переберите $ значение [ «PRODUCTNAME»] мой Foreach возвращает предупреждение : Недопустимое смещение строки 'productname'
Я понятия не имею, как сделать все это, потому что я все еще довольно новичок в PHP. Если кто-то хочет потратить время на выяснение моих глупых ошибок, это будет очень удивительно.
Надеюсь, я был достаточно ясен. Приношу извинения за неудобства
foreach($_SESSION['cart'] as $id => $value)
{
echo ($_SESSION[ 'cart' ][ $id ] . " " . $value); //1 1solexfiets1 solexfiets115.99 15.99
var_dump(($_SESSION[ 'cart' ][ $id ] . " " . $value)); // string(3) "1 1" string(23) "solexfiets1 solexfiets1" string(11) "15.99 15.99"
}
Я изменил array_push к
array_push($_SESSION['cart'], array('productid' => $_GET['productid'], 'productname' => $_GET['productname'], 'price' => $_GET['price']));
и когда я print_r на тележке.PHP я получаю следующее назад
Array ([0] => 1 [1] => solexfiets1 [2] => 15.99 [3] => Array ([productid] => 1 [productname] => solexfiets1 [price] => 15.99))
Но когда я пытаюсь Переберите через него, как этот
foreach($_SESSION['cart'] as $id => $value)
{
echo 'Product Name ' . $value["productname"] . '<br/>';
echo 'Product ID ' . $value["productid"] . '<br/>';
echo 'Product Price ' . $value["price"] . '<br/>';
echo '<br/>';
}
Я все еще получаю ту же ошибку
Предупреждение: Illegal строка смещения «PRODUCTNAME»
Так что еще есть что-то, что я делаю неправильно? Теперь я понимаю, что мне нужно отправить коллекцию вещей, а не то, что я делал раньше, но я до сих пор не могу понять, почему ее отказ сейчас
Спасибо, что очень помогли мне! Кажется, я решил проблему. Я принял все советы, и у меня, наконец, появилось рабочее заявление. Теперь товар заказан и появится в корзине
Снова спасибо всем, кто помог мне!
Проблема еще в вашем входе - но я не могу работать, как этот вход стал подогнаны - это 'Array ([0] => 1 [1] => solexfiets1 [2] => 15,99 [ 3] => Array ([productid] => 1 [productname] => solexfiets1 [price] => 15.99)) 'неверно - вот почему ваш цикл завершается неудачно - каким-то образом вы все еще добавляете переменные get в сеанс один на один (это почему $ _SESSION ['cart'] [0], $ _SESSION ['cart'] [1], $ _SESSION ['cart'] [2] и $ _SESSION ['cart'] [3] установлены - можете ли вы полностью очистить сеанс и повторить попытку?'unset ($ _ SESSION ['cart']);' на одноразовой странице. – IaMaCuP
Я просто решил проблему на самом деле! Похоже, что в массиве все еще была некоторая неправильная информация. Извините за все усилия, которые вы должны были сделать, и большое спасибо за всю помощь. Ты меня очень многому научил! –