繁体   English   中英

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

[英]How to filter results based on session variable php

这已经给了我很多时间了。 非常感激任何的帮助!

我有一个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
 ...

我的问题

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

我在这里做错了什么?

在//getnext.php中

$ _SESSION ['verticalsess'] = “空”

我认为应该

$ _SESSION ['verticalsess'] == “空”

试试看,看看会如何

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

其次,在Java语言中使用$是个坏主意,尤其是在加载jQuery的情况下。 因此,改变$number ,以number的可读性。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM