将两个会话变量添加到 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()">×</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()">×</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会话变量