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

Форум PHP

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

 

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

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

тема: Помогите с флажком checkbox
 
 автор: alex_fear   (02.02.2011 в 11:22)   письмо автору
 
 

Вопрос такой вот скрипт отправки данных на другую страницу сесиями!

include("includes/db.php");
    include("includes/functions1.php");

if ($_REQUEST['command']=='add' && $_REQUEST['productid']>0){
        $pid=$_REQUEST['productid'];
        addtocart($pid,2);
        header("location:shoppingcart.php");
        exit();
    }
opentable();
?>
<script language="javascript">
    function addtocart(pid){
        document.form1.productid.value=pid;
        document.form1.command.value='add';
        document.form1.submit();
    }
</script>
<form name="form1">
    <input type="hidden" name="productid" />
    <input type="hidden" name="command" />
</form>

    <TABLE BORDER=1 rules=rows width=100% CELLSPACING=0
CELLPADDING=5 BGCOLOR=#1e90ff ><tr><th colspan=11 scope=col align=left ><b><i>Ваша Корзина</b></i></th></tr>  
<TR BGCOLOR=#292929 align=left>
<td ALIGN=center><font color=#ffffff><b>№п/п</b></td>
<td ALIGN=center ><font color=#ffffff><b>Фирма</b></td>
<td ALIGN=center ><font color=#ffffff><b>Артикуль</b></td>
<td ALIGN=center ><font color=#ffffff><b>Наименование</b></td>
<td ALIGN=center ><font color=#ffffff><b>Цена, <br>грн</b></td>
<td ALIGN=center ><font color=#ffffff><b>Кол-во</b></td>
<td ALIGN=center ><font color=#ffffff><b>Сумма, <br>грн</b></td>
<td ALIGN=center ><font color=#ffffff><b>Опции</b></td>
</tr>

</tr>
        <?

                                               $id_us2
=($userdata['user_id']);
            
$result4=mysql_query("select * from fusion_user_order_shop WHERE id_us=$id_us2 ");
            while(
$row4=mysql_fetch_array($result4)){
$sum1+=$row4['sum_korz'];
$sumtotal+=$row4['kol_korz'];
$i+=1;
        
?>

<TR BGCOLOR=#292929  align=left rules=rows class=test>
                    <td width=5% ALIGN=center > <font color=#ffffff><b><?=$i?></b></td>
                    <td  ALIGN=center > <font color=#ffffff><?=$row4['firma_korz']?></td>
                    <td  ALIGN=center > <font color=#ffffff><?=$row4['artic_korz']?></td>
                    <td ALIGN=center > <font color=#ffffff><?=$row4['naimen_korz']?></td>
<td ALIGN=center > <font color=#ffffff><?=$row4['cena_korz']?></td>
<td ALIGN=center > <font color=#ffffff><?=$row4['kol_korz']?></td>
<td ALIGN=center > <font color=#ffffff><?=$row4['sum_korz']?></td>
                    <td ALIGN=center ><input type="button" value="Добавить" onclick="addtocart(<?=$row4['id_tovara']?>)" /><font color=#ffffff> 
<input type="checkbox" name="<?=$row4['id_tovara']?>" value="начальное_значение"></td>
                  

                <? }
                 

    
?>
<TR BGCOLOR=#292929  align=left rules=rows class=test>
<td width=5% ALIGN=center > <font color=#ffffff>Итого:</b></td>
                    <td  ALIGN=center ></td>
                    <td  ALIGN=center ></td>
                    <td ALIGN=center > </td>
                    <td ALIGN=center ></td>
                    <td ALIGN=center ><font color=#ffffff><b><?=$sumtotal?></b></td>                    
                    <td ALIGN=center > <font color=#ffffff><b><?=$sum1?>  грн.</td>
                    <td ALIGN=center > <font color=#ffffff></td></tr>


    </table>

<?

Вопрос такой как убрать кнопку добавить (<input type="button" value="Добавить" onclick="addtocart(<?=$row4['id_tovara']?>)" />)
И заменить ее на флажок checkbox
так чтоб потом была одна кнопка и при нажатии одной кнопки жаные переносились те что выдилены флажком?

  Ответить  
 
 автор: cheops   (02.02.2011 в 11:35)   письмо автору
 
   для: alex_fear   (02.02.2011 в 11:22)
 

Хм... просто уберите этот флажок (или действительно сделайте флажок добавления, если то имеет значения) а саму кнопку вынесите из цикла while(). Поставьте её перед строкой
<TR BGCOLOR=#292929  align=left rules=rows class=test>

Тогда у вас будет одна кнопка на все позиции, которые выводятся из базы данных.

  Ответить  
 
 автор: alex_fear   (02.02.2011 в 11:38)   письмо автору
 
   для: cheops   (02.02.2011 в 11:35)
 

А как так чтоб человек выбирал каие ему нужно?

  Ответить  
 
 автор: alex_fear   (02.02.2011 в 11:41)   письмо автору
 
   для: alex_fear   (02.02.2011 в 11:38)
 

Вынес из цыкла теперь вобще не переносятся данные так как они привязыны
<input type="button" value="1" onclick="addtocart(<?=$row4['id_tovara']?>)" />
$row4['id_tovara']-каждому свое значение!

  Ответить  
 
 автор: sim5   (02.02.2011 в 11:58)   письмо автору
 
   для: alex_fear   (02.02.2011 в 11:41)
 

Сначала бы не плохо разобраться с самой отправкой формы, она ведь у вас происходит по выбору, то есть сразу. А если случайно нажать? Вы этого не допускаете?

У каждого товара должен быть чекбокс со значением равным ID товара, а не именем как у вас, и кнопка отправки формы одна - submit, и не надо никаких JavaScript (ну если только для проверки). Вот так удобнее будет отмечать/разотмечать товар.

  Ответить  
 
 автор: alex_fear   (02.02.2011 в 12:12)   письмо автору
 
   для: sim5   (02.02.2011 в 11:58)
 

Понял! И еще такой вопрос! С этим флажком! Вобщем если флажок стоит то как записать даные об этом в базу данных! Функцией убдайт понятно но как определить что флажок включен под таким параметром?
<input type="checkbox" name="<?=$row4['id_tovara']?>" value="1">
и запрос в базу данных
UPDATE CLIENTS
SET `id_tovara` = $row4['id_tovara'] and `id_us`=0
WHERE status =1 ;
Если флажок установлен то в такое в такие поля обновить значение 1
Или как правильно!

  Ответить  
 
 автор: sim5   (02.02.2011 в 12:15)   письмо автору
 
   для: alex_fear   (02.02.2011 в 12:12)
 

Значит так - аторибуты name, id должны начанаться с буквы, а не цифры. Это раз.
Если вы хотите много чекбоксов и одну кнопку отправки, значит покупатель может выбрать у вас множество товаров. Это массив. И что вы получите на сервере, какой массив? Это два. Ответьте на этот вопрос себе сперва, потом только есть смысл говорить далее.

  Ответить  
 
 автор: cheops   (02.02.2011 в 12:19)   письмо автору
 
   для: sim5   (02.02.2011 в 12:15)
 

>Значит так - аторибуты name, id должны начанаться с буквы, а не цифры. Это раз.
Об валидности и рассовой чистоте HTML-кода пуская заботиться alex_fearпричем тогда, когда ему эта чистота потребуется - сейчас другая задача, что там в id_tovara мы знать не знаем (хотя и догадываемся).
>И что вы получите на сервере, какой массив?
А вот это дело.

  Ответить  
 
 автор: sim5   (02.02.2011 в 12:24)   письмо автору
 
   для: cheops   (02.02.2011 в 12:19)
 

Ну и надо заботиться об валидности, иначе, если понадобиться сервис на JS, проблем не избежать.

  Ответить  
 
 автор: elenaki   (02.02.2011 в 11:59)   письмо автору
 
   для: alex_fear   (02.02.2011 в 11:41)
 

функцию добавления в корзину надо делать в цикле до тех пор, пока есть выбранные чек-боксы

  Ответить  
 
 автор: sim5   (02.02.2011 в 12:06)   письмо автору
 
   для: elenaki   (02.02.2011 в 11:59)
 

И что он будет в цикле искать?

  Ответить  
 
 автор: cheops   (02.02.2011 в 12:12)   письмо автору
 
   для: alex_fear   (02.02.2011 в 11:38)
 

>А как так чтоб человек выбирал каие ему нужно?
Можно так
<input type="checkbox" name="<?=$row4['id_tovara']?>" />

  Ответить  
 
 автор: sim5   (02.02.2011 в 12:13)   письмо автору
 
   для: cheops   (02.02.2011 в 12:12)
 

Ну разве же так можно?

  Ответить  
 
 автор: cheops   (02.02.2011 в 12:14)   письмо автору
 
   для: sim5   (02.02.2011 в 12:13)
 

Почему бы нет?

  Ответить  
 
 автор: sim5   (02.02.2011 в 12:16)   письмо автору
 
   для: cheops   (02.02.2011 в 12:14)
 

Потому что не удобно для обработки на сервере, и протеворчит правилам.

  Ответить  
 
 автор: cheops   (02.02.2011 в 12:21)   письмо автору
 
   для: alex_fear   (02.02.2011 в 11:38)
 

>А как так чтоб человек выбирал каие ему нужно?
Исправьте так, sim5 дело советует
<input type="checkbox" name="<?php echo "chk".$row4['id_tovara']."[]" ?>" />

  Ответить  
 
 автор: alex_fear   (02.02.2011 в 12:34)   письмо автору
 
   для: cheops   (02.02.2011 в 12:21)
 

Люди я понял что это не по мне!!! Буду делать в сесиях!
Просто жалко что корзина удаляется после закрытия браузера((

  Ответить  
 
 автор: sim5   (02.02.2011 в 12:35)   письмо автору
 
   для: alex_fear   (02.02.2011 в 12:34)
 

Ничего вы не поняли, сессия или база, это вторично. У вас не верно выбрано указание ID товара.

  Ответить  
 
 автор: cheops   (02.02.2011 в 12:36)   письмо автору
 
   для: alex_fear   (02.02.2011 в 12:34)
 

Сессии это неплохо, но хорошо бы еще её содержимое сохранять в базу данных (если пользователь авторизован), а в следующий раз когда он приходит - вытаскивать содержимое корзины из базы данных в сессию и пусть дальше работает. При этом вовсе необязательно спрашивать пользователя что он хочет сохранить, а что нет - сохраняйте все подряд.

  Ответить  
 
 автор: alex_fear   (02.02.2011 в 12:41)   письмо автору
 
   для: cheops   (02.02.2011 в 12:36)
 

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

  Ответить  
 
 автор: elenaki   (02.02.2011 в 12:55)   письмо автору
 
   для: alex_fear   (02.02.2011 в 12:41)
 

может, лучше удалитьто, что НЕ нужно?

  Ответить  
 
 автор: sim5   (02.02.2011 в 12:57)   письмо автору
 
   для: alex_fear   (02.02.2011 в 12:41)
 

Вы думать будете или нет? Причем вообще место куда писать? Вы можете спокойно помещать выбор пользователя в сессию, что удобно, и одновременно записывать состояние корзины в ему в cookies, не трогая базу. Как только пользователь оформил заказ, удаляются cookies и сессия, а заказ переписывается в базу. А можете и базу использовать для временного хранения. Все, в этом плане проблем никаких. У вас проблемы с указанием id атрибутам чекбоска.

Есть два способа выбора товара - сколько угодно, или фиксированно. Если вы торгуете к примеру бублем, которые гум, то что для меня одна пачка, я может хочу у вас купить аж целых две. Уже даже в этом случае неудобно дважды скакать по выбору в вашем магазине, не говоря уже о том, что я захочу их купить 20 штук (ну вот такой прожорливый). Что вы в этом случае будете делать, оставите как есть, по одной штуке? Да я прокляну такой магазин.

А выход прост, для этого даем право выбирать количество товара, и делаем так:
<input name="cart[id товара]" />
и пользователь в этом поле может выбирать нужное количество товара. На сервере вы будет обрабатывать массив $_POST['cart'], ключами которого будут id товаров, а значения их количество.

У вас фиксированный выбор, одна штука, ну может вы Лексусы продаете, поэтому хватит. Теперь подумайте, разве удобно в вашем случае id-товара указывать атрибуту name (да еще с ошибками) а value количество равное 1? Нет, ибо вы и без этой единицы уже знаете, что пришедший id, это и есть 1, и записывать в базу заказ нужно только id, единичка как количество просто бессмысленна.
В вашем случае нужно указывать id товара атрибуту value чекбоска, это облегчит обработку массива, а имена чекбосков в этом случае должны быть такими: name[]. Все.

Вот над чем надо сразу думать, а не о сессиях.

  Ответить  
 
 автор: alex_fear   (02.02.2011 в 13:08)   письмо автору
 
   для: sim5   (02.02.2011 в 12:57)
 

Попробывал вот так
<input type="checkbox" name="<?php echo "chk".$row4['id_tovara']."[]" ?>" />
Все равно не хочет отправлять выбраное!
А колиство у меня при первом выборе товара выставляется!
Тут нужно решить проблему с отправкой выбраного галочкой!

  Ответить  
 
 автор: cheops   (02.02.2011 в 13:17)   письмо автору
 
   для: alex_fear   (02.02.2011 в 13:08)
 

>Все равно не хочет отправлять выбраное!
А в чем это проявляется?

  Ответить  
 
 автор: alex_fear   (02.02.2011 в 13:27)   письмо автору
 
   для: cheops   (02.02.2011 в 13:17)
 

Не передает данные на другую страницу!

  Ответить  
 
 автор: cheops   (02.02.2011 в 13:34)   письмо автору
 
   для: alex_fear   (02.02.2011 в 13:27)
 

У вас в коде наблюдается следующий фрагмент
<form name="form1"> 
    <input type="hidden" name="productid" /> 
    <input type="hidden" name="command" /> 
</form>

Последний </form> должен быть расположен после всех элементов управления (<input>), иначе они не будут участвовать в форме. Перенесите его вниз.

  Ответить  
 
 автор: alex_fear   (02.02.2011 в 13:42)   письмо автору
 
   для: cheops   (02.02.2011 в 13:34)
 

Вот сделал так

<TR BGCOLOR=#292929  align=left rules=rows class=test> 
                    <td width=5% ALIGN=center > <font color=#ffffff><b><?=$i?></b></td> 
                    <td  ALIGN=center > <font color=#ffffff><?=$row4['firma_korz']?></td> 
                    <td  ALIGN=center > <font color=#ffffff><?=$row4['artic_korz']?></td> 
                    <td ALIGN=center > <font color=#ffffff><?=$row4['naimen_korz']?></td> 
<td ALIGN=center > <font color=#ffffff><?=$row4['cena_korz']?></td> 
<td ALIGN=center > <font color=#ffffff><?=$row4['kol_korz']?></td> 
<td ALIGN=center > <font color=#ffffff><?=$row4['sum_korz']?></td> 
                    <td ALIGN=center ><font color=#ffffff>  
<input type="checkbox" name="<?php echo "chk".$row4['id_tovara']."[]" ?>" /></td> 
                  

                <? 
                  

    
?> 
<TR BGCOLOR=#292929  align=left rules=rows class=test> 
<input type="button" value="Добавить" onclick="addtocart(<?=$row4['id_tovara']?>)" />

Верно?

  Ответить  
 
 автор: cheops   (02.02.2011 в 14:07)   письмо автору
 
   для: alex_fear   (02.02.2011 в 13:42)
 

Да, верно, только добейтесь того, чтобы все эти <input>-ты были между тэгами <form> и </form>, иначе данные действительно не удастся отправить.

  Ответить  
 
 автор: alex_fear   (02.02.2011 в 16:53)   письмо автору
 
   для: cheops   (02.02.2011 в 14:07)
 

Буду пробывать!!

  Ответить  
 
 автор: sim5   (03.02.2011 в 10:15)   письмо автору
 
   для: alex_fear   (02.02.2011 в 16:53)
 

Как же вы не хотите понять, что у вас изначально заложена неверная логика добавления товара, уже в самой форме.

Вы хотите иметь множество товаров с выбором по чекбоксу - одну кнопку для отправки (об этом в самом начале темы у вас). Тем не менее, вы упорно этой кнопке добавляете id товара, не понятно зачем и для чего-то его дублируете еще в скрытом поле (вот зачем?), при этом форма сразу отправляется. Встает вопрос, а зачем чекбокс товару?

Вот вы можете обяснить логику вашего механизма?

  Ответить  
 
 автор: alex_fear   (04.02.2011 в 11:27)   письмо автору
 
   для: sim5   (03.02.2011 в 10:15)
 

Причем тут добавление!!
Это не добавление а сама процедура оформления!
Тут покупатель выбирает что ему заказать с выбраного а что оставить на потом!
Таесть это уже сама корзина!

  Ответить  
 
 автор: sim5   (04.02.2011 в 12:40)   письмо автору
 
   для: alex_fear   (04.02.2011 в 11:27)
 

Это не корзина, это у вас форма. Элементы полученные от формы, это уже массив. Вы же добавили id товара чекбоксу, и его еще передаете и в скрытый элемент формы посредством JavaScript, при этом (после передачи) сразу отправляется форма. А передаете вы этот id кнопкой.
Вопрос 1 - а зачем чекбокс тогда?

Вы в самом начале темы хотели множество чекбоксов (надо полагать для возможности выбора нескольких товаров), и одну конопку отправки формы (по логике вопроса вашего именно этого). Но при этом (получив одну кнопку) все оставили как есть.
Вопрос 2 - а зачем тогда выводить множество товаров с чекбоксом для каждого, если опять таки в скрытое поле попадает id одного товара?

Корзина, она на сервере, и это несколько другое, и ее вы здесь вооще не показывали. У вас в форме добавления товаров полнейший ужас:
1 - лишние и совсем ненужные элементы;
2 - совсем неоправданное применение JavaScript;
3 - неудобное именование (выбор атрибута) полей формы, которое усложняет, а не упрощает обработку добавления товаров в корзину.

Другими словами, вы не продумали свой механизм корзины, а смешали все в кучу.

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

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