2016-07-20 6 views
0

発行2回使用:私は知っていたいPHPのヘッダ(「場所:)私は、コードのこの部分で問題が発生しています

if (!empty($_POST['email']) && !empty($_POST['password']) 
    && $_POST['password'] == $_POST['confirm_password'] 
    && (!filter_var ($_POST['email'], FILTER_VALIDATE_EMAIL) === false)): 
    //Enter the new user in the database 
    $sql = "INSERT INTO users (email, password) VALUE (:email, :password)"; 
    $stmt = $conn->prepare($sql); 

    $stmt->bindParam(':email', $_POST['email']); 
    $stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_BCRYPT)); 

    if($stmt->execute()): 
     header("Location:succRegister.php"); 

    else : //this part of code is the problem 
     header("Location:failRegister.php");// 

    endif; 
endif; 

?> 

理由書($stmt)が条件に関してで実行されていない場合上記、リンク(else)は動作しません? 最初のリンクは、作業を行います。

+1

どのように 'PDO :: ATTR_ERRMODE'属性が設定されていますか? – Barmar

+0

'header(...)'の呼び出しのたびに 'exit;'を置きます。 – 0x13a

答えて

0

は、私が問題になるかもしれないものを見ると思います。あなたの最初のif条件が満たされていない場合は、ヘッダのどちらがされます外れた場所を外の01の外に移動することができますとなりますので、デフォルトで表示されます。次に内側のifで、ヘッダーを送信した直後に終了します。

if (!empty($_POST['email']) && !empty($_POST['password']) 
    && $_POST['password'] == $_POST['confirm_password'] 
    && (!filter_var ($_POST['email'], FILTER_VALIDATE_EMAIL) === false)): 
    //Enter the new user in the database 
    $sql = "INSERT INTO users (email, password) VALUE (:email, :password)"; 
    $stmt = $conn->prepare($sql); 

    $stmt->bindParam(':email', $_POST['email']); 
    $stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_BCRYPT)); 

    if($stmt->execute()): 
     header("Location: succRegister.php"); // only go here on success 
     exit(); 
    endif; 
endif; 

// always go here if you haven't already gone somewhere else 
header("Location: failRegister.php"); 

あなたは

if (!empty($_POST['email']) && !empty($_POST['password']) 
    && $_POST['password'] == $_POST['confirm_password'] 
    && (!filter_var ($_POST['email'], FILTER_VALIDATE_EMAIL) === false)) : 
    //Enter the new user in the database 
    $sql = "INSERT INTO users (email, password) VALUE (:email, :password)"; 
    $stmt = $conn->prepare($sql); 

    $stmt->bindParam(':email', $_POST['email']); 
    $stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_BCRYPT)); 

    if ($stmt->execute()): 
     header("Location: succRegister.php"); // only go here on success 
    else: 
     header("Location: failRegister.php"); // $stmt->execute failed 
    endif; 
else: 
    header("Location: failRegister.php");  // $_POST validation failed 
endif; 

と同じことを達成することができます。しかし、あなたが失敗のいずれかの理由に同じページにリダイレクトされている場合、これは冗長です。

+0

こんにちはパニックになりません。 – gregory

+0

こんにちは@gregory。うまくいけば私がしようとしていることを明確にするために、もう一つの例を答えに加えました。 –

関連する問題