Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Создание корзины в интернет магазине
 
 автор: Элен   (21.11.2009 в 13:15)   письмо автору
 
 

создание корзины в интернет-магазине на php у каждого товара есть свой id... подскажите как делается, а то все перепробовала и не получается, он не понимает что надо все отправить в корзину
вот код который выводит товар на страницу, у каждого товара есть checkbox вот как сделать чтоб он данные по товару который отмечен добавил в таблицу

$result2 = mysql_query("SELECT id, kartinka,towar,opisanie,kol,cena FROM towar WHERE pcat='$pcat'",$db);
if (isset($kartinka) && isset($towar) && isset($opisanie) && isset($kol) && isset($cena))
{
echo "<p>Запрос на выборку данных из базы не прошел. <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
if (mysql_num_rows($result2) > 0)
{
$myrow2 = mysql_fetch_array($result2);
do
{
printf("<table class='tabl1'>
<tr>
<td><input type='checkbox' name='id' value='%s'></td>
<td width='150' class='ramka'><p>%s</p><br><p>%s</p></td>
<td width='300' class='ramka'><p>%s</p></td>
<td width='80' class='ramka'><p><strong>Ост.:</strong><br><br>%s шт.</p></td>
<td width='90' class='ramka'><p><strong>Цена:</strong><br><br>%s руб.</p></td>

</p></td>
</tr>
</table>", $myrow2["id"],$myrow2["kartinka"],$myrow2["towar"],$myrow2["opisanie"],$myrow2["kol"],$myrow2["cena"]);

}
while ($myrow2 = mysql_fetch_array($result2));

он не понимает что надо кроме id в базу добавить и данные еще по товару

  Ответить  
 
 автор: sim5   (21.11.2009 в 13:19)   письмо автору
 
   для: Элен   (21.11.2009 в 13:15)
 

А id в чекбоксе приписанное именно id, это вы как пример, или у вас так и прописываетя в коде? Используйте while вместо do...while.

  Ответить  
 
 автор: Элен   (21.11.2009 в 13:25)   письмо автору
 
   для: sim5   (21.11.2009 в 13:19)
 

Как именно использовать while, можете написать примерный код.......пожалуйста...)

  Ответить  
 
 автор: Элен   (21.11.2009 в 13:32)   письмо автору
 
   для: Элен   (21.11.2009 в 13:25)
 

он в обработчик посылает одну только переменную id, а кроме этого надо чтоб он отправлял данный по товару

  Ответить  
 
 автор: sim5   (21.11.2009 в 13:35)   письмо автору
 
   для: Элен   (21.11.2009 в 13:25)
 

Вы так и не ответили по поводу:
<input type='checkbox' name='id' value='%s'>
while($myrow2 = mysql_fetch_assoc($result2)) { 
  //действия
}

mysql_fetch_array возвращает два набора идентичных данных, из которых вы используете только ассоциативный, а значит использовать его в вашем случае нет смысла.

Ну собственно дело то не в while как таковом. Может быть не так орагнизовать корзину?

  Ответить  
 
 автор: Элен   (21.11.2009 в 13:50)   письмо автору
 
   для: sim5   (21.11.2009 в 13:35)
 

не знаю как ее организовать голова уже не соображает, в value='%s' подставляется id товара из базы, у каждого товара свой id, в обработчик в этом случае уходит id только, а мне надо чтоб другие переменные тоже туда ушли, чтоб потом их вывести

  Ответить  
 
 автор: Trianon   (21.11.2009 в 13:54)   письмо автору
 
   для: Элен   (21.11.2009 в 13:50)
 

>не знаю как ее организовать голова уже не соображает, в value='%s' подставляется id товара из базы, у каждого товара свой id, в обработчик в этом случае уходит id только, а мне надо чтоб другие переменные тоже туда ушли, чтоб потом их вывести

А.. зачем?
По id товара в самом обработчике можно восстановить все данные о товаре, запросив их из таблицы БД еще раз.

  Ответить  
 
 автор: Элен   (21.11.2009 в 14:14)   письмо автору
 
   для: Trianon   (21.11.2009 в 13:54)
 

значит я в обработчик передаю только id? если я вас правильно поняла я уже так делала, вот только не могу понять вообще товар который отмечен его нужно заносить в базу или я его могу сразу как- нибудь вывести в корзине???

  Ответить  
 
 автор: Trianon   (21.11.2009 в 14:23)   письмо автору
 
   для: Элен   (21.11.2009 в 14:14)
 

>вот только не могу понять вообще товар который отмечен его нужно заносить в базу

Обычно не нужно.

>или я его могу сразу как- нибудь вывести в корзине???

конечно можете.

  Ответить  
 
 автор: Элен   (21.11.2009 в 14:38)   письмо автору
 
   для: Trianon   (21.11.2009 в 14:23)
 

а как его можно вывести в корзину не подскажите....пожалуйста.....

  Ответить  
 
 автор: tvv123456   (21.11.2009 в 14:33)   письмо автору
 
   для: Элен   (21.11.2009 в 14:14)
 


<?
// скрипт чуток примитивен но все-таки разберитесь что к чему вам может помочь
$list=implode(','$_POST['cena']); // все id товаров которые были выбраны преобразуем для запроса
//переменную $list можно хранить в куках, чтоб пользователь мог подумать и подополнять товары
    
$list mysql_escape_string($list); // на всякий случай
    
if(!$result=mysql_query("SELECT * FROM cena WHERE id IN ($list)",$db)){header("location:index.php");}

do 

$row=mysql_fetch_assoc($result); // заносим все что вытащилось из базы(параметры товаров)
// ну а дальше просто выводим инфу о товаре
echo $row['param'];

$a++; 

while(
$a<100); // тут конечно другое условие :)
?>


Только где чекбоксы стоят нужно указать что передаваться будет не один чекбокс, а если вам нужно хранить информацию о корзине и дополнять ее(если пользователь решил докупиться), то можно использовать КУКИ или СЕССИИ

  Ответить  
 
 автор: Trianon   (21.11.2009 в 14:44)   письмо автору
 
   для: tvv123456   (21.11.2009 в 14:33)
 

> $list = mysql_escape_string($list); // на всякий случай

может не надо таких случаев?

  Ответить  
 
 автор: tvv123456   (21.11.2009 в 14:46)   письмо автору
 
   для: Trianon   (21.11.2009 в 14:44)
 

>может не надо таких случаев?
А почему бы и нет?

  Ответить  
 
 автор: Trianon   (21.11.2009 в 14:49)   письмо автору
 
   для: tvv123456   (21.11.2009 в 14:46)
 

Потому что тогда я потребую объяснить смысл и эффект этой строки.
А Вы загнетесь в попытке это сделать.

Сама по себе строка ничего, кроме вреда, не приносит.

  Ответить  
 
 автор: tvv123456   (21.11.2009 в 14:50)   письмо автору
 
   для: Trianon   (21.11.2009 в 14:49)
 

>Потому что тогда я потребую объяснить смысл и эффект этой строки.
>А Вы загнетесь в попытке это сделать.
Ну разве нельзя через эту переменную провести инъекцию?
Ваши слова в подобной ситуации

>а переменную $list вот так определить можно?:
>$list=implode(',', $_POST['cena'])

Так - нельзя. SQL-инъекция чистом виде.


Вот после этих слов я и добавил эту строчку

  Ответить  
 
 автор: Trianon   (21.11.2009 в 15:38)   письмо автору
 
   для: tvv123456   (21.11.2009 в 14:50)
 

так Ваша строка инъекцию никуда не убрала.

  Ответить  
 
 автор: tvv123456   (21.11.2009 в 15:52)   письмо автору
 
   для: Trianon   (21.11.2009 в 15:38)
 

Вроде википедия так советует делать чтоб экранировать кавычки(и пр.) чтоб нельзя было провести несколько запросов

Хотя опыта в таких вещах у меня малова-то поэтому могу быть не прав, надеюсь что вы обьясните суть ваших притязаний

  Ответить  
 
 автор: tvv123456   (21.11.2009 в 20:27)   письмо автору
 
   для: tvv123456   (21.11.2009 в 15:52)
 

Trianon, ответьте пожалуйста: если это от инъекции не спасет, то что тогда от нее спасет( в целях общего развития)
:)

  Ответить  
 
 автор: Trianon   (21.11.2009 в 20:54)   письмо автору
 
   для: tvv123456   (21.11.2009 в 20:27)
 

вводите в поле cena текст:
0) UNION ALL SELECT * FROM users WHERE (1+0


Ваш скрипт сформирует следующий запрос
SELECT * FROM cena WHERE id IN (0) 
UNION ALL  
SELECT * FROM users WHERE (1+0)


:)


Эта функция не для того чтоб спасать кого-то.
Эта функция помогает корректно сформировать синтаксис строки. Точнее - нутра строки.
Помогает, если тот, кто её использует, понимает, зачем её создали и где её применять.
А не тычет слепо во все дыры.
собствнно, как и любой другой инструмент.

Идите в мануал, в учебник, решать задачу 21 наконец...

  Ответить  
 
 автор: tvv123456   (21.11.2009 в 21:28)   письмо автору
 
   для: Trianon   (21.11.2009 в 20:54)
 

Trianon,
извиняюсь за надоедливость, но если я возьму переменную в кавычки то уже )
UNION ALL
SELECT * FROM users WHERE (1+0)
не проскочит ка отдельный запрос, а превратитьс в параметр запроса ' )
UNION ALL
SELECT * FROM users WHERE (1+0) ' (найти то где есть такая запись)? А если не использовать экранирование кавычек, то можно закрыть данный параметр и провести тот запрос который вы превили.

Конечно я думаю процентов на 51 что ошибаюсь

А что за задача 21 не сильно понятно

  Ответить  
 
 автор: Trianon   (21.11.2009 в 21:41)   письмо автору
 
   для: tvv123456   (21.11.2009 в 21:28)
 

Если бы Вы взяли переменную в кавычки, то константа как минимум поменяла бы тип, и разговор был бы совершенно другой. Но Вы же не взяли?

>А что за задача 21 не сильно понятно

См раздел "задачи на PHP"

  Ответить  
 
 автор: tvv123456   (21.11.2009 в 22:42)   письмо автору
 
   для: Trianon   (21.11.2009 в 21:41)
 

посмотрел задачу не разбирался :)
А вы что имели ввиду когда говорили про инъекцию(в смысле как по вашему от нее защититься)

  Ответить  
 
 автор: Drago   (22.11.2009 в 01:12)   письмо автору
 
   для: tvv123456   (21.11.2009 в 22:42)
 

>в смысле как по вашему от нее защититься

Обрабатывать входящие данные таким образом, чтобы они соответствовали ожидаемым.

  Ответить  
 
 автор: sim5   (21.11.2009 в 14:05)   письмо автору
 
   для: Элен   (21.11.2009 в 13:50)
 

Я о том, что у вас корзина, а это временное представление, храниться в базе. Это значит, что при каждом ее изменении (добавлении, удалении товара) требуются постоянные запросы к базе. В то же время, пользователь может и не заказать товар, а значит нужно следить за этим, "подчищая" таблицу...
А можно организовать корзину в сессии, и перегружать ее данные в базу только, если пользователь сделает отложенную покупку, ну а при оформлении заказа, просто переписать корзину в таблицу заказов, корзина в сессии же будет удалена автоматически, сборщиком мусора. При этом, при выводе корзины пользователю, требуется только один запрос к базе.
Чтобы добавлять количество товара, ваш чекбокс должен иметь в имени id товара, а в значении количество выбранного, но.... Вы товар отмечаете чекбоксом, и в этом случае более одного товара выбрать нельзя, поэтому там уже подразумевается единица по умолчанию.
Получив id товара в форме, просто добавляете 1 товар, проверять сколько в этом случае какой смысл?
Можно посмотреть пример корзины здесь, а вообще в этом разделе много было тем о корзинах, поищите.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования