Путаница "foreach ($cart as $idsealy => $qty)" и "foreach ($cart as $idemt => $

Гриша К.

Новичок
Путаница "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:
<?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]
<?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>";
  }
}
?>


-~{}~ 18.06.05 21:32:

Есть два цикла foreach ($cart as $idsealy => $qty)" и "foreach ($cart as $idemt => $qty), какое условие можно использовать, чтобы например если передается $idsealy, то срабатывает первый цикл и наоборот. Как разделить два цикла при помощи условия, чтобы они не путалиь.
Подскажите пожаалуйста!!!

-~{}~ 18.06.05 21:55:

Я отредактировал тему, теперь код php цветной, может быть теперь сможете мне помочь.
 

Гриша К.

Новичок
Вот так я пробовал.
PHP:
if ( isset($_GET['idsealy']) )  {display_cart($HTTP_SESSION_VARS['cart']);}

if ( isset($_GET['idemt']) )  {display_cart_emt($HTTP_SESSION_VARS['cart']);}
Но не получается.
Т.е. if ( isset($_GET['idemt']) ) не подходит по запрос /magazin/cart.php?new=$idsealy

PHP:
if ($_GET[$idsealy'])  {display_cart($HTTP_SESSION_VARS['cart']);}

if ($_GET['$idemt'] )  {display_cart_emt($HTTP_SESSION_VARS['cart']);}
При таком варианте, броузер отображает ошибку.
 

Фанат

oncle terrible
Команда форума
ничего не понял.
при чём здесь какие-то idsealy и idemt, если ты передаёшь скрипту переменную new?
 

Гриша К.

Новичок
Да это я на мудрил.
Вот например, когда я передаю такой запрос /magazin/cart.php?new=$idsealy,
мне нужно сделать такое условие, что когда new=$idsealy, то в приведенном блоке кода, должна вызываться функция display_cart, а когда запрос такой /magazin/cart.php?, т.е. new=$idemt, то вызывается функция display_cart_emt.
PHP:
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']); 
  }
Вот никак не могу сделать такое условие.
 

Фанат

oncle terrible
Команда форума
то есть ты хочешь, чтобы твоя программа отличала сама idemt от idsealy - я правильно понимаю?
то есть, тебе нужен код, который в одном случае при вызове
magazin/cart.php?new=10
поймёт, что 10 - это idemt , а в другом, при вызове
magazin/cart.php?new=10
поймёт, что 10 - это idsealy
правильно?
 

Гриша К.

Новичок
Да Фанат, вы точно меня поняли.
Вы знаете, я вот так попробовал:
PHP:
if(isset($HTTP_SESSION_VARS['cart']) && array_count_values($HTTP_SESSION_VARS['cart']))
  {
      if ($HTTP_GET_VARS['new']==$idsealy)  
      display_cart($HTTP_SESSION_VARS['cart']);

      if ($HTTP_GET_VARS['new']==$idemt)  
      display_cart_emt($HTTP_SESSION_VARS['cart']);
  }
В это варианте броузер отображает ошибку:
Notice: Undefined variable: idsealy in ...\magazin\cart.php

Так же пробовал вот так (просто применял isset):
PHP:
if(isset($HTTP_SESSION_VARS['cart']) && array_count_values($HTTP_SESSION_VARS['cart']))
  {
      if (isset($HTTP_GET_VARS['new']==$idsealy))  
      display_cart($HTTP_SESSION_VARS['cart']);

      if (isset($HTTP_GET_VARS['new']==$idemt))  
      display_cart_emt($HTTP_SESSION_VARS['cart']);
  }
Тогда броузер отображает такую ошибку:
Parse error: parse error, unexpected T_IS_EQUAL, expecting ',' or ')' in ...\magazin\cart.php (в строке if (isset($HTTP_GET_VARS['new']==$idsealy)) )

Вот этот вариант, с isset который я сделал так (исправил ошибку):
PHP:
if(isset($HTTP_SESSION_VARS['cart']) && array_count_values($HTTP_SESSION_VARS['cart']))
  {
      if (isset($HTTP_GET_VARS['new'])==$idsealy)  
      display_cart($HTTP_SESSION_VARS['cart']);

      if (isset($HTTP_GET_VARS['new'])==$idemt)  
      display_cart_emt($HTTP_SESSION_VARS['cart']);
  }
Тогда броузер отображает такую ошибку:
Notice: Undefined variable: idsealy in ...\magazin\cart.php (в строке if (isset($HTTP_GET_VARS['new']==$idsealy)) )
 

baev

‹°°¬•
Команда форума
Ну, так Notice перевести не в состоянии?
Доллары там перед idsealy/idemt зачем?

Вы разницу между именем переменной и её значением понимаете?
 

Гриша К.

Новичок
Спасибо baev за помощь.
Нет чего-то я разникцу не понимаю толком.
Вот такой код получился, ошибак не выдает, но и строки тоже не выдает. Непонимаю!!

PHP:
if(isset($HTTP_SESSION_VARS['cart']) && array_count_values($HTTP_SESSION_VARS['cart']))
  {
      if ($HTTP_GET_VARS['new']=='sealy')  
      display_cart($HTTP_SESSION_VARS['cart']);
      if ($HTTP_GET_VARS['new']=='emt')
      display_cart_emt($HTTP_SESSION_VARS['cart']);
  }
 

Гриша К.

Новичок
Зделал вот так:

PHP:
if(isset($HTTP_SESSION_VARS['cart']) && array_count_values($HTTP_SESSION_VARS['cart'])) 
  { 
      if (isset($HTTP_GET_VARS['new'])=='sealy')   
      display_cart($HTTP_SESSION_VARS['cart']); 
      if (isset($HTTP_GET_VARS['new'])=='emt') 
      display_cart_emt($HTTP_SESSION_VARS['cart']); 
  }
Но программа не понимает, что например
magazin/cart.php?new=10
при 10 - это idemt , а в другом, при вызове
magazin/cart.php?new=10
при 10 - это idsealy.
Т.е. получается так, что выводится функция display_cart, с отображенным значением, и функция display_cart_emt в которой отображается кол-во $sealy равное при одном запросе 1 ($qty).
Функция display_cart и display_cart_emt такие:

PHP:
<?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>"; 
  } 
} 
?>
 

baev

‹°°¬•
Команда форума
блин!
Откуда у Вас 'sealy' и 'emt' взялись?
 

Гриша К.

Новичок
За ссылки спасибо baev, почитаю.
Но сейчас для меня самое главное сделать условие, и как задал вопрос Фанат, что нужен мне код который в одном случае при вызове
magazin/cart.php?new=10
поймёт, что 10 - это idemt , а в другом, при вызове
magazin/cart.php?new=10
поймёт, что 10 - это idsealy.

-~{}~ 19.06.05 20:01:

Откуда у Вас 'sealy' и 'emt' взялись?
Например пользователь заходит на страницу sealy.php, нажимает на ссылку "отправить" (magazin/cart.php?new=$idsealy, например $idsealy=10), и передает сценарию cart.php переменную new = $idsealy (например new = 10), в количестве равную 1 ($qty), если на ссылку нажать один раз.
Получается так, что вод именно поле, где отображается количество:
PHP:
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, то это в строке не отобразилось бы)
 

baev

‹°°¬•
Команда форума
Ещё раз:
Откуда у Вас 'sealy' и 'emt' взялись?
 

Гриша К.

Новичок
Это сообщение я написал, чтобы проверить, будет ли подпись работать под сообщениями. Надеюсь за это администраторы не удалят очень важную для меня тему.

-~{}~ 19.06.05 20:32:

baev, я же написал вам:
Например пользователь заходит на страницу sealy.php, нажимает на ссылку "отправить" (magazin/cart.php?new=$idsealy, например $idsealy=10), и передает сценарию cart.php переменную new = $idsealy (например new = 10), в количестве равную 1 ($qty), если на ссылку нажать один раз.
Получается так, что вод именно поле, где отображается количество:
PHP:
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, то это в строке не отобразилось бы).

-~{}~ 20.06.05 00:39:

Я постарался подробнее описать суть своего вопроса, и мне кажется, что она понятна. Возможно кто-то сможет мне помочь, в моей теме.
 

Фанат

oncle terrible
Команда форума
описал ты, может, и подробно, но такую кашу, что расхлебать её будет трудновато
к примеру, постичь смысл мантры
в строке отобразтлось только количество $emt, а значение ее не отобразилось, т.е. еслибы она равнялась 10, то это в строке не отобразилось бы
мне так и не удалось...
 

Гриша К.

Новичок
Спасибо за ответ Фанат. Я привел вот такой пример, надеюсь он будет понятен.
Вот такое условие:
PHP:
if(isset($HTTP_SESSION_VARS['cart']) && array_count_values($HTTP_SESSION_VARS['cart'])) 
  { 
      if ($HTTP_GET_VARS['new']=='sealy')   
      display_cart($HTTP_SESSION_VARS['cart']); 
      if ($HTTP_GET_VARS['new']=='emt') 
      display_cart_emt($HTTP_SESSION_VARS['cart']); 
  }

Я добиваюсь того, чтобы когда сценарию передается ссылка
magazin/cart.php?new=$idemt,
то на странице должно отобразится значение переменной и ее количество, например $idsealy='переменная sealy' и в количество равная '1':
PHP:
//Исходный код:
echo "<p>Название переменной: $idsealy<input type=\"text\" name=\"$idsealy\" value=\"$qty\" size=\"2\"></p>"; 

//Результат в броузере:
<p>Название переменной: переменная sealy<input type="text" name="переменная sealy" value="1" size="2"></p>";

Если get-запрос такой magazin/cart.php?new=$idemt,
то на странице должно отобразится значение переменной и ее количество, например $idemt='переменная emt' и в количество равная '1':
PHP:
//Исходный код:
echo "<p>Название переменной: $idemt<input type=\"text\" name=\"$idemt\" value=\"$qty\" size=\"2\"></p>"; 

//Результат в броузере:
<p>Название переменной: переменная emt<input type="text" name="переменная emt" value="1" size="2"></p>";

Если в результате получаются два запроса, то результ в броузере такой (я добиваюсь этого результата):
PHP:
<p>Название переменной: переменная sealy<input type="text" name="переменная sealy" value="1" size="2"></p>";
<p>Название переменной: переменная emt<input type="text" name="переменная emt" value="1" size="2"></p>";

А у меня получается так:
PHP:
<p>Название переменной: переменная sealy<input type="text" name="переменная sealy" value="1" size="2"></p>";
<p>Название переменной:   <input type="text" name="переменная emt" value="1" size="2"></p>";

<p>Название переменной:   <input type="text" name="переменная sealy" value="1" size="2"></p>";
<p>Название переменной: переменная emt<input type="text" name="переменная emt" value="1" size="2"></p>";
Я также пробовал использовать для переменных $idsealy и $idemt разное название переменной $qty, которая отображает кол-во переменных.
Например:

foreach ($cart as $idsealy => $qty)
foreach ($cart as $idemt => $ytq)

Но результат, то же.
 

baev

‹°°¬•
Команда форума
Мда...

Если долго мучиться, что-нибудь получитЬся.
-- явно мазохист

Чтоб в скрипте значение переменной узнать, надо эту переменную вместе с её значением этому скрипту передать.

Подробнее, например, тут:
http://phpfaq.ru/globals
(особенно -- фраза
"Допустим, в форме был элемент
<input type="hidden" name="var" value="1">,
то в скрипте, который указан в action формы, можно написать echo $_POST['var']; и будет выведена 1."
)

Только Вы это^^^^ не читайте, а то мучения закончатся...
 

Фанат

oncle terrible
Команда форума
Гриша.
Ты меня извини, но когда я задавал тебе свой знаменитый вопрос про magazin/cart.php?new=10 - я издевался.
Я и предположить не мог, что может найтись человек, который не увидит в этом вопросе бессмыслицы.

Наивный друг мой! Ну не обладают ещё компьютеры телепетическими способностями.
И если ты передаёщь скрипту АБСОЛЮТНО ОДИНАКОВЫЕ ДАННЫЕ, то он НЕ ДОГАДАЕТСЯ, какие именно ты ИМЕЛ В ВИДУ!
Такая вот грустрная история.

поэтому я надеялся, что ты увидишь в моём примере явную несуразицу, и догадаешься, что если тебе надо передать в скрипт переменную idfmt, то в этом случае ЕЁ И НАДО ПЕРЕДАВАТЬ! А не какую-то непонятную new
если тебе надо передать другую переменную, забыл, как она называется - то и передавай.
а не какую-то непонятную new.
 

Гриша К.

Новичок
Да, я согласен с вами, спасибо вам за ответы, я долго, думал, и методом тыка дошел, до этого.
Сделал вместо new, переменные emt и sealy, и соответсвенно изменил скрипт.
Я же совсем глуп в PHP, отсюда вот таки у меня вопросы.
 
Сверху