|
|
|
| Здравствуйте. подскажите как это обыграть:
Есть главная форма а внутри ее есть еще одна форма которая удаляет товар по кнопке обращаясь к функции - понимаю что так нельзя - но как это обыграть( может как-нибудь можно реальзовать 2-ю форму ввиде ссылки):
<? session_start();
function remove_from_cart($delete_key) {
unset($_SESSION['product_id'][$delete_key]);
unset($_SESSION['product_price'][$delete_key]);
unset($_SESSION['product_count'][$delete_key]);
$_SESSION['prod_count']=$_SESSION['prod_count']-1;
sort($_SESSION['product_id']);
sort($_SESSION['product_price']);
sort($_SESSION['product_count']);
update_cart_sum();
}
if (isset($_POST['del_id'])) {
remove_from_cart($_POST['del_id']);
}
<form method="POST" onsubmit="return validar(this)" id="form1" action="ZakazOtpr.php">
............
............
...........
<form action="<?php echo $_SERVER['REQUEST_URI']?>" method="POST">
<td align=center>
<input type="hidden" value="<?php echo $i;?>" name="del_id" />
<input type="Submit" value="Удалить" />
</form>
............
............
...........
</form>
?>
|
| |
|
|
|
|
|
|
|
для: RuslanBLR
(26.12.2011 в 15:48)
| | Если я правильно прочел Ваши многоточия, то имеется в виду таблица некоего товару, где напротив каждого пункта стоит кнопка "удалить"?
Тогда поступите существенно прощще.
Вместо какой-то там формы с кнопкой просто нарисуйте ссылку
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $i;?>' title='удалить'>X</a>
|
А при загрузке скрипта проверяйте, если isset($_GET['action']), то удалять то, что надо (до вывода таблицы). | |
|
|
|
|
|
|
|
для: DJ Paltus
(26.12.2011 в 16:18)
| | Вы все правильно поняли.
у меня передается через POST - нечего страшного?
не удаляет товар! | |
|
|
|
|
|
|
|
для: RuslanBLR
(26.12.2011 в 16:27)
| | Передача данных из формы через "пост" ничем не мешает передавать данные и через адресную строку, в "гет". Если не удаляет, то вероятно при обработке запроса что-то не то.
давайте только немного упростим, я чего-то загнался:
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?delete=<?php echo $i;?>' title='удалить'>X</a>
|
Соответственно, проверяем на наличие $_GET['delete'] и удаляем элемент с id=$_GET['delete']. | |
|
|
|
|
|
|
|
для: DJ Paltus
(26.12.2011 в 16:32)
| | когда поменял с POST на GET то товар удалился - но возникло 2 ошибки:
1. товар который остался не удаленным - перестал показывать картинку которая загружается из БД и др. данные
2. после удаления - нажимаю - обновить страницу - следующий товар тоже удалился
<?
if (isset($_GET['del_id'])) {
remove_from_cart($_GET['del_id']);
}
?> | |
|
|
|
|
|
|
|
для: RuslanBLR
(26.12.2011 в 16:36)
| | У вас что, при удалении товара его ID в корзине передается какому-то другому? Ну, и чего же тогда желать?
Немного иначе стоит подходить к такому делу.
В сессии для корзины хранить список уникальных ID товаров, отобранных покупателем. Соответственно и удалять на основании уникальных. И тогда при обновлении страницы после удаления позиции из корзины функция удаления попросту не найдет, чем поживиться, и успокоится. Ну а насчет изображений, думаю, на том же принципе разберетесь. | |
|
|
|
|
|
|
|
для: DJ Paltus
(26.12.2011 в 16:46)
| | подскажите что я не так делаю!
вот вывожу дамп SESSION и POST корзины (то что поступает в карзину):
<?
Array
(
[prod_count] => 3
[product_id] => Array
(
[0] => 1
[1] => 2
[2] => 14
)
[product_price] => Array
(
[0] => 50000
[1] => 100000
[2] => /
)
[product_count] => Array
(
[0] => 1
[1] => 1
[2] => 1
)
)
?>
|
POST пустой - так как кнопка удаления не одна не нажата:
Когда нажимаю удалить - передает: удаляю товар с id=2, а удаляет товар с id=14
<?
Array
(
[prod_count] => 2
[product_id] => Array
(
[0] => 1
[1] => 2
)
[product_price] => Array
(
[0] => 50000
[1] => 100000
)
[product_count] => Array
(
[0] => 1
[1] => 1
[2] => 1
)
[sum] => 0
[cart_sum] => 150000
)
Array
(
[action] => delete
[del_id] => 2
)
?>
|
вот что я пишу в корзине:
<? session_start();
function remove_from_cart($delete_key) {
unset($_SESSION['product_id'][$delete_key]);
unset($_SESSION['product_price'][$delete_key]);
$_SESSION['prod_count']=$_SESSION['prod_count']-1;
update_cart_sum();
}
if (isset($_GET['del_id'])) {
remove_from_cart($_GET['del_id']);
}
?>
|
ссылка удаления:
<?
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $_SESSION[product_id][$i];?>' title='удалить'>удалить</a>
?>
|
| |
|
|
|
|
|
|
|
для: RuslanBLR
(27.12.2011 в 11:43)
| | Оно всё правильно делает. Любезный, у Вас под индексом "2" находится товар с каким ID? С 14-м! Если надо опираться на другое число, так и подставляйте его в ссылку вместо $_SESSION[product_id][$i]. Не из того кармана, в общем, семечки таскаете. | |
|
|
|
|
|
|
|
для: DJ Paltus
(27.12.2011 в 12:26)
| | я же не опираюсь на индекс массива а на код товара - я подразумеваю под id=2 кодтовара, а у он у меня берет по индексу массива. Как сделать то???? помогите пожалуйсто!!!!!! | |
|
|
|
|
|
|
|
для: DJ Paltus
(27.12.2011 в 12:26)
| | подскажите как написать чтобы значение передаваемое через ссылку - было индексом массива товара, а то у меня передает номер товара???? | |
|
|
|
|
|
|
|
для: DJ Paltus
(27.12.2011 в 12:26)
| | Извините, я понял. Подскажите от чего когда я удаляю - как вы говорите у меня индекс удаляемого товара в цикле передается следующему товару??? как это устранить??? | |
|
|
|
|
|
|
|
для: RuslanBLR
(27.12.2011 в 16:37)
| | Это не устранять надо, а исправлять.
Нахрена в корзине вообще лишние ID? У товара уже есть, зачем городить вложенность лишнюю? Есть уже у них уникальные номера, сделайте так, чтобы товар в корзине имел только один - свой ID. 1, 2, 14, а не 0, 1, 2. | |
|
|
|
|
|
|
|
для: DJ Paltus
(27.12.2011 в 17:08)
| | у меня вроде так и есть - id товара из БД а 0 1 2 3 и т.д. это индекс в массиве (счетчик), т.е:
index это [n] , а 1....n это id товара
[0] => 1
[1] => 2
[2] => 3
[3] => 4
или так не правильно? я не могу понять - простите!!!! | |
|
|
|
|
|
|
|
для: RuslanBLR
(27.12.2011 в 17:16)
| | Вот. Вотвотвотвотвоот.
На кой леший этот счетчик? Если Вы мне это сумеете объяснить, то или у меня, или у Вас случится просветление. Сатори. А следующие Ваши 4 комментария я читать не стану, потому что многовато информации ради плёвого дела. | |
|
|
|
|
|
|
|
для: DJ Paltus
(28.12.2011 в 00:01)
| | я не понимаю - что значит зачем счетчик, а как я положу несколько товаров?
вот как я передаю товар в корзину:
<? session_start();
function addtocart($product_id, $product_price) {
if(is_array($_SESSION['product_id']) && in_array($product_id, $_SESSION['product_id'])){
echo "<p class=contGLAV2><font color=#BEBEBE><strong>товар уже есть в корзине</font></strong></p>";
}
else
{
$_SESSION['prod_count']++;
$incart=$_SESSION['prod_count'] - 1;
$_SESSION['product_id'][$incart] = $product_id;
$_SESSION['product_price'][$incart] = $product_price;
$_SESSION['product_count'][$incart] = 1;
}
}
?>
|
Первая строчка $_SESSION['prod_count']++ добавляет единицу к переменной $_SESSION['prod_count'], которая представляет собой счетчик товаров в корзине.
$incart=$_SESSION['prod_count']-1 – индекс массива, содержащего информацию о продукте в корзине. $_SESSION['product_id'][$incart] – идентификатор продукта, $_SESSION['product_price'][$incart] – цена продукта, $_SESSION['product_count'][$incart] – количество единиц продукта в корзине.
почему я не правильно делаю???
вывод из БД:
<?
if(!empty($_POST)){
addtocart($_POST["product_id"],$_POST["product_price"]);
}
include "setup/options.php";
if(!mysql_connect($host,$USER,$PASSWD)) exit(@mysql_error());
if(!mysql_select_db($DB)) exit(@mysql_error());
$r = mysql_query("SELECT * FROM CLIPS WHERE kod = {$_GET['kod']}");
$page = "<form id='form1' name='form1' method='post' action='{$_SERVER["REQUEST_URI"]}'>";
while($f = mysql_fetch_array($r)){
$page .= "<table border=1 width=100%>
<tr><td align=center bgcolor=#000000><font color=white>код: {$f['kod']}</font></td>
<td align=center bgcolor=#000000><font color=white>место установки:</font></td>
<td align=center bgcolor=#000000><font color=white>тип: {$f['tip']}</font></td></tr>
<tr><td width=5% align=left bgcolor=#FFFFFF height=5px><img src='clips/{$f['image']}' width=120px height=120px></td>
<td align=center>{$f['setup']}</td><td width=120px height=120px>картинка</td></tr>
<tr><td align=center bgcolor=#000000><font color=white>OEM:</font></td>
<td align=center bgcolor=#000000><font color=white>марка автомобиля:</font></td>
<td align=center bgcolor=#000000><font color=white>размеры:</font></td></tr>
<tr><td bgcolor=#E8E8E8 align=center>{$f['original']}</td>
<td align=center>{$f['marka']}</td>
<td>T= {$f['T']} <br>H= {$f['H']}<br>F= {$f['F']}<br>D= {$f['D']}<br>T1= {$f['T1']}<br>
T2= {$f['T2']}<br>L= {$f['L']}<br>G= {$f['G']}<br>S1= {$f['S1']}<br>S= {$f['S']}<br>
S min= {$f['Smin']}<br>S max= {$f['Smax']}</td></tr></table><br>
<p class=contGLAV2><strong>Цена: {$f['price']} бел.руб.</strong></p>
<input type=hidden name='product_price' value=".$f[price]." />
<input type=hidden name='product_id' value=".$f[id]." />
<input type=hidden name='tocart' value=tocart />
<table border=0 width=100%><tr><td align=center>
<input type=submit name='sub' value='В корзину' id='korz' />
</td></tr></table>";
$f['price']=$_SESSION['price'];
echo "$f[price]";
}
$page .= "</label></form>";
echo $page;
?>
|
| |
|
|
|
|
|
|
|
для: RuslanBLR
(28.12.2011 в 11:29)
| | А как у Вас схема работает, если покупатель например добавил одну позицию в корзину, а потом решил еще раз добавить ту же позицию в корзину? Или у Вас можно только по одной позиции каждого товара в корзину класть? | |
|
|
|
|
|
|
|
для: DJ Paltus
(27.12.2011 в 17:08)
| | может у меня в коде ошибка - посмотрите пожалуйсто!!!!
........
.......
.......
<?php
include "setup/options.php";
if(!mysql_connect($host,$USER,$PASSWD)) exit(@mysql_error());
if(!mysql_select_db($DB)) exit(@mysql_error());
for ($i=0; $i<$_SESSION['prod_count']; $i++) {
/* получаем информацию о товаре из базы данных */
$q="SELECT * FROM CLIPS WHERE id='".$_SESSION[product_id][$i]."'";
$query=mysql_query($q);
$prod_in_cart=mysql_fetch_assoc($query);
?>
<tr>
<td align=center><? echo "$prod_in_cart[kod]"; ?></td>
<td align=center><img src='clips/<?php echo $prod_in_cart['image'] ;?>' width=50px height=50px></td>
<td align=center>
<input type="text" name="kol[<?=$prod_in_cart['id'];?>]" size="3" value="" /></td>
<td align=center><?php echo $_SESSION['product_price'][$i];?></td>
<td align=center>
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $i;?>' title='удалить'>удалить</a>
</td>
</tr>
<?php
}
?>
|
| |
|
|
|
|
|
|
|
для: DJ Paltus
(27.12.2011 в 17:08)
| | как я понимаю - проблема в следуйщем. Происходит так: когда я удаляю товар, товар удаляется и его индекс как то переходит следующему товару, но когда я отслеживаю дамп массива - то там все нормально - удаляет только тот товар который я нажал удалить! Типа того - могу немного ошибатся.
Поэтому надо удалять не по индексу товара а по его id. Но у меня не получается этого сделать! | |
|
|
|
|
|
|
|
для: DJ Paltus
(27.12.2011 в 17:08)
| | когда я делаю так: то передается id товара
<?
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $_SESSION[product_id][$i];?>' title='удалить'>удалить</a>
?>
|
но удаление происходит по индексу
<?
function remove_from_cart($delete_key) {
unset($_SESSION['product_id'][$delete_key]);
unset($_SESSION['product_price'][$delete_key]);
$_SESSION['prod_count']=$_SESSION['prod_count']-1;
update_cart_sum();
}
if (isset($_GET['del_id'])) {
remove_from_cart($_GET['del_id']);
}
?>
|
как заменить эту строку - чтобы она брала не индекс товара а id товара?
<?
unset($_SESSION['product_id'][$delete_key]);
?>
|
| |
|
|
|
|
|
|
|
для: RuslanBLR
(27.12.2011 в 17:45)
| | если так - это полный бред: или я ошибаюсь
<?
unset($_SESSION['product_id'][$i][$delete_key]);
?>
|
| |
|
|
|
|
|
|
|
для: RuslanBLR
(27.12.2011 в 17:45)
| | как вариант:
<?
foreach ($_SESSION['product_id'] as $key=>$value) {
if ($value == $delete_key) {
unset($_SESSION['product_id'][$key]);
unset($_SESSION['product_price'][$key]);
unset($_SESSION['product_count'][$key]);
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(28.12.2011 в 11:08)
| | спасибо - вроде все хорошо - с массива удаляет, но поля удаляемого товара остаются ну а значения удалены. Почему поля не удалило? Может не правильно записал что?:
правильно ли я записал?
<?
function remove_from_cart($delete_key) {
foreach ($_SESSION['product_id'] as $key=>$value) {
if ($value == $delete_key) {
unset($_SESSION['product_id'][$key]);
unset($_SESSION['product_price'][$key]);
unset($_SESSION['product_count'][$key]);
}
}
}
if (isset($_GET['del_id'])) {
remove_from_cart($_GET['del_id']);
}
?>
|
передаю что удалить:
<?
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $_SESSION[product_id][$i];?>' title='удалить'>удалить</a>
?>
|
| |
|
|
|
|
|
|
|
для: RuslanBLR
(28.12.2011 в 12:01)
| | Какие поля не удалило? У Вас обновление страницы происходит по ссылке на удаления из корзины? Если да, то сначала удаляйте позицию из корзины, а потом вывод самой страницы делайте. | |
|
|
|
|
|
|
|
для: Lotanaen
(28.12.2011 в 12:25)
| | не удалило поля из таблицы. из массива товар удалило с этим все отлично - спасибо еще раз большое!! у меня ссылка и ссылается на эту же страницу - разве она не должна удалить поля товара из таблицы -товар же уже удален. Извините немного не понял. Вот мой вывод:
<? session_start();
function remove_from_cart($delete_key) {
foreach ($_SESSION['product_id'] as $key=>$value) {
if ($value == $delete_key) {
unset($_SESSION['product_id'][$key]);
unset($_SESSION['product_price'][$key]);
unset($_SESSION['product_count'][$key]);
}
}
}
if (isset($_GET['del_id'])) {
remove_from_cart($_GET['del_id']);
}
<div class="content">
<br>
<table border=1 width=100%>
<tr><td align=center bgcolor=#000000><font color=white>код</font></td><td bgcolor=#000000><font color=white></font></td><td align=center bgcolor=#000000><font color=white>количество</font></td><td bgcolor=#000000 align=center><font color=white>цена за шт</font></td><td bgcolor=#000000 align=center><font color=white>удалить товар</font></td></tr>
<?php
include "setup/options.php";
if(!mysql_connect($host,$USER,$PASSWD)) exit(@mysql_error());
if(!mysql_select_db($DB)) exit(@mysql_error());
for ($i=0; $i<$_SESSION['prod_count']; $i++) {
/* получаем информацию о товаре из базы данных */
$q="SELECT * FROM CLIPS WHERE id='".$_SESSION[product_id][$i]."'";
$query=mysql_query($q);
$prod_in_cart=mysql_fetch_assoc($query);
?>
<tr>
<td align=center><? echo "$prod_in_cart[kod]"; ?></td>
<td align=center><img src='clips/<?php echo $prod_in_cart['image'] ;?>' width=50px height=50px></td>
<td align=center>
<input type="text" name="kol[<?=$prod_in_cart['id'];?>]" size="3" value="" /></td>
<td align=center><?php echo $_SESSION['product_price'][$i];?></td>
<td align=center>
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $_SESSION[product_id][$i];?>' title='удалить'>удалить</a>
</td>
</tr>
<?php
}
?>
</table>
?>
|
| |
|
|
|
|
|
|
|
для: RuslanBLR
(28.12.2011 в 12:36)
| | вот этот фрагмент :
for ($i=0; $i<$_SESSION['prod_count']; $i++) {
/* получаем информацию о товаре из базы данных */
$q="SELECT * FROM CLIPS WHERE id='".$_SESSION[product_id][$i]."'";
|
замените на :
foreach ($_SESSION[product_id] as $key=>$value) {
/* получаем информацию о товаре из базы данных */
$q="SELECT * FROM CLIPS WHERE id='".$value."'";
|
а еще лучше в один запрос к БД загнать все ИД товара и затем по циклу выводить:
<?php
include "setup/options.php";
if(!mysql_connect($host,$USER,$PASSWD)) exit(@mysql_error());
if(!mysql_select_db($DB)) exit(@mysql_error());
if (sizeof($_SESSION['product_id'])) {
/* получаем информацию о товаре из базы данных */
$q="SELECT * FROM CLIPS WHERE id in (".implode(",",$_SESSION['product_id']).");";
$query=mysql_query($q);
while ($prod_in_cart=mysql_fetch_array($query)) {
?>
<tr>
<td align=center><? echo "$prod_in_cart[kod]"; ?></td>
<td align=center><img src='clips/<?php echo $prod_in_cart['image'] ;?>' width=50px height=50px></td>
<td align=center>
<input type="text" name="kol[<?=$prod_in_cart['id'];?>]" size="3" value="" /></td>
<td align=center><?php echo prod_in_cart['product_price'];?></td>
<td align=center>
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $prod_in_cart['id'];?>' title='удалить'>удалить</a>
</td>
</tr>
<?php
}
}
else
echo "Корзина пуста!";
?>
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(28.12.2011 в 12:57)
| | ОГРОМНОЕ ВАМ СПАСИБО!!!!!!!! СПАСИБО!!!!!!!!!!! СПАСИБО ЗА ТЕРПЕНИЕ!!!!!!!!! | |
|
|
|
|
|
|
|
для: RuslanBLR
(28.12.2011 в 13:18)
| | Да... в Вашей функции удаления позиции перед foreach делайте проверку на существования массива например так:
function remove_from_cart($delete_key) {
if (sizeof($_SESSION['product_id'])) {
foreach ($_SESSION['product_id'] as $key=>$value) {
if ($value == $delete_key) {
unset($_SESSION['product_id'][$key]);
unset($_SESSION['product_price'][$key]);
unset($_SESSION['product_count'][$key]);
return true;
}
}
return false;
}
else
return false;
}
|
| |
|
|
|