PHP 验证码不适用于年龄?
PHP validation code not working for age?
我有一个刚刚登录的用户,我会话了用户的年龄,因为我正在做的验证需要它。用户登录后,他将被重定向到具有 table 的页面,该页面显示他可以参加的调查。当管理员创建调查时,有一个年龄范围选项,这意味着只有这个年龄的某些人可以参加调查
<select name="agestart" class="form-control-static">
<label> TO </label>
<select name="ageend" class="form-control-static">
现在我正在尝试做一个 validation/setting 让用户只能看到与其年龄范围相匹配的调查。
<?php
$mysqli = mysqli_connect("localhost", "root", "", "imetrics");
$query = mysqli_query($mysqli,"SELECT * FROM surveyform");
if($query){
while($row = mysqli_fetch_array($query)){
$id = $row['survey_id'];
$title = $row['surveytitle'];
$agestart = $row['age_start'];
$ageend = $row['age_end'];
if(!$_SESSION['age'] >= $agestart || $_SESSION['age'] <= $ageend ){
echo "<tr align='center'>";
echo "<td><font color='black'>" . $id . "</font></td>";
echo "<td><font color='black'>" . $title . "</font></td>";
echo "<td><a href='preview.php?survey_id=$id'><input class='btn btn-danger' type='button' value='Take Survey'/></td>";
echo "</tr>";
}
}
}
?>
但我的情况似乎有问题,因为我认为只有在用户年龄高于 agestart 和 ageend 时它才有效(不显示)。我现在真的很迷茫。
if(!$_SESSION['age'] >= $agestart || $_SESSION['age'] <= $ageend ){
检查年龄的正确方法如下:
$age = intval($_SESSION['age']);
if ($agestart <= $age && $age <= $ageend) {
你可以做两件事,要么添加 session_start();并修复您的条件或更改您的 SQL 查询。
session_start();
$sessionAge = $_SESSION['age'];
$query = mysqli_query($mysqli,"SELECT * FROM surveyform WHERE $sessionAge BETWEEN age_start AND age_end");
// OR with a condition
if(($agestart <= $sessionAge) && ($sessionAge <= $ageend)) {
//....
}
据我所知,您尚未开始会话:
session_start(); //Should be at the beginning of the file
请注意 $_SESSION['age']
应该有一个值:
$age = (isset($_SESSION['age'])) ? $_SESSION['age'] : 0; //For PHP < 7.x
$age = $_SESSION['age'] ?? 0; //For PHP 7
布尔条件写错了;我知道逻辑上这等同于上述答案,但恕我直言,这更容易阅读:
if($_SESSION['age'] >= $agestart && $_SESSION['age'] <= $ageend)
也许我是守旧派,但 $agestart <= $age && $age <= $ageend
对于大多数人来说可能更难快速阅读和理解。
我有一个刚刚登录的用户,我会话了用户的年龄,因为我正在做的验证需要它。用户登录后,他将被重定向到具有 table 的页面,该页面显示他可以参加的调查。当管理员创建调查时,有一个年龄范围选项,这意味着只有这个年龄的某些人可以参加调查
<select name="agestart" class="form-control-static">
<label> TO </label>
<select name="ageend" class="form-control-static">
现在我正在尝试做一个 validation/setting 让用户只能看到与其年龄范围相匹配的调查。
<?php
$mysqli = mysqli_connect("localhost", "root", "", "imetrics");
$query = mysqli_query($mysqli,"SELECT * FROM surveyform");
if($query){
while($row = mysqli_fetch_array($query)){
$id = $row['survey_id'];
$title = $row['surveytitle'];
$agestart = $row['age_start'];
$ageend = $row['age_end'];
if(!$_SESSION['age'] >= $agestart || $_SESSION['age'] <= $ageend ){
echo "<tr align='center'>";
echo "<td><font color='black'>" . $id . "</font></td>";
echo "<td><font color='black'>" . $title . "</font></td>";
echo "<td><a href='preview.php?survey_id=$id'><input class='btn btn-danger' type='button' value='Take Survey'/></td>";
echo "</tr>";
}
}
}
?>
但我的情况似乎有问题,因为我认为只有在用户年龄高于 agestart 和 ageend 时它才有效(不显示)。我现在真的很迷茫。
if(!$_SESSION['age'] >= $agestart || $_SESSION['age'] <= $ageend ){
检查年龄的正确方法如下:
$age = intval($_SESSION['age']);
if ($agestart <= $age && $age <= $ageend) {
你可以做两件事,要么添加 session_start();并修复您的条件或更改您的 SQL 查询。
session_start();
$sessionAge = $_SESSION['age'];
$query = mysqli_query($mysqli,"SELECT * FROM surveyform WHERE $sessionAge BETWEEN age_start AND age_end");
// OR with a condition
if(($agestart <= $sessionAge) && ($sessionAge <= $ageend)) {
//....
}
据我所知,您尚未开始会话:
session_start(); //Should be at the beginning of the file
请注意 $_SESSION['age']
应该有一个值:
$age = (isset($_SESSION['age'])) ? $_SESSION['age'] : 0; //For PHP < 7.x
$age = $_SESSION['age'] ?? 0; //For PHP 7
布尔条件写错了;我知道逻辑上这等同于上述答案,但恕我直言,这更容易阅读:
if($_SESSION['age'] >= $agestart && $_SESSION['age'] <= $ageend)
也许我是守旧派,但 $agestart <= $age && $age <= $ageend
对于大多数人来说可能更难快速阅读和理解。