2013-12-05 3 views
3

Я пытаюсь разрешить пользователям добавлять/удалять элементы из корзины покупок, просто щелкнув изображение. Я также хочу, чтобы изображение изменялось по щелчку, чтобы показать, сколько из этого элемента было куплено.Обновление переменной php Session при переключении изображений

Наконец, я хочу, чтобы тележка существовала на отдельной вкладке той же страницы.

То, что я до сих пор:

<?php session_start(); ?> 
... 
... 
<div style="display: block; width:1024px;"> 
<img id="image_id" src="image.png" width="110" height="110" style="margin-left:40px";> 
<script> 

$('#image_id').toggle(
    function() { 
     $(this).attr('src','image1.png'); 
     <?php $_SESSION['cart']['image_id'] = 1; ?> 
    }, 
    function() { 
     $(this).attr('src','image2.png'); 
     <?php $_SESSION['cart']['image_id'] = 2; ?> 
    }, 
    function() { 
     $(this).attr('src','image3.png'); 
     <?php $_SESSION['cart']['image_id'] = 3; ?> 
    }, 
    function() { 
     $(this).attr('src','image.png'); 
    <?php// $_SESSION['cart']['image_id'] = 0; ?> 
    } 
); 
</script> 
... 
... 
</div> 

<!-- Cart Tab --> 

<div id="tab4" style="display:none; width:1024px; padding-top:40px;"> 

<table border="1"> 
<tr> 
<th>Name</th> 
<th>Price</th> 
<th>Quantity</th> 
<th>Total</th> 
</tr> 

<?php 
    if($_SESSION['cart']) { 
     foreach($_SESSION['cart'] as $itemname => $quantity) 
     { 
      if($quantity == 0) continue; 
      $price = $_SESSION['items'][$itemname]; 
      $prod = $price*$quantity; 
      $_SESSION['total'] += $prod; 
      echo "<tr>"; 
      echo "<td>" . $itemname . "</td>"; 
      echo "<td>" . $price . "</td>"; 
      echo "<td>" . $quantity . "</td>"; 
      echo "<td>" . $prod . "</td>"; 
      echo "</tr>"; 
     } 
     echo "<tr>"; 
     echo "<td></td>"; 
     echo "<td></td>"; 
     echo "<td></td>"; 
     echo "<td>" . $_SESSION['total'] . "</td>"; 
     echo "</tr>"; 
     echo "</table>"; 
    }  
?> 

<a href="#tab1">Continue Shopping</a> 

</div> 

Проблема у меня в том, что изображение меняется правильно (меняется только тогда, когда я нажимаю его и переключает через четыре различных изображений), но при просмотре содержимое корзины, оно не меняется. Он выполняет все 4 заявления php немедленно. Я знаю, потому что, если я удалю последний тумблер (где я сброшу количество до 0) и просмотрю тележку, он уже показывает, что у меня есть 3 предмета, которые нужно приобрести, прежде чем я даже кликнуть один раз.

Любая помощь будет оценена по достоинству. Я предполагаю, что я мог бы также создать изображения как входные данные формы или гиперссылки, которые выполняют скрипт при щелчке, но я пробовал оба подхода без везения.

Заранее спасибо.

+3

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

+1

Также вы можете подумать о том, чтобы понять разницу между технологиями клиентских и серверных сторон. Altogther – hammus

ответ

0

Javascript выполняется в браузере, а php выполняется на сервере, прежде чем страница будет обслуживаться пользователем.

Ваши PHP-фрагменты не выполняются при вызове javascript, скорее они выполняются на сервере, прежде чем пользователь даже увидит страницу.

Вместо того чтобы помещать PHP-код непосредственно в функции javascript, вам необходимо использовать вызов AJAX, который отправляет запрос на сервер.

Это говорит о том, что в данном конкретном случае лучше хранить данные о корзине в куки, а не в сеансе.

+0

Я переместил PHP-код в отдельный файл, и теперь я попробовал как XMLHttpRequest.open («GET», «updatecart.php? Action = add & id = 1», true) и $ .ajax ({url : "updatecart.php? action = add & id = 1", data: "", dataType: 'json'}) в качестве замены для замены в точке переключения, но ни один из них не работает вообще. Я все еще что-то пропустил? Где эти вызовы должны идти, если я хочу, чтобы они выполнялись при каждом нажатии? Функция переключения кажется только способной обновлять атрибуты изображения, которое вы переключаете, и не может ничего понять. – user3068438

+1

вы должны поместить их в обработчик кликов, если вы хотите, чтобы их вызывали при каждом щелчке по изображениям (вы можете использовать метод jQuery .click() jQuery). – Thayne

+0

Удивительно, что сработало. Спасибо. – user3068438

Смежные вопросы