PHP Установить значение переменной $ _SESSION в соответствии с (Button/Link) click

Вопрос:

У меня есть следующий код:

<ul>
<li>
<a href="index.php?page=quiz" class="cat" >
<h3>Category 1</h3>
<p>(explain here)</p>
</a>
</li>
<li>
<a href="index.php?page=quiz" class="cat" >
<h3>Category 2</h3>
<p>(explain here)</p>
</a>
</li>
</ul>

Мне нужно отправить номер категории на страницу index.php?page=quiz через $_POST или что-то еще, не отправив ее через $_REQUEST как этот index.php?page=quiz&cat=1
ИЛИ присваивая значение номера категории переменной $_SESSION соответствии с текущей ссылкой на ссылку, чтобы получить значение на целевой странице index.php?page=quiz.

Я уже пробовал это решение:

Через javascript, отправив значение переменной на страницу

var num=1; /*or put the current clicked category number */
$.ajax({
url: 'index.php?page=quiz',
type: 'post',
dataType: 'json',
data: {
category_no: num,
}
})

Кажется, что проблема с процессом отправки, и значение page=quiz не отправляется в пункт назначения, и мы все еще находимся на текущей странице, где page=home.

У вас есть полезные идеи?

ПРИМЕЧАНИЕ. Моя проблема заключается не в том, что идентификатор категории с текущего щелчка (кнопка/ссылка) на javascript отправляется на страницу назначения с любым из способов, упомянутых выше.

Лучший ответ:

Объяснение решения:
Проблема заключалась в отсутствии результатов exit() и json_encode() в моей функции, которые не могут быть применены внутри кода index.php страницы, что означает, что
вся функция должна быть перенесена в другой файл

проблема решена следующим образом:

my page:

<ul>
 <li>
  <a  href="" data-no="1" class="cat" >
    <h3>Category 1</h3>
    <p>(explain here)</p>
  </a>
 </li>
 <li>
  <a  href="" data-no="2" class="cat" >
    <h3>Category 2</h3>
    <p>(explain here)</p>
  </a>
 </li>
</ul>

JavaScript:

$('.cat').on('click', function (e) {
    // Prevent default action of link click
    e.preventDefault();
    var cat = $(this).data('no');
    var curr='set_var.php';
    $.ajax({
        url: curr,
        type: 'POST',
        dataType: 'json',
        data: {
            category: cat

        }
    }).done(function(res) {
            if (res.valid) {
            document.location.href = 'index.php?page=quiz';
        }
        });
});

set_var.php :

<?php 
session_start();
    if(isset($_POST['category'])){  
        $_SESSION['cat']=$_POST['category'];
        $result['valid'] = TRUE;
    }
    echo json_encode($result);
    exit();
 ?>

Спасибо за все ваши ответы

Ответ №1

Добавьте идентификатор категории как атрибут данных, например:

<ul>
<li>
<a data-category-id="1" href="index.php?page=quiz" class="cat" >
<h3>Category 1</h3>
<p>(explain here)</p>
</a>
</li>
<li>
<a  data-category-id="2" href="index.php?page=quiz" class="cat" >
<h3>Category 2</h3>
<p>(explain here)</p>
</a>
</li>
</ul>

Затем обработайте событие click таким образом, чтобы сделать ваш ajax-вызов (динамически получить URL-адрес ссылки на ссылку и его идентификатор):

// When page loads
$(document).ready(function()
{
// Handle category click event
$('a.cat').click(function(e)
{
// Prevent default action of link click
e.preventDefault();

// Get the url
var categoryUrl = $(this).prop('href');

// Get the category id
var categoryId = $(this).data('category-id');

// Make ajax call
$.ajax({
url: categoryUrl,
type: 'post',
dataType: 'json',
data: {
category_no: categoryId
}
})
.done(function() {
location.href = categoryUrl;
});
})
});

Таким образом, когда вы нажимаете ссылку (действие по умолчанию для перехода к URL не запускается). Вместо; запрос ajax POST выполняется сначала для URL-адреса (в вашем случае всегда index.php?page=quiz), и когда запрос завершается, вы перенаправляетесь на эту страницу.

Ответ №2

Если num — ваша выбранная вами категория, я думаю, что она должна работать так:

var num=1;
$.ajax({
url: 'index.php?page=quiz',
type: 'post',
dataType: 'json',
data: {
num,
}
});

И в вашем index.php:

session_start();
$_SESSION['catID'] = $_POST['num'];

Если это не работает, было бы полезно увидеть ваш index.php.

Edit: Давайте попробуем его с другой стороны.. просто для тестирования.

Создайте новый php с именем getCatID.php и измените AJAX на:

var num=1;

$.ajax({
url: 'getCatID.php',
type: 'post',
dataType: 'json',
data: {
num,
}
});
window.location = "index.php?page=quiz"

В getCatID.php:

<?php
session_start();
$_SESSION['catID'] = $_POST['num'];
?>

И в вашем index.php попробуйте

echo $_SESSION['catID'];

PS: Вам нужно вызвать вызов Ajax в пути

Оцените статью
TechArks.Ru
Добавить комментарий