|
|
|
| создание корзины в интернет-магазине на 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 в базу добавить и данные еще по товару | |
|
|
|
|
|
|
|
для: Элен
(21.11.2009 в 13:15)
| | А id в чекбоксе приписанное именно id, это вы как пример, или у вас так и прописываетя в коде? Используйте while вместо do...while. | |
|
|
|
|
|
|
|
для: sim5
(21.11.2009 в 13:19)
| | Как именно использовать while, можете написать примерный код.......пожалуйста...) | |
|
|
|
|
|
|
|
для: Элен
(21.11.2009 в 13:25)
| | он в обработчик посылает одну только переменную id, а кроме этого надо чтоб он отправлял данный по товару | |
|
|
|
|
|
|
|
для: Элен
(21.11.2009 в 13:25)
| | Вы так и не ответили по поводу:
<input type='checkbox' name='id' value='%s'>
while($myrow2 = mysql_fetch_assoc($result2)) {
//действия
}
|
mysql_fetch_array возвращает два набора идентичных данных, из которых вы используете только ассоциативный, а значит использовать его в вашем случае нет смысла.
Ну собственно дело то не в while как таковом. Может быть не так орагнизовать корзину? | |
|
|
|
|
|
|
|
для: sim5
(21.11.2009 в 13:35)
| | не знаю как ее организовать голова уже не соображает, в value='%s' подставляется id товара из базы, у каждого товара свой id, в обработчик в этом случае уходит id только, а мне надо чтоб другие переменные тоже туда ушли, чтоб потом их вывести | |
|
|
|
|
|
|
|
для: Элен
(21.11.2009 в 13:50)
| | >не знаю как ее организовать голова уже не соображает, в value='%s' подставляется id товара из базы, у каждого товара свой id, в обработчик в этом случае уходит id только, а мне надо чтоб другие переменные тоже туда ушли, чтоб потом их вывести
А.. зачем?
По id товара в самом обработчике можно восстановить все данные о товаре, запросив их из таблицы БД еще раз. | |
|
|
|
|
|
|
|
для: Trianon
(21.11.2009 в 13:54)
| | значит я в обработчик передаю только id? если я вас правильно поняла я уже так делала, вот только не могу понять вообще товар который отмечен его нужно заносить в базу или я его могу сразу как- нибудь вывести в корзине??? | |
|
|
|
|
|
|
|
для: Элен
(21.11.2009 в 14:14)
| | >вот только не могу понять вообще товар который отмечен его нужно заносить в базу
Обычно не нужно.
>или я его могу сразу как- нибудь вывести в корзине???
конечно можете. | |
|
|
|
|
|
|
|
для: Trianon
(21.11.2009 в 14:23)
| | а как его можно вывести в корзину не подскажите....пожалуйста..... | |
|
|
|
|
|
|
|
для: Элен
(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); // тут конечно другое условие :)
?>
|
Только где чекбоксы стоят нужно указать что передаваться будет не один чекбокс, а если вам нужно хранить информацию о корзине и дополнять ее(если пользователь решил докупиться), то можно использовать КУКИ или СЕССИИ | |
|
|
|
|
|
|
|
для: tvv123456
(21.11.2009 в 14:33)
| | > $list = mysql_escape_string($list); // на всякий случай
может не надо таких случаев? | |
|
|
|
|
|
|
|
для: Trianon
(21.11.2009 в 14:44)
| | >может не надо таких случаев?
А почему бы и нет? | |
|
|
|
|
|
|
|
для: tvv123456
(21.11.2009 в 14:46)
| | Потому что тогда я потребую объяснить смысл и эффект этой строки.
А Вы загнетесь в попытке это сделать.
Сама по себе строка ничего, кроме вреда, не приносит. | |
|
|
|
|
|
|
|
для: Trianon
(21.11.2009 в 14:49)
| | >Потому что тогда я потребую объяснить смысл и эффект этой строки.
>А Вы загнетесь в попытке это сделать.
Ну разве нельзя через эту переменную провести инъекцию?
Ваши слова в подобной ситуации
>а переменную $list вот так определить можно?:
>$list=implode(',', $_POST['cena'])
Так - нельзя. SQL-инъекция чистом виде.
|
Вот после этих слов я и добавил эту строчку | |
|
|
|
|
|
|
|
для: tvv123456
(21.11.2009 в 14:50)
| | так Ваша строка инъекцию никуда не убрала. | |
|
|
|
|
|
|
|
для: Trianon
(21.11.2009 в 15:38)
| | Вроде википедия так советует делать чтоб экранировать кавычки(и пр.) чтоб нельзя было провести несколько запросов
Хотя опыта в таких вещах у меня малова-то поэтому могу быть не прав, надеюсь что вы обьясните суть ваших притязаний | |
|
|
|
|
|
|
|
для: tvv123456
(21.11.2009 в 15:52)
| | Trianon, ответьте пожалуйста: если это от инъекции не спасет, то что тогда от нее спасет( в целях общего развития)
:) | |
|
|
|
|
|
|
|
для: 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 наконец... | |
|
|
|
|
|
|
|
для: 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 не сильно понятно | |
|
|
|
|
|
|
|
для: tvv123456
(21.11.2009 в 21:28)
| | Если бы Вы взяли переменную в кавычки, то константа как минимум поменяла бы тип, и разговор был бы совершенно другой. Но Вы же не взяли?
>А что за задача 21 не сильно понятно
См раздел "задачи на PHP" | |
|
|
|
|
|
|
|
для: Trianon
(21.11.2009 в 21:41)
| | посмотрел задачу не разбирался :)
А вы что имели ввиду когда говорили про инъекцию(в смысле как по вашему от нее защититься) | |
|
|
|
|
|
|
|
для: tvv123456
(21.11.2009 в 22:42)
| | >в смысле как по вашему от нее защититься
Обрабатывать входящие данные таким образом, чтобы они соответствовали ожидаемым. | |
|
|
|
|
|
|
|
для: Элен
(21.11.2009 в 13:50)
| | Я о том, что у вас корзина, а это временное представление, храниться в базе. Это значит, что при каждом ее изменении (добавлении, удалении товара) требуются постоянные запросы к базе. В то же время, пользователь может и не заказать товар, а значит нужно следить за этим, "подчищая" таблицу...
А можно организовать корзину в сессии, и перегружать ее данные в базу только, если пользователь сделает отложенную покупку, ну а при оформлении заказа, просто переписать корзину в таблицу заказов, корзина в сессии же будет удалена автоматически, сборщиком мусора. При этом, при выводе корзины пользователю, требуется только один запрос к базе.
Чтобы добавлять количество товара, ваш чекбокс должен иметь в имени id товара, а в значении количество выбранного, но.... Вы товар отмечаете чекбоксом, и в этом случае более одного товара выбрать нельзя, поэтому там уже подразумевается единица по умолчанию.
Получив id товара в форме, просто добавляете 1 товар, проверять сколько в этом случае какой смысл?
Можно посмотреть пример корзины здесь, а вообще в этом разделе много было тем о корзинах, поищите. | |
|
|
|