0

更新-私はついにこれを理解し、以下に答えを追加しました:- )(システムが許可するとすぐに答えとして受け入れます)


いくつかの状況で同様の問題が発生したため、私はおそらく非常に単純なことを間違って行っている(つまり、変数を間違って呼び出している)と思います。

パスワードリセットフォームを作成していますが、さまざまな手順とフォームセクションを1ページに含めたいと思います。これを行うには、一連のelseifステートメントを使用して、表示するhtmlコードや実行するphpスクリプトを決定し、一連のクエリが成功または失敗したときに変数の値を変更します。

クエリをテストし、var値が正しく変更されましたが(確認のために各ステップで値をエコーし​​ました)、var値を手動で設定しない限り、正しい結果が表示されません。

質問の目的で、2つの簡略化されたスニペットを含めました-非常に基本的なシナリオ(コードに簡単に適用できます)と、コードの簡略化されたバージョンです。必要に応じて、コード全体を共有できれば幸いです。 。

編集-GLOBAL $status;問題だったオフチャンスで、$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";
           }  
   }
?>

注:チュートリアルのほとんどはまだPDOではなくmysqlクエリ用に作成されているため、PDOに切り替える前に、まずすべてをそのように機能させるようにしています。

4

1 に答える 1

0

最初のifステートメントを削除して問題を解決しました。

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

elseifステートメントを次のように開始するだけです

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

$ status="start"の最初の宣言も削除しました。

于 2013-01-09T01:19:19.170 に答える