PHP根据(按钮/链接)单击设置$ _SESSION变量值

时间:2017-11-03 12:37:17

标签: javascript php session

我有以下代码:

<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的{​​{1}}发送。{。} OR 根据当前点击的链接将类别编号值分配给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获取类别ID,而是通过上述任何方式将其发送到目标网页。

  • 3 个答案:

    答案 0 :(得分:1)

    解释解决方案:
    问题是我的函数中没有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 :(得分:0)

    将类别ID添加为数据属性,如下所示:

    <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>
    

    然后像这样处理点击事件以进行ajax调用(动态获取点击的类别链接&#39的网址及其ID):

    // 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;
            });
        })
    });
    

    这样,当您点击链接时(转到网址的默认操作不会运行)。代替; ajax POST请求首先点击url(在你的情况下总是index.php?page=quiz),当请求完成时,你被重定向到那个页面。

    答案 2 :(得分:0)

    如果num是您点击的类别,我认为它应该像:

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

    并在您的指数.php&#39;

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

    如果这不是&#39;工作,看看你的index.php会很有帮助。

    编辑:让我们尝试另一方......只是为了测试。

    创建一个名为getCatID.php的新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调用