将两个会话变量添加到 MYSQL 查询中

Posted

技术标签:

【中文标题】将两个会话变量添加到 MYSQL 查询中【英文标题】:Adding two session variables into MYSQL query 【发布时间】:2017-10-24 02:05:52 【问题描述】:

如何将 2 个会话变量添加到我的 mysql 查询中?

这行得通,因为我只使用变量$stad

session_start();
$_SESSION['stad']   = $_POST['stad'];

//Database connectie
$link = mysqli_connect("*", "*", "*", "entour_nl") or die("Error ". mysqli_error($link));

//Query //
$query = "SELECT * FROM Fissa_test WHERE stad='".$_SESSION['stad']."' AND datum >= CURDATE() ORDER BY datum";

$result = mysqli_query($link, $query);

//loop door de resultaten
while($row = mysqli_fetch_assoc($result))
?>

<article class="fissa-item">
    <div class="left-side">
        <img src="<?php echo $row['flyer_url'];?>" href="<?php echo $row['flyer_url'];?>"  >
    </div>


    <div class="right-side">
        <h3 class="naam-feest" style="margin-top: 1px;"><?php echo $row['naam_feest'];?></h3>
        <h5 class="line-up"><?php echo $row['line_up'];?></h5>
        <h4 class="info"><?php echo $row['plaats'];?> | <?php echo date("d-m-Y", strtotime($row['datum']));?> | <?php echo $row['tijd'];?> | <?php echo $row['leeftijd'];?></h4>
        <a href="<?php echo $row['ticket_url'];?>"><button class="tickets">KOOP TICKETS</button></a>
    </div>

</article>
<?php

?>
<div class="footer">
    <button class="filter" onclick="openNav()">FILTER</button>
</div>

<div id="myNav" class="overlay">
  <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
  <div class="overlay-content">
    <form action="lit_stad_leeftijd.php" method="post">
        <button name="leeftijd" value="14+">14+</button>
        <button name="leeftijd" value="15+">15+</button>
        <button name="leeftijd" value="16+">16+</button>
        <button name="leeftijd" value="17+">17+</button>
        <button name="leeftijd" value="18+">18+</button>
        <button name="leeftijd" value="21+">21+</button>
        <button name="leeftijd" value="23+">23+</button>
        <button name="leeftijd" value="*">ALL</button>
    </form>
  </div>
</div>

但是当我包含$leeftijd。查询无效。

lit_stad_leftijd.php

session_start();
$_SESSION['leeftijd']   = $_POST['leeftijd'];
$_SESSION['stad']       = $_POST['stad'];

//Database connectie
$link = mysqli_connect("*", "*", "*", "*") or die("Error ". mysqli_error($link));

//Query //
$query = "SELECT * FROM Fissa_test WHERE stad='".$_SESSION['stad']."' AND leeftijd='".$_SESSION['leeftijd']."' AND datum >= CURDATE() ORDER BY datum";

$result = mysqli_query($link, $query);

//loop door de resultaten
while($row = mysqli_fetch_assoc($result))
    ?>

    <article class="fissa-item">
        <div class="left-side">
            <img src="<?php echo $row['flyer_url'];?>" href="<?php echo $row['flyer_url'];?>"  >
        </div>

        <div class="right-side">
            <h3 class="naam-feest" style="margin-top: 1px;"><?php echo $row['naam_feest'];?></h3>
            <h5 class="line-up"><?php echo $row['line_up'];?></h5>
            <h4 class="info"><?php echo $row['plaats'];?> | <?php echo date("d-m-Y", strtotime($row['datum']));?> | <?php echo $row['tijd'];?> | <?php echo $row['leeftijd'];?></h4>
            <a href="<?php echo $row['ticket_url'];?>"><button class="tickets">KOOP TICKETS</button></a>
        </div>
    </article>
    <?php

?>
<div class="footer">
    <button class="filter" onclick="openNav()">FILTER</button>
</div>

<div id="myNav" class="overlay">
  <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
  <div class="overlay-content">
    <form action="lit_stad_leeftijd.php" method="post">
        <button name="leeftijd" value="14+">14+</button>
        <button name="leeftijd" value="15+">15+</button>
        <button name="leeftijd" value="16+">16+</button>
        <button name="leeftijd" value="17+">17+</button>
        <button name="leeftijd" value="18+">18+</button>
        <button name="leeftijd" value="21+">21+</button>
        <button name="leeftijd" value="23+">23+</button>
        <button name="leeftijd" value="*">ALL</button>
    </form>
  </div>
</div>

我收到的错误信息:

警告:session_start():无法发送会话 cookie - 标头已由 /customers 中的(输出开始于 /customers/9/f/7/website.nl/httpd.www/fissa/lit_stad_leftijd.php:16)发送/9/f/7/website.nl/httpd.www/fissa/lit_stad_leftijd.php 第 21 行警告:session_start():无法发送会话缓存限制器 - 标头已发送(输出开始于 /customers/9/f/7 /website.nl/httpd.www/fissa/lit_stad_leeftijd.php:16) 在 /customers/9/f/7/website.nl/httpd.www/fissa/lit_stad_leeftijd.php 第 21 行 注意:未定义索引:stad in /customers/9/f/7/website.nl/httpd.www/fissa/lit_stad_leftijd.php 在第 22 行 注意:未定义索引:stad 在 /customers/9/f/7/website.nl/httpd.www/fissa /lit_stad_leftijd.php 在第 32 行 过滤器×

【问题讨论】:

尝试输出 (echo) 您的 $query,以查看正在执行的查询到底是什么。尝试自己执行它(例如,使用 phpmyadmin),看看是否有任何结果。附带说明一下,不要将用户提交的数据直接输入到查询中。使用准备好的语句。除了许多其他好处之外,它还可以防止 SQL 注入。 @RobbieToyota 这是我收到的错误消息: 【参考方案1】:

为什么要将值设置到 $_SESSION 变量中?你可以这样做

$query = "SELECT * 
    FROM Fissa_test 
    WHERE stad='" . $_POST['stad'] . "' 
    AND leeftijd='" . $_POST['leeftijd'] . "' 
    AND datum >= CURDATE() ORDER BY datum";

如果变量仍未添加到查询中,则问题可能是您未将数据正确发布到此页面。

【讨论】:

【参考方案2】:

您发布的错误消息表明您在数据已发送到输出缓冲区(并因此发送标头信息)之后调用session_start()

PHP documentation for session_start() 有注释:

要使用基于 cookie 的会话,必须在向浏览器输出任何内容之前调用 session_start()。

这意味着必须在任何“html 输出”之前调用 session_start()。这包括空格等。简单的解决方案是简单地将session_start() 设为文件中的第一行代码。

<?php
session_start();
?>
<html>
    <body>
        [...]
    </body>
</html>

【讨论】:

以上是关于将两个会话变量添加到 MYSQL 查询中的主要内容,如果未能解决你的问题,请参考以下文章

[mysql-connector-python在将表作为参数传递时,在表名周围添加单引号。表名来自Flask会话变量

如何将从“选择”查询中获得的值存储到 ASP.net 中的会话变量中

Laravel - 将部分会话内容添加到数组中

MySQL高级 第一章——变量

向 JavaScript 对象添加一些自定义会话变量

Linux学习-MySQL变量学习