#php #html #arrays #web
#php #HTML #массивы #веб
Вопрос:
Я изучаю PHP и делаю базовую корзину для покупок в электронной коммерции для практики. Я столкнулся с проблемой, которая поставила меня в тупик. Я создал массив для отображения текущего количества одного товара, который есть в корзине покупателя, но вместо отображения значения он отображает «array».
Ниже то, что я использую:
<?php
if(isset($_SESSION['Cart'])){
$sql="SELECT * FROM products where Product_ID IN (";
foreach($_SESSION['Cart'] as $id => $value){
$sql.=$id.",";
}
$sql=substr($sql, 0, -1).") ORDER BY Category ASC";
$query=mysql_query($sql);
while($row=mysql_fetch_array($query)){
?>
<p><?php echo $row['Name']?> x <?php echo $_SESSION['Cart'][$row['Product_ID']['quantity']] ?></p>
<?php
}
}else{
echo "<p>There are no products selected</p>";
}
?>
Я не уверен, что именно в этом заключается проблема. Остальная часть моего сайта находится здесь (Индекс) и здесь (страница продукта), если кто-нибудь будет так любезен, чтобы устранить неполадки со мной.
Комментарии:
1. Пожалуйста, не используйте
mysql_*
функции в новом коде . Они больше не поддерживаются и официально не рекомендуются . Видите красное поле ? Узнайте о подготовленных операторах вместо этого и используйте PDO или MySQLi — эта статья поможет вам решить, что именно. Если вы выбираете PDO, вот хороший учебник .2. @user3807604 Сделайте
print_r()
вместоecho
переменной, которая выводит ‘Array’. чтобы увидеть структуру массива. вы бы знали, что делать дальше. Например:print_r($_SESSION['Cart'][$row['Product_ID']['quantity']])
3. Не забудьте поместить ключ в конец массива, например
$arr[0]
или$arr['quantity']
4. @Rybo111 При печати я получаю что-то вроде следующего: Массив Orange Juice x ( [количество] => 1 ) Название (Апельсиновый сок) отображается правильно, и оно подсчитывает количество, но оно по-прежнему отображается как массив Orange Juice x, если я переключу его обратно на echo из print. Почему он просто не отображает количество, за которым он следит?
5. Каким бы ни был ваш массив, вам нужно делать так, как сказал @RaymondAtivie и
print_r
это. Это даст вам ключ к ассоциированию значений. Затем вам нужно добавить['key_here']
в конец переменной, которую вы пытаетесь отобразить.
Ответ №1:
Основываясь на ваших отзывах, если попытка print_r($_SESSION['Cart'][$row['Product_ID']['quantity']]['quantity])
даст вам Array ( [quantity] => 1 )
Затем вы можете выполнить echo $_SESSION['Cart'][$row['Product_ID']['quantity']]['quantity]
, чтобы предоставить вам 1
Но я не думаю, что это было первоначальным намерением. я думаю, что ваша настоящая проблема заключается в том, что при присвоении значений массиву возможно несоответствие ключей.
Попробуйте приведенный выше код и дайте знать, поможет ли это
Ответ №2:
Я думаю, что есть проблема с этой строкой кода:
$_SESSION['Cart'][$row['Product_ID']['quantity']]
Вы получаете значение из $_SESSION['Cart']
с размерным массивом $row
там. Я думаю, что $row['Product_ID']
это не массив, а вместо этого string
или int
, поэтому вызов $row['Product_ID']['quantity']
является проблемой.