[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: цикл foreach
dikey
Пишу корзину, тут такой проблем вышел Не работает код с 15 по 26 строку там где цикл foreach
cart.php

<h2 align="center">Ваша корзина товаров</h2>
<?php
if($_SESSION['cart'] != '0')
{
?>
<form action="" method="post" id="cart-form">
<
table style="color:#000" align="center" cellspacing="0" cellpadding="10" border="0">
<
tr>
<
th>Товар</th>
<
th>Цена</th>
<
th>Кол-во</th>
<
th>Всего</th>
</
tr>
<?php
foreach($_SESSION['cart'] as $id => $quantity):
$product = get_product($id);
?>
<tr>
<
td align="center"><?php echo $product['name'];?>15</td>
<
td align="center"><?php echo $product['price'];?></td>
<
td align="center"><input type="text" size="2" name="<?php echo $id;?>" maxlength="2" value="<?php echo $quantity;?>" /></td>
<
td align="center"><?php echo $product['price'] * $quantity;?></td>
</
tr>
<?php endforeach;?>
</table>
<
p class="total" align="center">Общая сумма заказа: <span class="product-price"> $</span></p>
<
p align="center"><input type="submit" name="update" value="Обновить" /></p>
</
form>
<?php
}
else
{
echo "Ваша корзина пуста!";
}
?>




Спустя 19 минут, 45 секунд (22.05.2012 - 11:19) Placido написал(а):
Вывод ошибок включен? Если да, то какая ошибка? Если нет, то в начале кода нужно поставить error_reporting(E_ALL) и посмотреть, какая ошибка возникает.

Спустя 4 минуты, 46 секунд (22.05.2012 - 11:23) dadli написал(а):
Цитата
foreach($_SESSION['cart'] as $id => $quantity):

в конце две точки лишнее

Спустя 2 минуты, 27 секунд (22.05.2012 - 11:26) dikey написал(а):
dadli тогда показывает что в <?php endforeach;?> ошибка

Спустя 3 минуты, 24 секунды (22.05.2012 - 11:29) dadli написал(а):
dikey
вместо : пишите {

Спустя 3 минуты, 55 секунд (22.05.2012 - 11:33) dikey написал(а):
dadli сделал так
     <?php
foreach($_SESSION['cart'] as $id => $quantity)
{
$product = get_product($id);
?>
<tr>
<
td ><?php echo $product['name'];?>15</td>
<
td ><?php echo $product['price'];?></td>
<
td ><input type="text" size="2" name="<?php echo $id;?>" maxlength="2" value="<?php echo $quantity;?>" /></td>
<
td ><?php echo $product['price'] * $quantity;?></td>
</
tr>
<?php } ?>
чет не помогло

Спустя 5 минут, 17 секунд (22.05.2012 - 11:39) Игорь_Vasinsky написал(а):
<h2 align="center">Ваша корзина товаров</h2>

<?php if($_SESSION['cart'] != '0'): ?>

<form action="" method="post" id="cart-form">
<
table style="color:#000" align="center" cellspacing="0" cellpadding="10" border="0">
<
tr>
<
th>Товар</th>
<
th>Цена</th>
<
th>Кол-во</th>
<
th>Всего</th>
</
tr>

<?php foreach($_SESSION['cart'] as $id => $quantity): ?>
<?php
$product = get_product($id); ?>

<tr>
<
td align="center"><?=$product['name'];?>15</td>
<
td align="center"><?=$product['price'];?></td>
<
td align="center"><input type="text" size="2" name="<?=$id;?>" maxlength="2" value="<?=$quantity;?>" /></td>
<
td align="center"><?=$product['price'] * $quantity;?></td>
</
tr>

<?php endforeach;?>

</table>
<
p class="total" align="center">Общая сумма заказа: <span class="product-price"> $</span></p>
<
p align="center"><input type="submit" name="update" value="Обновить" /></p>
</
form>

<?php else:?>

Ваша корзина пуста!

<?php endif;?>

Спустя 8 минут, 4 секунды (22.05.2012 - 11:47) dikey написал(а):
и так не работает

Спустя 7 минут, 27 секунд (22.05.2012 - 11:54) Игорь_Vasinsky написал(а):
синтаксис правильный у меня. значит у тя логика не правильная.

Спустя 25 минут, 8 секунд (22.05.2012 - 12:19) dikey написал(а):
Игорь_Vasinsky у меня php 5.3 и короткие теги типа <?=$product['name'];?> возможно не будут работать поэтому целесообразно использовать полные теги <?php echo $product['name'];?> что я и делаю.
Используя ваш синтаксис, оставляя его неизменным приводит к такому же результату к которому приводит мой изначальный код.
Моя логика делает вывод что раз я должен использовать полные теги надо заменить короткие теги на полные, что я и сделал. Итог ничем не отличается.
Вывод ваш синтаксис с полным тегом и с коротким не работает)

Спустя 12 минут, 2 секунды (22.05.2012 - 12:31) walerus написал(а):
Попробуй
<td ><?php echo $product['price'] * $quantity;?></td>
заменить на
<td ><?php echo ( $product['price'] * $quantity); ?></td>

И в
<td ><?php echo $product['name'];?>15</td>
цифра 15ть так и надо ?

Спустя 1 минута, 50 секунд (22.05.2012 - 12:33) Kuliev написал(а):
Что за тип данных
 $_SESSION['cart']
?

Почему вы сначала его сравниваете как СТРОКУ

А потом пытаетесь из СРОКИ перебрать массив :blink:

Спустя 3 минуты, 4 секунды (22.05.2012 - 12:36) Игорь_Vasinsky написал(а):
массив одномерный id=>кол-во

Спустя 1 минута, 4 секунды (22.05.2012 - 12:37) walerus написал(а):
Kuliev Мб, у него где то присваивается "0", если допустим что то не "срослось", а если все гут, то в переменной массив smile.gif

Спустя 1 минута, 17 секунд (22.05.2012 - 12:38) Kuliev написал(а):
Цитата (Игорь_Vasinsky @ 22.05.2012 - 12:36)
массив одномерный id=>кол-во

Это Ваше предположение?

Спустя 2 минуты, 36 секунд (22.05.2012 - 12:41) Игорь_Vasinsky написал(а):
Цитата
Kuliev Мб, у него где то присваивается "0", если допустим что то не "срослось", а если все гут, то в переменной массив 

видимо так и есть. тока зачем, когда можно сделать так

$order = isset($_SESSION['cart']) ? $_SESSION['cart'] : false;


и потом

if($order)
{
// код
}


Цитата
Это Ваше предположение?

foreach($_SESSION['cart'] as $id => $quantity): ?>

это анализ кода

а если небыло выбора то "0"

Спустя 46 секунд (22.05.2012 - 12:42) Kuliev написал(а):
Цитата (walerus @ 22.05.2012 - 12:37)
Kuliev Мб, у него где то присваивается "0", если допустим что то не "срослось", а если все гут, то в переменной массив  smile.gif

Возможно и так, но все таки нужно уточнить у автора. Мало ли что он там на кодил!
И перед циклом нужно проверку сделать что перед нами массив is_array()

Спустя 37 секунд (22.05.2012 - 12:42) walerus написал(а):
ТС чего то "подвис" cool.gif , dikey что там с результатами ?

Игорь
Цитата
видимо так и есть. тока зачем, когда можно сделать так
Мы не ищем легких путей wink.gif


Оффтоп:
Kuliev Число моего автомобиля 6 - это как было посчитано ? rolleyes.gif

Спустя 6 минут, 10 секунд (22.05.2012 - 12:49) Kuliev написал(а):
Цитата (walerus @ 22.05.2012 - 12:42)
ТС чего то "подвис" cool.gif , dikey что там с результатами ?

Игорь
Цитата
видимо так и есть. тока зачем, когда можно сделать так
Мы не ищем легких путей wink.gif


Оффтоп:
Kuliev Число моего автомобиля 6 - это как было посчитано ? rolleyes.gif

хз.. нужно спросить у авторов данного сервиса biggrin.gif

Спустя 1 минута, 24 секунды (22.05.2012 - 12:50) Игорь_Vasinsky написал(а):
Иммитация (+ сумма всех заказов)


<?php
header("Content-type: text/html; charset=utf-8");

session_start();

$_SESSION['cart'] = array('0'=>2, '1'=>5, '2'=>220);



$productArr = array(
array('id'=>0, 'name'=>'имя1', 'price'=>3, 'quantity'=>'3'),
array('id'=>1, 'name'=>'имя2', 'price'=>30, 'quantity'=>'32'),
array('id'=>2, 'name'=>'имя3', 'price'=>300, 'quantity'=>'31')
);


function get_product($id)
{
global $productArr;

return $productArr[$id];
}

?>
<h2 align="center">Ваша корзина товаров</h2>
<?php if($_SESSION['cart'] != '0'): ?>
<form action="" method="post" id="cart-form">
<
table style="color:#000" align="center" cellspacing="0" cellpadding="10" border="0">
<
tr>
<
th>Товар</th>
<
th>Цена</th>
<
th>Кол-во</th>
<
th>Всего</th>
</
tr>

<?php $total = 0;?>
<?php
foreach($_SESSION['cart'] as $id => $quantity): ?>

<?php

$product = get_product($id);
$total = $total + ($product['price'] * $quantity);
?>


<tr>
<
td align="center"><?=$product['name'];?>15</td>
<
td align="center"><?=$product['price'];?></td>
<
td align="center"><input type="text" size="2" name="<?=$id;?>" maxlength="2" value="<?=$quantity;?> шт." /></td>
<
td align="center"><?=$product['price'] * $quantity;?></td>
</
tr>

<?php endforeach;?>

</table>
<
p class="total" align="center">Общая сумма заказа: <span class="product-price"> $<?=$total;?></span></p>
<
p align="center"><input type="submit" name="update" value="Обновить" /></p>
</
form>

<?php else:?>

Ваша корзина пуста!

<?php endif;?>



user posted image

Спустя 7 минут, 50 секунд (22.05.2012 - 12:58) Игорь_Vasinsky написал(а):
обновил - теперь сумму заказа считает

Спустя 3 минуты, 43 секунды (22.05.2012 - 13:02) Игорь_Vasinsky написал(а):
но я всё равно придерживаюсь такой логике

Цитата
$order = isset($_SESSION['cart']) ? $_SESSION['cart'] : false;


и потом

if($order)
{
  // код
}

Спустя 34 минуты, 40 секунд (22.05.2012 - 13:36) dikey написал(а):
Вывод ошибок поставил получилось вот что
Notice: Undefined variable: _SESSION in B:\Program Files\Apache Software Foundation\cart.php on line 8
Notice: Undefined variable: _SESSION in BB:\Program Files\Apache Software Foundation\cart.php on line 21
Warning: Invalid argument supplied for foreach() in B:\Program Files\Apache Software Foundation\cart.php on line 21
сессия открывается на главной странице
<?php
session_start();
include("db_fns.php");
include("cart_fns.php");
if (!isset($_SESSION['cart']))
{
$_SESSION['cart'] = array();
$_SESSION['total_items'] = 0;
$_SESSION['total_prise'] = '0.00';
}
$view = empty($_GET['view']) ? 'index' : $_GET['view'];
switch($view)
{
case('index'):
$products = get_products();
break;
case('cart'):
break;
case('add_to_cart'):
header('Location:index.php?view=index');
break;
}
include("left_menu/centr.php");
?>

Спустя 2 минуты, 51 секунда (22.05.2012 - 13:39) Kuliev написал(а):
Warning: Invalid argument supplied for foreach() in B:\Program Files\Apache Software Foundation\cart.php on line 21
Про что я Вам господа и говорил! wink.gif

Спустя 4 минуты, 22 секунды (22.05.2012 - 13:43) Kuliev написал(а):
запусти вот это

<h2 align="center">Ваша корзина товаров</h2>
<?php
if($_SESSION['cart'] != '0')
{
?>
<form action="" method="post" id="cart-form">
<
table style="color:#000" align="center" cellspacing="0" cellpadding="10" border="0">
<
tr>
<
th>Товар</th>
<
th>Цена</th>
<
th>Кол-во</th>
<
th>Всего</th>
</
tr>
<?php
echo '<pre>';
print_r($_SESSION['cart']);
echo '</pre>';

foreach($_SESSION['cart'] as $id => $quantity):
$product = get_product($id);
?>
<tr>
<
td align="center"><?php echo $product['name'];?>15</td>
<
td align="center"><?php echo $product['price'];?></td>
<
td align="center"><input type="text" size="2" name="<?php echo $id;?>" maxlength="2" value="<?php echo $quantity;?>" /></td>
<
td align="center"><?php echo $product['price'] * $quantity;?></td>
</
tr>
<?php endforeach;?>
</table>
<
p class="total" align="center">Общая сумма заказа: <span class="product-price"> $</span></p>
<
p align="center"><input type="submit" name="update" value="Обновить" /></p>
</
form>
<?php
}
else
{
echo "Ваша корзина пуста!";
}
?>

Спустя 3 минуты, 15 секунд (22.05.2012 - 13:47) Игорь_Vasinsky написал(а):
если товар не был добавлен - то да сессионный элемент с ключом cart - не существует. я писал выше вариант с тернарным оператором.

$order = isset($_SESSION['cart']) ? $_SESSION['cart'] : false;


и потом

if($order)
{
// код
}


везде вместо $_SESSION['cart'] юзать $order

или проверять так

if(isset($_SESSION['cart']))

Спустя 14 минут, 8 секунд (22.05.2012 - 14:01) dikey написал(а):
Игорь_Vasinsky ваш код по какой то причине не запускается.
Kuliev пробывал ваш код, захожу в каталог товаров, нажимаю добавить в корзину перехожу в корзину а там пусто

Спустя 2 минуты, 26 секунд (22.05.2012 - 14:03) dikey написал(а):
код каталога
<?php
foreach($products as $item):
?>
<table style="color:#000" width="739" cellspacing="0">
<
tr >
<
td colspan="2" style="text-align: center; font-size: 20px; font-weight: bold;"><?php echo $item['name']; ?></td>
</
tr>
<
tr>
<
td width="212" rowspan="8"><div><img src="images/<?php echo $item['img'];?>" alt="" width="209" height="198" /></div></td>
<
td width="506">Цена: <?php echo $item['price']; ?> руб.</div></td>
</
tr>
<
tr>
<
td>Вылет: <?php echo $item['vilet']; ?></td>
</
tr>
<
tr>
<
td>Город: <?php echo $item['gorod']; ?></td>
</
tr>
<
tr>
<
td>Страна: <?php echo $item['strana']; ?></td>
</
tr>
<
tr>
<
td>Отел: <?php echo $item['otel']; ?></td>
</
tr>
<
tr>
<
td>Длительность: <?php echo $item['dlitelnost']; ?></td>
</
tr>
<
tr>
<
td>Включено: <?php echo $item['vklucheno']; ?></td>
</
tr>
<
tr>
<
td><a href="index.php?view=add_to_cart&id=<?php echo $item['id'];?>">Добавить в корзину</a></td>
</
tr>
</
table>
<?php endforeach;?>


функция add_to_cart
<?
function
add_to_cart($id)
{
if(isset($_SESSION['cart'][$id]))
{
$_SESSION['cart'][$id]++;
return true;
}
else
{
$_SESSION['cart'][$id] = 1;
return true;
}
return false;
}
?>

Спустя 46 секунд (22.05.2012 - 14:04) Игорь_Vasinsky написал(а):
покажи с моим кодом.

session_start() то хоть есть?

Спустя 9 минут, 41 секунда (22.05.2012 - 14:14) dikey написал(а):
вот что происходит когда сохраняю ваш код user posted image
session_start() есть он находится на главной странице код которого я писал выше

Спустя 1 минута, 48 секунд (22.05.2012 - 14:15) Игорь_Vasinsky написал(а):
вам на стока уже всё расжевали, я даже смодеоировал и данные сессии в корзине и функцию, вы ни как не можете сделать. ленитесь.

Спустя 1 минута, 46 секунд (22.05.2012 - 14:17) Kuliev написал(а):
Цитата (dikey @ 22.05.2012 - 14:14)
вот что происходит когда сохраняю ваш код user posted image
session_start() есть он находится на главной странице код которого я писал выше

Если у вас все в разных файлах и вы не используете MVC то session_start() нужно прописывать в каждом файле и не забывайте что заголовки должный уйти раньше чем вывод в браузер!!! А то будут ошибки.

Спустя 2 минуты, 1 секунда (22.05.2012 - 14:19) Kuliev написал(а):
Предлагаю тему закрыть т.к. тема себя исчерпала.
ТС получил ответ в полном объеме, даже с лихвой.
Будут другие вопросы создайте новую тему.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.