【问题标题】:Adding two session variables into MYSQL query将两个会话变量添加到 MYSQL 查询中
【发布时间】: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'];?>" height="100%" width="100%">
    </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'];?>" height="100%" width="100%">
        </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 这是我收到的错误消息:

标签: php forms post mysqli


【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-29
      • 2023-03-03
      • 2018-12-07
      • 2017-07-11
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多