【问题标题】:PHP validation code not working for age?PHP 验证代码对年龄不起作用?
【发布时间】:2017-08-05 01:55:25
【问题描述】:

我有一个刚刚登录的用户,我对用户的年龄进行了会话,因为它是我正在进行的验证所必需的。一旦用户登录,他将被重定向到一个页面,该页面有一个表格,显示他可以参加的调查。当管理员创建调查时,有一个年龄范围选项,这意味着只有该年龄的某些人可以参加调查

<select name="agestart" class="form-control-static">      

<label> TO </label>

<select name="ageend" class="form-control-static">

现在我正在尝试进行验证/设置,让用户只能看到与其年龄范围相匹配的调查。

 <?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 ){

【问题讨论】:

  • 开始会话会有所帮助
  • 另外,删除! 并在if 条件下将|| 更改为&amp;&amp;
  • @Fred-ii- 这显然不是完整的文档; OP 说这种情况表现得很奇怪,所以这不是会话问题。
  • @ChrisG 的问题太不清楚了,也不知道他们为什么有&lt;select&gt;,以及他们是否打算使用这些来依赖查询。
  • 谢谢您的信息先生

标签: javascript php html validation settings


【解决方案1】:

你可以做两件事,要么添加 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)) {
    //....
}

【讨论】:

    【解决方案2】:

    这是进行年龄检查的正确方法:

    $age = intval($_SESSION['age']);
    if ($agestart <= $age && $age <= $ageend) {
    

    【讨论】:

    • 非常感谢@Chris G 先生,它成功了!一旦我的声望超过 15 个,我就会投票赞成这个答案。
    • 谢谢,但请务必查看 Yolo 的答案,了解在 SQL 查询中包含年龄检查的方法。
    【解决方案3】:

    我看到你还没有开始会话:

    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
    

    【讨论】:

      【解决方案4】:

      布尔条件写错了;我从逻辑上知道这等同于上述答案,但恕我直言,这更容易阅读:

      if($_SESSION['age'] >= $agestart && $_SESSION['age'] <= $ageend)
      

      也许我是老派,但$agestart &lt;= $age &amp;&amp; $age &lt;= $ageend 对于大多数人来说可能更难快速阅读和理解。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-10
        • 2014-08-23
        • 1970-01-01
        相关资源
        最近更新 更多