更新 -我终于想通了,我在下面添加了答案:-)(只要系统允许,我就会接受它作为回答)
我认为我可能做错了一些非常简单的事情(即错误地调用了变量),因为我在几种情况下都遇到了类似的问题。
我正在创建一个密码重置表单,并希望在一个页面上包含各种步骤和表单部分。我正在使用一系列 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。