0

更新 -我终于想通了,我在下面添加了答案:-)(只要系统允许,我就会接受它作为回答)


我认为我可能做错了一些非常简单的事情(即错误地调用了变量),因为我在几种情况下都遇到了类似的问题。

我正在创建一个密码重置表单,并希望在一个页面上包含各种步骤和表单部分。我正在使用一系列 elseif 语句来确定要显示的 html 代码和/或要执行的 php 脚本,并在一系列查询成功或失败时更改变量的值。

我已经测试了查询并且 var 值正确更改(我在每个步骤中都回显了该值以确认),但除非手动设置 var 值,否则不会显示正确的结果。

出于问题的目的,我包含了 2 个简化的片段 - 一个非常基本的场景(我可以轻松地将其应用于我的代码)和我的代码的简化版本,如果更可取,我很乐意分享完整的代码.

编辑 -在为 $status 设置新值之前,我也尝试过调用GLOBAL $status;,这可能是问题所在。

基本场景:

<?php
//session_start and connect to database 
$status="start";
?>
<?php $status="start"; ?>
<?php if ($status == "start") { ?>
    Check if expiry valid & retrieve info 
    <?php $status = "expiry_ok"; ?>    
<?php }
elseif ($status == "expiry_ok") 
{ ?>
    Date is Valid
<?php } ?>

简化版查询:

<?php if ($status == "start"){  
    //Identify the $temp_password by removing the URL
    $restorepasslink="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    $new_pass = str_replace("http://click2fit.com/demo/restorepass.php/", "", $restorepasslink);
    //Query db to check if expiry_date has passed
    $qry="SELECT * FROM password_reset WHERE temp_password = '$new_pass'";
    $result=mysql_query($qry);
    if($result) {
            $token = mysql_fetch_assoc($result);            
            $token_expiry_date = $token['expiry_date']; 
            // Other $token values are also set here 
            if($date < $token_expiry_date) {
                $status = "expiry_ok";
            }else {
                $status = "expiry_notok";
           }  
   }
?>

注意:由于大部分教程仍然是为 mysql 查询而不是 PDO 编写的,所以我首先尝试让它全部以这种方式工作,然后再将其切换到 PDO。

4

1 回答 1

0

我通过删除最初的 if 语句解决了这个问题:

if ($status == "start"){...} 

并简单地开始 elseif 语句

if ($status == "expiry_ok"){...}   
elseif (...)

我还删除了 $status="start"; 的初始声明。

于 2013-01-09T01:19:19.170 回答