Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: покупательская корзина
Форумы портала PHP.SU » PHP » Программирование на PHP » покупательская корзина

Страниц (2): [1] 2 »
 

1. alfred - 01 Марта, 2007 - 11:40:53 - перейти к сообщению
Прошу помощи в создании корзины.
Из найденных сообщений я не нашла подходящих мне советов. Такая задача:выбирается товар, помещается в масив SESSION , а затем этот масив должен попастьв файл 1, где в виде таблицы выводятся все выбранные товары. Вопрос - как передать массив в файл 1?
2. evgenijj - 01 Марта, 2007 - 15:26:42 - перейти к сообщению
alfred пишет:
Прошу помощи в создании корзины.
Из найденных сообщений я не нашла подходящих мне советов. Такая задача:выбирается товар, помещается в масив SESSION , а затем этот масив должен попастьв файл 1, где в виде таблицы выводятся все выбранные товары. Вопрос - как передать массив в файл 1?

Честно говоря - ничего не понял. "Массив должен попасть в файл 1" - что означает это загадочная фраза? Информация о заказах будет храниться в файлах, а не в БД? Если да - то в каком формате? CSV, HTML? Или надо сгенерировать HTML и вывести его в браузер? Что значить - передать массив в файл? Как записать информацию в файл? Или как получить информацию из массива $_SESSION?

Если хотите получить ответ на свой вопрос - так надо четко и ясно объяснить, что надо сделать, и что не получается. Такие вопросы (ничего конкретного) обычно остаются без ответа.
3. alfred - 01 Марта, 2007 - 15:32:50 - перейти к сообщению
да, это уже понятно....что остаются баз ответа. Просто когда человек видит, что по данному вопросу он может чем-то помочь - уже он конкретизирует задачу...\n\n(Добавление)
а еще понятно , что на форуме все раввно никогда не получишь нужной тебе информации.... у человека, имеющего мало опыта в прогрпммировании, недостаточно велик его словарный запас, что бы конкретно, описать что не работает. т.к. если б он знал свои ошибки - то он бы не просил помощи у других....
4. evgenijj - 01 Марта, 2007 - 15:46:11 - перейти к сообщению
Так ты расскажешь, в чем проблема - или просто поговорить зашел? Улыбка

P.S. В свое время, когда я первый раз столкнулся с необходимостью написать Интернет-магазин, я нашел бесплатный скрипт магазина Shop-Script FREE, доступный для скачивания на сайте http://www[dot]shop-script[dot]ru/ и внимательно изучил исходники. Нашел ответы на многие вопросы.
5. alfred - 01 Марта, 2007 - 15:53:44 - перейти к сообщению
зашла...
проблему не могу найти нужно чтобы кто-то посмотрел код.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.         $idp=$_GET["id"];
  4.         $q=1;
  5.         $totalprice=0;
  6.         include("mylp.php");
  7.         $link=mysql_connect($myhost,$mylogin,$mypwd) or die(mysql_error());
  8.         mysql_select_db("mydb");
  9.         $r=mysql_query("select  name,header,price,imgsrc from products where id={$idp}");
  10.            
  11.                 $cartinfo = array();
  12.         list($name,$header,$price,$imgsrc)=mysql_fetch_row($r);
  13.         $cartinfo["name"]=$name;
  14.         $cartinfo["header"]=$header;
  15.         $cartinfo["price"]=$price;
  16.         $cartinfo["imgsrc"]=$imgsrc;
  17.         $cartinfo["quantity"]=$q;
  18.         $_SESSION["cart"][$idp]=$cartinfo;
  19.  
  20.         header("Location: into_cart.php");
  21.  
  22. ?>
  23.  

в этот файл попадают выбранные пользователем товары... а отсюда в файл ниже
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  while(list($key,$value)=each($_SESSION["cart"]))
  4.  {
  5.           if($value["quantity"]<0){
  6.                  $value["quantity"]=1;
  7.            }
  8.  
  9.         $value["q"] = $_POST["quantity_".$key];
  10.         $totalprice = 0;
  11.         $total = 0;
  12.  
  13.         $name = $value["name"];
  14.         $header = $value["header"];
  15.         $price = $value["price"];
  16.         $imgsrc = $value["imgsrc"];
  17.         $q = $value["q"];
  18.     $_SESSION["cart"][$idp]=$cartinfo;
  19.         $totalprice = $price*$q;
  20.         $total+=$totalprice;
  21.  
  22.     echo "
  23.  

проблема - какой то глюк - вмнсте с товаром отображается пустая строка, кот не удаляется....
посмотрите, може де-то ошибка....
зараннее спасибо!
6. alfred - 05 Марта, 2007 - 12:46:22 - перейти к сообщению
подскажите плиз как мне по кнопке "Обновить" изменить вводимое пользователем в текстовое поле число, в данном случае количество товара в корзине:?
я пишу так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $q=$_GET["$q"];
  3.  while(list($key,$value)=each($_SESSION["cart"]))
  4.  {
  5.         $value["quntity"] = $_GET["quantity_".$key];
  6.         $totalprice = 0;
  7.         $total = 0;
  8.         // здесь нужно проверить, верное ли значение ввел пользователь в поле с количеством. Фхтагн!
  9.         //  if($value["quantity"] < 0){
  10.         //         $value["quantity"] = 1;
  11.         //   }
  12. // }
  13.  //while(list($key,$value)=each($_SESSION["cart"])){      //Variable passed to each() is not an array or object
  14.         $name = $value["name"];
  15.         $header = $value["header"];
  16.         $price = $value["price"];
  17.         $imgsrc = $value["imgsrc"];
  18.         $q = $value["quantity"];
  19.     $_SESSION["cart"][$idp]=$cartinfo;
  20.         $totalprice = $price*$q;
  21.         $total+=$totalprice;
  22.     echo "<tr><td align='center'><img src='$imgsrc' width='50' height='50' /></td>
  23.              <td align='left' valign='top' title='names'><b>$name</b><br />$header</td>
  24.              <td title='price' width='15%'>$price<span style='color:#990000;'> y.e.</span></td>
  25.              <td width='15%'><input type='text' value='$q' name='quantity_$key' style='background-color:#333333;color:white' size='3' /></td>
  26.              <td align='center'>$totalprice<span style='color:#990000;'> y.e.</span></td>
  27.              <td align='center'><a href='del_o.php?key=$key'><span style='font-size: 13px;'><b>Удалить</b></span></a></td>
  28.         </tr>
  29.         <tr align='right'><td>&nbsp;</td>
  30.                           <td>&nbsp;</td>
  31.                           <td>&nbsp;</td>
  32.                           <td>&nbsp;</td>
  33.                           <td><input type='submit' value='Обновить'  /></td>
  34.                           <td>&nbsp;</td>
  35.         </tr>";
  36.  }
  37.  
7. evgenijj - 05 Марта, 2007 - 14:36:36 - перейти к сообщению
Примерно так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. // $_SESSION["ids"][$i] содержит ID i-го товара в корзине
  5. // $_SESSION["counts"][$i] содержит количество товара в корзине
  6. // $_SESSION["names"][$i] содержит наименование товара в корзине
  7. // $_SESSION["prices"][$i] содержит цену товара в корзине
  8. // $_SESSION["ids"][$i] == 0 означает, что элемент $i пустой
  9.  
  10. if ( isset($_POST["update"]) ) // Обновить содержимое корзины
  11. {
  12.     foreach ($_POST as $key => $value)
  13.     {
  14.         if (strstr($key, "count_"))
  15.         {
  16.             if ($value >= 1)
  17.             {
  18.                 for ($i=0; $i<count($_SESSION["ids"]); $i++)
  19.                 {
  20.                     if ($_SESSION["ids"][$i] == str_replace("count_","",$key))
  21.                     {
  22.                         $_SESSION["counts"][$i] = floor($value);
  23.                         if( !$_SESSION["counts"][$i] ) $_SESSION["counts"][$i] = 0;
  24.                     }
  25.                 }
  26.             }
  27.             else // удаляем товар из корзины, количество которого в корзине - ноль
  28.             {
  29.                 $i=0;
  30.                 while ($_SESSION["ids"][$i] != str_replace("count_","",$key) && $i<count($_SESSION["ids"])) $i++;
  31.                 $_SESSION["ids"][$i] = 0;
  32.                 $_SESSION["counts"][$i] = 0;
  33.             }
  34.         }
  35.     }
  36. }
  37.  
  38. echo "<form name='cart' action='".$_SERVER["PHP_SELF"]."' method='POST'>"
  39. echo "<table>";
  40. echo "<tr><th>ID</th><th>Наименование</th><th>Количество</th><th>Цена</th></tr>";
  41. for ( $i=0; $i < count($_SESSION["ids"]); $i++ )
  42. {
  43.     if ($_SESSION["ids"][$i])
  44.     {
  45.         echo "<tr>";
  46.         echo "<td>".$_SESSION["ids"][$i]."</td>";
  47.         echo "<td>".$_SESSION["names"][$i]."</td>";
  48.         echo "<td><input type='text' value='".$_SESSION["counts"][$i]."' name='count_".$_SESSION["ids"][$i]."' /></td>";
  49.         echo "<td>".$_SESSION["prices"][$i]."</td>";
  50.         echo "</tr>";
  51.     }
  52. }
  53. echo "</table>";
  54. echo "<input type='submit' name='update' value='Обновить' />"
  55. echo "</form>";
  56. ?>
  57.  
8. alfred - 05 Марта, 2007 - 14:42:36 - перейти к сообщению
а чтотакое if (strstr($key, "count_")) ?
9. evgenijj - 05 Марта, 2007 - 14:52:06 - перейти к сообщению
alfred пишет:
а чтотакое if (strstr($key, "count_")) ?

strstr -- Находит первое вхождение подстроки; в случае успеха возвращает TRUE

У нас в форме для каждой товарной позиции из покупательской корзины определено поле
<input type='text' value='3' name='count_57' />
где 3 - количество товара в корзине
57 - ID этого товара

Ведь если пользователь изменил количество товара в корзине и нажал кнопку обновить - мы пересылаем эти данные на сервер, читаем массив $_POST и обновляем массив $_SESSION. Но из массива $_POST мы отбираем только "наши" значения (содержащие подстроку "count_"), относящиеся к изменению количества товара в корзине.
10. alfred - 05 Марта, 2007 - 14:57:48 - перейти к сообщению
посотрите пожалуйста мой код, что-то я не могу разобраться!
11. evgenijj - 05 Марта, 2007 - 17:10:18 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. // Получаем ID товаров в корзине
  4. $ids = array_keys($_SESSION["cart"])
  5. // Обновляем количество товара в корзине
  6. foreach( $ids as $id )
  7. {
  8.         if ( $_GET["quantity_".$id] > 0 )
  9.                 $_SESSION["cart"][$id]["quantity"] = $_GET["quantity_".$id];
  10.         else
  11.                 unset($_SESSION["cart"][$id]);
  12. }
  13. echo "<form name='cart' action='".$_SERVER["PHP_SELF"]."' method='GET'>";
  14. echo "<table>";
  15. $total = 0;
  16. foreach( $_SESSION["cart"] as $key => $value )
  17. {
  18.         $name = $value["name"];
  19.         $header = $value["header"];
  20.         $price = $value["price"];
  21.         $imgsrc = $value["imgsrc"];
  22.         $quantity = $value["quantity"];
  23.         $totalprice = $price*$quantity;
  24.         $total+=$totalprice;
  25.        echo "<tr><td align='center'><img src='".$imgsrc."' width='50' height='50' /></td>
  26.              <td align='left' valign='top' title='names'><b>".$name."</b><br />".$header."</td>
  27.              <td title='price' width='15%'>".$price."<span style='color:#990000;'> y.e.</span></td>
  28.              <td width='15%'><input type='text' value='".$quantity."' name='quantity_".$key."' style='background-color:#333333;color:white' size='3' /></td>
  29.              <td align='center'>".$totalprice."<span style='color:#990000;'> y.e.</span></td>
  30.              <td align='center'><a href='del_o.php?key=".$key."'><span style='font-size: 13px;'><b>Удалить</b></span></a></td>
  31.         </tr>";
  32. }
  33. echo "</table>";
  34. echo "<input type='submit' name='update' value='Обновить' />";
  35. echo "</form>";
  36. ?>
  37.  
12. alfred - 06 Марта, 2007 - 10:31:02 - перейти к сообщению
Ругается на эту строку

foreach( $ids as $id )
parse error, unexpected T_FOREACH
13. evgenijj - 06 Марта, 2007 - 11:38:11 - перейти к сообщению
alfred пишет:
Ругается на эту строку

foreach( $ids as $id )
parse error, unexpected T_FOREACH

В предыдущей строке пропустил закрывающую ";"
14. alfred - 06 Марта, 2007 - 12:10:46 - перейти к сообщению
Спасабо огромное! Все получилось... только плюется Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource
на эту строку

list($name,$header,$price,$imgsrc)=mysql_fetch_row($r);
как попросить пхп не ругаться?

PS мне просто надоело искать ошибки... вроде все работает... только ругается!
Еще интересно, почему ето все на сервере не работает!!!!
корзина пустая.... подскажите, может чего-то я не знаю
15. evgenijj - 06 Марта, 2007 - 13:18:34 - перейти к сообщению
alfred пишет:
Спасабо огромное! Все получилось... только плюется Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource
на эту строку

list($name,$header,$price,$imgsrc)=mysql_fetch_row($r);
как попросить пхп не ругаться?

PS мне просто надоело искать ошибки... вроде все работает... только ругается!
Еще интересно, почему ето все на сервере не работает!!!!
корзина пустая.... подскажите, может чего-то я не знаю

Запрос к БД возвращает некорректный результат:
$r=mysql_query("select name,header,price,imgsrc from products where id={$idp}");

Надо просматривать результаты запроса - он вообще что-нибудь возвращает?

Кстати, а зачем там фигурные скобки - какую функциональную нагрузку они несут?

$r=mysql_query("select name,header,price,imgsrc from products where id=".$idp);


P.S. Переменная $idp = $_GET["id"] А $_GET["id"] всегда определена, она не равна пустой строке? Это точно число, а не строка?

 

Powered by ExBB FM 1.0 RC1