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 对于大多数人来说可能更难快速阅读和理解。