2016-07-20 11 views
0

ich mit diesem Stück Code ein Problem bin Begegnung:php header ("Location :) verwendet zweimal Ausgabe

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; 

?> 

Ich wünschte, ich wusste, warum, wenn die Anweisung ($stmt) nicht in Bezug auf die Bedingungen ausgeführt oben, wird der Link (else) nicht? der erste Link funktioniert.

+1

Wie wird das Attribut 'PDO :: ATTR_ERRMODE' gesetzt? – Barmar

+0

setzen 'exit;' nach jedem der 'header (...)' Anruf – 0x13a

Antwort

0

ich glaube, ich sehe, was das Problem sein könnte. Wenn Ihre erste if Bedingung nicht erfüllt ist, wird weder der Header sein Sie können die Fehlerstelle außerhalb der äußeren 01 verschieben, so dass es standardmäßig dorthin gehen wird. Dann auf der inneren if, sofort nach dem Senden der Kopfzeile beenden.

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"); 

Sie können die gleiche Sache mit

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; 

erreichen Aber wenn Sie auf beiden Grund für das Scheitern auf der gleichen Seite umleiten, ist dies überflüssig.

+0

Hallo nicht Panik, – gregory

+0

Hallo @gregory. Ich fügte der Antwort ein weiteres Beispiel hinzu, um hoffentlich den Punkt zu verdeutlichen, den ich zu machen versuche. –