Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Путаница между двумя циклами foreach


Автор: Гриша 18.6.2005, 20:48
Путаница "foreach ($cart as $idsealy => $qty)" и "foreach ($cart as $idemt => $
Здравствуйте. Подскажите пожалуйст решение.

ПРИ ПОПАДАНИИ НА СТРАНИЦУ КОРЗИНЫ ДЛЯ ПОКУПОК (cart.php), в зависимоти от выбора пользователем значения на предыдущей странице,
передается GET запрос: magazin/cart?new=$idsealy или magazin/cart?new=$idsealy.
Если например запрос будет равным magazin/cart?new=$idsealy, то в корзине появляется строчка с именем $idsealy и количество $qty=1,
т.е. срабатывает функция display_cart (где foreach ($cart as $idsealy => $qty)),

но также получается, что также вызывается функция display_cart_emt (где foreach ($cart as $idemt => $qty)) и в ней тоже отображается строчка из функции display_cart,
т.е. строчки дублируются.
Происходится путаница между "foreach ($cart as $idsealy => $qty)" и "foreach ($cart as $idemt => $qty)".

Подскажите пожалуйста, как сделать так, чтобы если например вызывается запрос: magazin/cart?new=$idsealy,
то срабатывала только функция display_cart. Нужно сделать какое-то условие, но я у меня не получается.


Вот часть, кода отвечающая за содержание и вывод электронной корзины.

Код

<?php
session_start(); 

@ $new = $HTTP_GET_VARS['new'];

if($new)
{
//Выбран новый элемент
if(!isset($HTTP_SESSION_VARS['cart']))
{
$HTTP_SESSION_VARS['cart'] = array();
}
if(isset($HTTP_SESSION_VARS['cart'][$new]))
$HTTP_SESSION_VARS['cart'][$new]++;
else 
$HTTP_SESSION_VARS['cart'][$new] = 1;
}

//Если тележка не пуста, то вызываются функции display_cart и display_cart_emt,
//в противно случае выводится соответсвующее сообщение:
if(isset($HTTP_SESSION_VARS['cart']) && array_count_values($HTTP_SESSION_VARS['cart']))
{
display_cart($HTTP_SESSION_VARS['cart']);
display_cart_emt($HTTP_SESSION_VARS['cart']);
}
else
{
echo '<p>Ваша корзина пуста</p>'; 
}
?>

Функция display_cart и display_cart_emt такие:

Код

<?php

function display_cart($cart)
{
global $HTTP_SESSION_VARS;

// Вывести каждый элемент в виде строки
foreach ($cart as $idsealy => $qty)
{ 
echo "<p><input type=\"text\" name=\"$idsealy\" value=\"$qty\" size=\"2\"></p>";
}
}


function display_cart_emt($cart)
{
foreach ($cart as $idemt => $qty)
{ 
echo "<p><input type=\"text\" name=\"$idemt\" value=\"$qty\" size=\"2\"></p>";
}
}
?>

Автор: PARROT 18.6.2005, 21:12
Код

//напиши условие:
if(это) {
вызывается это;
}
else {
if(другое) {
вызывается другое;
}
}

Автор: o.s.a. 18.6.2005, 21:19
Цитата
передается GET запрос: magazin/cart?new=$idsealy или magazin/cart?new=$idsealy.

так один и тот де запрос smile

как я понял у тебя должно быть либо magazin/cart?new=$idsealy, либо magazin/cart?new=$idemt
А вся разница при выводе заключается лишь в названии текстового поля.
Если я все правильно понял, то делай проверку:
Код

if ( $_GET['new']==idsealy )  {display_cart($HTTP_SESSION_VARS['cart']);}
if ( $_GET['new']==idemt )  {display_cart_emt($HTTP_SESSION_VARS['cart']);}

Автор: Гриша 19.6.2005, 16:53
Спасибо за ответы.
Я понимаю, что нужно условие.

o.s.a., вы меня правильно поняли, я попробовал ваше условие, но получается так, что в корзине ничего не выводится.
Т.е.
if ( isset($_GET['idsealy']) ) не подходит под этот запрос, magazin/cart?new=$idsealy.
Вот я ин незнаю, как добраться до $idsealy, чтобы условие ее восприняло.

Автор: Гриша 19.6.2005, 19:07
Вот этот пример, помоему, очень хорошо объясняет суть проблемы.
Например пользователь заходит на страницу sealy.php, нажимает на ссылку "отправить" (magazin/cart.php?new=$idsealy, например $idsealy=10), и передает сценарию cart.php переменную new = $idsealy (например new = 10), в количестве равную 1 ($qty), если на ссылку нажать один раз.
Получается так, что вод именно поле, где отображается количество:

echo "<p><input type=\"text\" name=\"$idsealy\" value=\"$qty\" size=\"2\"></p>";

отображается также и в функции display_cart_emt (как-будто , пользователь зашел на страницу emt.php и нажал один раз на ссылку magazin/cart.php?new=$idemt, и вызвалась функция display_cart_emt, но в строке отобразтлось только количество, $emt, а значение ее не отобразилось, т.е. елибы он равнялась 10, то это в строке не отобразилось бы)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)