如何根据会话变量php过滤结果

时间:2013-10-30 16:49:22

标签: javascript php jquery mysql session

这已经给了我很长一段时间的问题了。任何帮助都将非常感激!

我有一个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文件发送'vertical'并且a)将会话变量设置为该值并且b)返回包含与该垂直相关的结果,但是第一次过滤器按钮是单击,它将传递vertical的值并将session变量设置为等于该值,但是当我单击get next record按钮时,会话的值为null ... always。因此,由于某些奇怪的原因,在第一次设置会话后,结果显示在屏幕上,当我想显示下一条记录时,mysess设置为null。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

在//getnext.php

  

$ _ SESSION ['verticalsess'] = “null”??

我认为应该是

  

$ _ SESSION ['verticalsess'] == “null”

尝试一下,看看它是什么

答案 1 :(得分:0)

首先,您的SQL中存在巨大的安全漏洞。您没有清理任何传递给数据库的内容。逃避您的数据或使用准备好的陈述。

其次,在Javascript中使用$是个坏主意,特别是在加载jQuery时。因此,为了便于阅读,请将$number更改为number

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

这样的东西
session_start();
if(!isset($_SESSION['verticalsess'])) $_SESSION['verticalsess'] = 'somevalue';