【问题标题】:How to filter results based on session variable php如何根据会话变量php过滤结果
【发布时间】:2013-10-31 02:03:33
【问题描述】:

这给我带来了很长一段时间的问题。任何帮助将不胜感激!

我有一个 php 页面,负责显示我从数据库请求的信息。我在页面上有几个按钮,它们指示什么时间将显示什么结果。我有一个获取下一条记录的前进箭头,我有一个获取上一条记录的后退箭头,然后我有一个过滤器按钮,我试图通过它过滤我的结果。

PHP 主页面

<?php
session_start();
?>
<html>
<head>

 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
 <script type="text/javascript">var mysess = <?php echo $_SESSION['verticalsess'] ?>;</script>
 <script type="text/javascript" src="/getresults_ab_drastic_display.js">       </script>
 <?php include("/connect.php"); ?>
 </head>

<body>
 //content
</body>
</html>


//getresults_ab_display.js
您会注意到这个 JS 调用了另一个 PHP 文件,该文件将结果返回到原始 PHP 文件。一个功能是转发结果,一个功能是以前的结果,另一个是根据主 php 页面上的下拉菜单设置过滤器。

$number = 1;
$(function(){
  $('#showMore').click(function(event) {
     event.preventDefault();


    $.ajax({
       type: "POST",
       url: "/getNext.php",
       data: {"count":$number, vertical: mysess},

       success: function(results){
         $('#results').html(results);
         $number++;
       }
     });

  });

});

$(function(){
  $('#showLess').click(function(event) {
     event.preventDefault();

    $.ajax({
       type: "POST",
       url: "/getNext.php",
       data: {"count":$number, vertical: mysess},
       success: function(results){
         $('#results').html(results);
         $number--;
       }
     });

  });

});

$(function(){
  $('#Filter').click(function(event) {
    event.preventDefault();

    $.ajax({
       type: "POST",
       url: "/getNext.php",
       data: {vertical: $('#vertical').val(), pagetype: $('#pagetype').val(), primarykpitype: $('#primarykpitype').val(), count:$number},
       success: function(results){
         $('#results').html(results);
       }
     });

  });

});


//getnext.php
此 getnext 查找从 js 文件传递​​的信息并将适当的结果发送回。

session_start();
$_SESSION['verticalsess'] = $_POST['vertical'];

$pstcnt = $_POST['count'];


 if ((isset($_POST['count'])) && $_SESSION['verticalsess'] = "null")
 {
  $sql = "SELECT * FROM experiments LIMIT $pstcnt,1";
  }
  else{
  $sql = "SELECT * FROM experiments WHERE vertical = '" . $_SESSION['verticalsess'] . "' LIMIT $pstcnt,1"; 
  }

 //my output
 ...

我的问题

当我单击过滤器按钮时,它应该将“垂直”发送到我的 getnext php 文件,并且 a)将会话变量设置为该值,b)返回包含与该垂直相关的结果,但是第一次过滤器按钮是单击后,它将传递垂直值并将会话变量设置为等于该值,但是当我单击获取下一条记录按钮时,会话的值为空......总是。因此,由于某些奇怪的原因,在第一次设置会话并将结果显示到屏幕后,当我想显示下一条记录时,mysess 设置为 null。

我在这里做错了什么?

【问题讨论】:

    标签: javascript php jquery mysql session


    【解决方案1】:

    在 //getnext.php

    $_SESSION['verticalsess'] = "null" ??

    我觉得应该是

    $_SESSION['verticalsess'] == "null"

    试试看效果如何

    【讨论】:

    • 不,这没有帮助,但还是谢谢。我认为这与我的#showmore 或#showless 函数有关。就像我说的,我第一次使用过滤器时设置了垂直,但是当我单击 showmore 按钮并将下一个结果发送回页面时,mysess var 设置为 null 而不是保留垂直的值。 ..
    • 当你设置过滤器并将它发送到getnext.php时,你也应该将mysess设置为过滤器值。
    • mysess 应设置为会话变量 ($_SESSION['verticalsess']),并在单击我的过滤器按钮时将会话变量设置为“垂直”。同样,问题似乎是当我单击 showmore 按钮并 getnext.php 返回结果时,会话变量并不总是被返回......
    • 由于您使用的是AJAX,所以您没有刷新页面,当PHP解析您的主PHP页面时,mysess已设置,并且在$_SESSION更改时不会更改。
    【解决方案2】:

    首先,您的 SQL 中有一个巨大的安全漏洞。您没有对传递给数据库的任何内容进行消毒。转义您的数据或使用准备好的语句。

    其次,在 Javascript 中使用 $ 是个坏主意,尤其是在加载了 jQuery 的情况下。因此,将$number 更改为number 以提高可读性。

    第三...mysess的初始值是多少?如果我第一次访问此页面,您将其设置为等于似乎未定义的会话变量。我至少希望看到类似的东西

    session_start();
    if(!isset($_SESSION['verticalsess'])) $_SESSION['verticalsess'] = 'somevalue';
    

    【讨论】:

    • 欣赏要考虑的事情,我会调查的。至于 mysess,它最初设置为 null。过程是,页面加载,值为null,然后我使用下拉菜单并单击过滤器按钮。这会将“垂直”传递给我的 php 页面并将该值分配给 $_SESSION['verticalsess']。我的具体问题是,在我使用过滤器之后,$_SESSION['verticalsess'] 应该本质上更新自身以存储 'vertical' 的值,但这并没有发生......
    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2013-09-29
    • 1970-01-01
    相关资源
    最近更新 更多