Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пересчет товаров в корзине 
V
    Опции темы
Risyaalex
Дата 31.7.2011, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Все идет по плану...
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.7.2010

Репутация: нет
Всего: нет



Помогите сделать пересчет товаров в корзине, данные собираются в сессию: 
(мне удалось только сделать пересчет по каждому товару в отдельности, но это ужасно выглядит)

вот код корзины:
Код

<form id='form2' name='form2' method='post' action='update_zakaz.php'>   
    <table align="center" border="0" cellpadding="0" cellspacing="0">
         <?php
 if($_SESSION['zakaz'] != '') {
        foreach($_SESSION['zakaz'] as $key => $value)
{ 
if($value != '0') {
$res_rez = mysql_query("SELECT * FROM tovar WHERE id='$key'");
$arr_rez=mysql_fetch_array($res_rez);
$cena_tyres=$arr_rez['cena']*$value;
$all_tyres+=$cena_tyres;
    echo "<tr><td class='smallText'>".$arr_rez['title']."</td><td align='center' class='smallText'>
        <input size='1' type='text' name='col_zakaz[]' id='col_zakaz' value='$value' />
        <input name='id_zakaz[]' type='hidden' value='$arr_rez[id]' />
      шт. 
      </td><td width='100' class='smallText'>".$arr_rez['cena']." грн.</td><td width='100' class='smallText'><font color='#FF0000'>".$cena_tyres."</font> грн. </td></tr>"; 

}
}
}

else echo "<tr><td align='center' colspan='4' class='smallText'><br /><font size='-1'><b>Нет выбранных товаров</b> </font><br /><br /></td></tr>";
?>
</table>
    <input type="submit" name="button" id="button" value="Пересчитать" />
    </form>


обрабатывать пересчет товара должен 'update_zakaz.php', передаю массивы id товара и количество товара, а как правильно эти массивы обработать и вернуть?:
Код

if (!isset ($_SESSION)) session_start();
$id_zakaz=$_POST["id_zakaz"];  
$col_zakaz=$_POST["col_zakaz"];
    
        echo "<html><head>
        <meta http-equiv='Refresh' content='0; URL=zakaz.php'>
        </head></html>";
        exit();

PM MAIL ICQ   Вверх
NFL
Дата 31.7.2011, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Цитата(Risyaalex @  31.7.2011,  12:12 Найти цитируемый пост)
if($_SESSION['zakaz'] != '')

Писдец

Цитата(Risyaalex @  31.7.2011,  12:12 Найти цитируемый пост)
if (!isset ($_SESSION))

Тоже писдец
PM MAIL   Вверх
Risyaalex
Дата 31.7.2011, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Все идет по плану...
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.7.2010

Репутация: нет
Всего: нет



Цитата(NFL @ 31.7.2011,  14:55)
Цитата(Risyaalex @  31.7.2011,  12:12 Найти цитируемый пост)
if($_SESSION['zakaz'] != '')

Писдец

Цитата(Risyaalex @  31.7.2011,  12:12 Найти цитируемый пост)
if (!isset ($_SESSION))

Тоже писдец

что в этом такого ужасного? зачем сессию открывать если она уже существует?
PM MAIL ICQ   Вверх
NFL
Дата 31.7.2011, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Risyaalex, 
Код

if($_SESSION['zakaz'] != '')


Почему не if(isset($_SESSION['zakaz']))?
И почему не order? Моск сломать можно smile 

Насчет проверки существования сессии.... по идее это не обязательно

В реальном скрипте вам придется ставить E_ALL&~E_NOTICE и это избавит от отображения предупреждения, что сессия стартовала)
PM MAIL   Вверх
Risyaalex
Дата 31.7.2011, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Все идет по плану...
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.7.2010

Репутация: нет
Всего: нет



ок
PM MAIL ICQ   Вверх
NFL
Дата 31.7.2011, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Код

if (!isset ($_SESSION)) session_start();
$id_zakaz=$_POST["id_zakaz"];  
$col_zakaz=$_POST["col_zakaz"];
    
        echo "<html><head>
        <meta http-equiv='Refresh' content='0; URL=zakaz.php'>
        </head></html>";
        exit();


Логичнее так:

Код

if (!isset ($_SESSION)) session_start();
$id_zakaz=$_POST["id_zakaz"];  
$col_zakaz=$_POST["col_zakaz"];
header("Location: zakaz.php");



И после session_start(); добавить ob_start();

Код

foreach($_SESSION['zakaz'] as $key => $value)
{ 
if($value != '0')


Почему проверка на символ  smile "0"?
А если там ничего не будет? smile 

Что тогда? Может опять же на isset/!empty смотреть?

echo делать - не очень кошерно, как по мне, но это на любителя. Я предпочитаю что нить такое:
Код

<?php foreach($arr as $k=>$v):?>
<li><?php echo $v;?></li>
<?php endforeach;?>



Ну это было немножко критики smile 

А теперь - что у вас не получается?

У вас есть список товаров в массиве $_SESSION['zakaz']?
Пробегаетесь форычем и считаете
foreach($_SESSION['zakaz'] as $k=>$v) {
}

если структура массива $_SESSION[zakaz] более сложная - выложите ее)
PM MAIL   Вверх
Sanchezzz
Дата 31.7.2011, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



1 скрытие ошибок не есть гуд...

Добавлено @ 20:55
вроде так.
Код

$sql = "select * from zakaz WHERE  id = IN(".implode(',', $_POST["id_zakaz"] ) .")";
$r = mysql_query($sql);
while($row = mysql_fetch_assoc($r)){
PRINT_r($row);

}


пс код не защищен и подвержен sql-injection  $_POST["id_zakaz"]  проверить и перебрать через фореач также проверить число или сразу intval() + чтобы не было пустых значений в масве иначе запрос феил. 


Это сообщение отредактировал(а) Sanchezzz - 31.7.2011, 20:57


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
NFL
Дата 31.7.2011, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Sanchezzz, скрытие ошибок не есть гуд в процессе написания. на лайв однозначно E_NOTICE надо отключать smile 
ЗЫ: не догнал, при чем тут implode  smile 
По идее это одно число  smile 
Айдишка текущего заказа, и достаточно просто _POST['id_zakaz']
PM MAIL   Вверх
Risyaalex
Дата 1.8.2011, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Все идет по плану...
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.7.2010

Репутация: нет
Всего: нет



спасибо за конструктивную критику, буду стараться соответствовать высоким нормам php)

по теме:
данные (id заказа и количество) хранятся в SESSION[zakaz]

при пересчете количества - передаются массивы id_zakaz[] и col_zakaz[] в update_zakaz.php
мне их надо опять собрать в SESSION[zakaz]
как их foreach-ем перебрать ?

PM MAIL ICQ   Вверх
mark2011
Дата 2.8.2011, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 28.6.2011

Репутация: 2
Всего: 2



Мда, прочитал всю тему...

ТС, во-первых неплохо бы изучить документально поведение функции session_start() - она либо стартует новую сессию, либо цепляется к уже существующей.

Во-вторых вот такой код:
Код

if (!isset ($_SESSION))

 всегда будет возвращать false, так как $_SESSION - суперглобалка, она всегда существует.

В-третьих, прошу вас, не надо смешивать html и php, это ужасно смотрится и, по сути, нечитабельно...

И в-четвёртых - пересчёт товара правильно осуществлять на ajax, по идее. Ну потому что вот юзер щёлкнул по кнопке "Пересчитать", ему динамически должно всё обновиться. Это будет логично. А если у вас этим занимается отдельный скрипт, то, получается, что сначала перенаправление идёт на update_zakaz.php, там что-то такое делается, а потом идёт уже не знаю куда перенаправление.... получается очень много действий. Логичнее это всё на ajax вынести, чтобы клиенту было легче ))

Я просто сейчас делал инет-магазин, у меня всё именно так реализовано.
PM WWW ICQ Skype   Вверх
Risyaalex
Дата 2.8.2011, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Все идет по плану...
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.7.2010

Репутация: нет
Всего: нет



ajax - дело хорошее.

но мне просто нужно из массивов $id_zakaz и $col_zakaz собрать массив $_SESSION['zakaz']
если данные не в массиве - собираю просто $_SESSION['zakaz'][$id_zakaz] = $col_zakaz
с массивами так не получится, вот и спрашиваю, как это можно реализовать


я учу php пока что, так что на идеальность реализации не претендую

Добавлено через 3 минуты и 18 секунд
Цитата(mark2011 @  2.8.2011,  09:44 Найти цитируемый пост)
session_start()

я ходила на мини курсы, и преподаватель учил  писать
Код

if (!isset ($_SESSION)) session_start();

так что пока с этим не столкнулась - писала вот так
PM MAIL ICQ   Вверх
Absinthe
Дата 2.8.2011, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Цитата

на лайв однозначно E_NOTICE надо отключать
 Не надо. Надо ошибки не на экран выводить, а в логи.

А совет - учиться программировать на всяких "написать блог". Рано топикстартеру писать магазины.
Надеюсь, это не готовый продукт, а курсовая, иначе заказчик встрял на переписывание smile
PM MAIL   Вверх
Risyaalex
Дата 2.8.2011, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Все идет по плану...
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.7.2010

Репутация: нет
Всего: нет



мдя...
кто нибудь по теме ответит, или дальше поливать будете? 
я же написала что мне нужно, свой уровень я знаю и если бы не хотела учиться писала бы не на форумах а на фриланс
PM MAIL ICQ   Вверх
нуп
Дата 2.8.2011, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: нет
Всего: 33



Покажите что находится в массивах и какой в итоге массив вам нужно получить? 
PM MAIL   Вверх
Risyaalex
Дата 2.8.2011, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Все идет по плану...
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.7.2010

Репутация: нет
Всего: нет



передаются методом post массивы id_zakaz[]  и col_zakaz[] (id товара и количество) 
нужно собрать в $_SESSION['zakaz']

PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.