【问题标题】:Changing PHP Session Variable with POST使用 POST 更改 PHP 会话变量
【发布时间】:2014-12-17 08:10:07
【问题描述】:

我一直在尝试为我的 mysql 和 PHP 表创建一些自定义过滤器,如果您看到我以前的帖子,我有点不知所措。

我认为我找到了解决方案,但它并不完全有效。在这一点上,安全性并不重要,这只是一个个人项目,但我很乐意让它发挥作用。

所以我使用以下内容存储了一个 $result_else 变量:

$_SESSION['result_else'] = $result_else;

$result_else = mysqli_query($con,"SELECT * FROM game WHERE listDate >= NOW() - INTERVAL 1440 MINUTE     GROUP BY id DESC LIMIT 25");

我使用一个 html 选择和表单链接到我的 filter.php

出于测试目的,我希望将 sql 查询更改为此:

<?php
require 'header.php';
require '../games/game.php';
if(isset($_POST['add_region']))
{

$_SESSION['result_else'] = mysqli_query($con,"SELECT * FROM game WHERE listDate >= NOW() - INTERVAL 1440 MINUTE AND guard = 'Asia' GROUP BY id DESC LIMIT 25");


//echo "Entered data successfully\n";
//echo '<a href="index.php">Go home</a>';
}

?>

这目前没有给我任何错误,只是显示原始的 game.php 页面? 由于我尝试了很多东西并且从未使用过 SESSION 变量,因此我有点不知道从哪里开始。

这也是我的html表单

<form method="POST" action="../inc/filter.php">
<select class="form-control" name="add_region" onchange="this.form.submit();">
  <option value="Asia">Asia</option>
  <option value="Eur">Eur</option>
</select>
    </form>

PS:我对编程很陌生,尤其是 PHP

【问题讨论】:

  • 你开始会话了吗?
  • 这里有关于会话的信息。 w3schools.com/php/php_sessions.asp
  • @fred -ii- 我已经在 header.php 中像这样开始了会话
  • @Funk Doc 这正是我所关注的
  • 我想知道你期望有什么不同。在这两种情况下,结果都是 mysqli 资源

标签: php html mysql ajax


【解决方案1】:

应该是这样的吗?

如果会话变量“result_else”为空,则存储“基本”查询。

如果你提供一个新的查询,那么你用那个替换会话变量。

一旦您更改会话变量中的查询,它将保留它,直到您再次更改它。

完全未经测试。

if (empty($_SESSION['result_else']) { // set the basic query
    $_SESSION['result_else'] = "SELECT * FROM game WHERE listDate >= NOW() - INTERVAL 1440 MINUTE     GROUP BY id DESC LIMIT 25";      
}

if(isset($_POST['add_region'])) { // set the new query
    $_SESSION['result_else'] = "SELECT * FROM game WHERE listDate >= NOW() - INTERVAL 1440 MINUTE AND guard = 'Asia' GROUP BY id DESC LIMIT 25";
}

// Alway run the 'current' query to get the results.
$result_else = mysqli_query($con, $_SESSION['result_else');

【讨论】:

  • 也可以通过三元运算来完成。为多个需求清理大量 if 语句。 SELECT * FROM game WHERE listDate &gt;= NOW() - INTERVAL 1440 MINUTE ". (isset($_POST['add_region']) ? "AND guard = 'Asia'" : "") ." GROUP BY id DESC LIMIT 25
  • @TomKriek,试图弄清楚逻辑是如何工作的。不过感谢您的评论。
  • @RyanVincent 感谢您的帮助,所以我的解决方案可以正常工作,这就是 printf 为会话返回的内容Array ( [result_else] =&gt; SELECT * FROM game WHERE listDate &gt;= NOW() - INTERVAL 1440 MINUTE AND guard = 'Asia' GROUP BY id DESC LIMIT 25 ) 所以它返回了正确的值/字符串,但表格确实使用echo "&lt;script&gt;window.location = '../games/game.php'&lt;/script&gt;"; 返回时不会更改
【解决方案2】:

我已经设法让这个工作几乎达到了 id 的样子, 这显然不是一个好的做法,但它现在可以工作,直到找到更好的解决方案!

创建了一个名为 game-(filter Name).php 的页面,并刚刚回显了包含 guard = 'Asia' 的 mysqli 查询,并添加了来自 game.php 的相同格式,因此页面看起来相同。有没有更好的方法来使用 jquery(AJAX) 创建表并且仍然使用 mysql/php ?

一切看起来都很好并且可以正常工作,但这似乎不对!

【讨论】:

    猜你喜欢
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    相关资源
    最近更新 更多