0

PHP ユーザー/登録サイトのエラーを見つけるのに苦労しています。登録後、アクティベーション リンクが記載された電子メールが送信され、リンクをクリックするとアカウントが正常にアクティベートされますが、成功メッセージが表示されません。

ブラウザでアクティベーション リンクをコピーして貼り付け、リンク内の電子メールまたは電子メール コードのいずれかの文字を変更すると、すべてのエラー メッセージが正常に表示されます。

アクティベーション リンクは次のようになります。

http://website.com/activate.php?email=useremail@website.com&email_code=2631df446b129480abdbf54f08e8c494

これは私の activate.php のコードです

<?php 
include 'core/init.php';
logged_in_redirect();
include 'includes/overall/header.php';
?>

<?php 
if (isset($_GET['success']) == true && empty($_GET['success']) == true) {
    ?>
<h3>Thanks, your account has been activated..</h3>
<p>You're free to log in!</p>
<?php
    header('Location: activate.php?success');
    exit();
} else if (isset($_GET['email'], $_GET['email_code']) === true) {

$email      = trim($_GET['email']);
$email_code = trim($_GET['email_code']);

if (email_exists($email) === false) {
    $errors[] = 'Ooops something went wrong, and we couldn\'t find that email adress!';
    } else if (activate($email, $email_code) === false) {
    $errors[] = 'We had problems activating your account';
    } if (empty($errors) === false) {
?>
    <h2>Ooops...</h2>
<?php
    echo output_errors($errors);
} else {
    header('Location: activate.php?success');
    exit();
}
} else {
header('Location: index.php');
exit();
}
?>

<?php include 'includes/overall/footer.php'; ?>

成功メッセージとリダイレクトが表示されないのはなぜですか?

URL は変更されません: http://website.com/activate.php?email=useremail@website.com&email_code=2631df446b129480abdbf54f08e8c494

宛先: website.com/activate.php?success

4

4 に答える 4

0

どの基準が失敗しているかをテストする必要があります。以下を参照してください。補足として:ステータスを渡さない場合は括弧をexit入れる必要はありません。また、phpをそれほど開いたり閉じたりする必要はありません。必要ありません。

<?php 
include 'core/init.php';
logged_in_redirect();
include 'includes/overall/header.php';

if (isset($_GET['success']) && !empty($_GET['success'])) {
    //in activate.php isset($_GET['success']) add this ouput, 
    //it works / not recommended and never seen.
    //echo "<h3>Thanks, your account has been activated..</h3>";
    //echo "<p>You're free to log in!</p>";
    header('Location: activate.php?success');
    exit;
} else if (isset($_GET['email'], $_GET['email_code'])) {
    $email = trim($_GET['email']);
    $email_code = trim($_GET['email_code']);
    if (email_exists($email) === false) {
        $errors[] = 'Ooops something went wrong, and we couldn\'t find that email adress!';
    } else if (activate($email, $email_code) === false) {
        $errors[] = 'We had problems activating your account';
    } if (empty($errors) === false) {
        echo "<h2>Ooops...</h2>";
        echo output_errors($errors);
    } else {
        header('Location: activate.php?success');
        exit;
    }
} else {
    // The following 2 lines: You should see 1, 0 or nothing
    // From there you should be able to troubleshoot.        
    echo "isset: ".isset($_GET['success'])."<br>";
    echo "Empty: ".empty($_GET['success']);
    //header('Location: index.php');
    exit;
}
include 'includes/overall/footer.php';

上記のコードをテストすると、?successうまくリダイレ​​クトされます。

編集:

私が正しく理解し、上記のコードを理解してempty($_GET['success'] == true)いれactivate.phpば、それが機能した場合、無限のヘッダーリダイレクトエラーが発生します。あなたの論理を再考する必要があります。

于 2013-01-31T15:10:44.610 に答える
0

この行には怪しいところがあります:

if (isset($_GET['success']) == true && empty($_GET['success']) == true) {

本当にそうではありません&& empty($_GET['success']) == false)か?

于 2013-01-31T14:58:25.587 に答える