2016-07-26 4 views
0

Читайте много о сеансах и о том, как добавлять и удалять элементы. Я вижу, что есть много способов сделать это. У меня такая же проблема.Устранение сеанса удаляет все сохраненные объекты

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

Это моя проблема, я надеюсь, что смогу объяснить это, чтобы вы могли понять.

Скажем, у меня есть магазин, который продает футболки и брюки. Когда я сохраняю элемент t-hirt в своей корзине, он отображает его так, как должен. Но я не могу удалить элемент. Если я затем отфильтрую свою страницу для скобок (это вызывает событие AJAX) и попробуйте удалить футболку, элемент будет удален. Но ВСЕ элементы удаляются не только тот, на который я нажимал, чтобы удалить.

Вот мой HTML, чтобы добавить продукт:

<button type="submit" 
    class="btn btn-primary text-right add-product showtoast" 
    data-target="post-<?php the_ID(); ?>" 
     data-attribute="<?php the_title(); ?>" 
     data-product="<?php the_title(); ?>"> 
     Add to cart 
</button> 

И это HTML, чтобы удалить элемент:

<div class="echo-product"> 
    <?php echo htmlspecialchars($product); ?> 
    <input type="submit" class="delete-product" value="Remove"> 
</div> 

Это мои Javascripts для добавления и удаления элементов:

$('.add-product').click(function() { 
    var productName = $(this).data('product'); 
     $.post('http://example.com/reload.php?addparam', 
     {productName: productName}, function(data) { 
      $('.txtHint').html(data); 
    }) 
}); 

$('.delete-product').click(function() { 
    var productName = $(this).data('product'); 
     $.post('http://examples.com/reload.php?delparam', 
     {productName: productName}, function(data) { 
      $('.txtHint').html(data); 
    }) 
}); 

И последнее, но не менее важное: мой сценарий reload.php:

<?php 

session_start(); 

if (!array_key_exists('products', $_SESSION) || !is_array($_SESSION['products'])) { 
    $_SESSION['products'] = []; 
} 

$productName = array_key_exists('productName', $_POST) ? (string) $_POST['productName'] : ''; 

if(isset($_GET['delparam'])){ 
    unset($_SESSION['products'][$productName]); 
} 
if(isset($_GET['addparam'])){ 
    $_SESSION['products'][] = $productName; 
} 
?> 

    <?php foreach ($_SESSION['products'] as $product): ?> 
     <div class="echo-product"> 
      <i style="color:#F60;padding-right:20px;" class="fa fa-anchor" aria-hidden="true"></i> 
      <?php echo htmlspecialchars($product); ?> 
      <input type="submit" class="delete-product" value="Remove"> 
     </div> 
    <?php endforeach;?> 

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

Спасибо!

+1

кнопка 'delete-product' не имеет атрибутов данных, поэтому' var productName' будет пустым в '('.delete-product'). Click (function() {}' – Steve

+0

Хотелось бы, чтобы я понял, что вы говорите, но я этого не делаю. Можно ли легко сказать, что вы говорите? @Steve – Steggie

+0

@Steve Вы имеете в виду это: '$ ('. delete-product'). click (function() { \t вар ProductName = NULL; \t \t $ .post ('http://example.com/reload.php?delparam', {ProductName: PRODUCTNAME}, функция (данные) { \t \t \t $ ('txtHint') .html (данные); \t}) }) ; ' – Steggie

ответ

0

Сравните, как продукты добавляются против, как они будут удалены

if(isset($_GET['delparam'])){ 
    unset($_SESSION['products'][$productName]); 
} 
if(isset($_GET['addparam'])){ 
    $_SESSION['products'][] = $productName; 
} 

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

При удалении продукта вы ищете имя продукта как индекс - но этого не существует!

Я уверен, что он не отвечает, почему все продукты удалены, но это может помочь сделать все правильно.

+0

Добавление продуктов выполняется в массиве вправо? С' [] '. Так что мне нужно сделать то же самое с удалением?' unset ($ _ SESSION [' продукты]] [] [$ productName]); '. Но при этом не добавляются какие-либо продукты. @Lars Stegelitz – Steggie

+0

' $ _SESSION ['products'] [$ productName] = $ productName; ' –

+0

' unset ($ _ SESSION ['products'] [$ productName] = $ productName;); 'Like this? – Steggie