Читайте много о сеансах и о том, как добавлять и удалять элементы. Я вижу, что есть много способов сделать это. У меня такая же проблема.Устранение сеанса удаляет все сохраненные объекты
Я надеюсь, что кто-то здесь может помочь мне с этим. Я прошел путь от никуда, где я сейчас с помощью этого сообщества (спасибо!).
Это моя проблема, я надеюсь, что смогу объяснить это, чтобы вы могли понять.
Скажем, у меня есть магазин, который продает футболки и брюки. Когда я сохраняю элемент 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 должно произойти, прежде чем я смогу удалить элементы. И почему он удаляет ВСЕ элементов, когда я просто нажимаю на один элемент?
Спасибо!
кнопка 'delete-product' не имеет атрибутов данных, поэтому' var productName' будет пустым в '('.delete-product'). Click (function() {}' – Steve
Хотелось бы, чтобы я понял, что вы говорите, но я этого не делаю. Можно ли легко сказать, что вы говорите? @Steve – Steggie
@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