2016-06-10 6 views
0

Edit: Mein Problem wurde behoben. Ich wusste nicht oder denke an bindValue(), deshalb glaube ich nicht, dass dies eine doppelte Frage ist. Danke für die Hilfe!password_hash geben Fehler: Strenge Standards: Nur Variablen sollten durch Verweis

Ich lerne, wie man Benutzer mit PHP registriert und es scheint, als ob password_hash mir die "Nur Variablen, die durch Referenz übergeben werden sollen" Fehlermeldung. Ich habe viele Leute mit dem gleichen Fehler gesehen, aber es scheint nicht für meinen Fall zu gelten (meiner Meinung nach).

zur Datenbank verbinden

$server = 'localhost'; 
$username ='root'; 
$password ='root'; 
$database = 'register_test'; 

try{ 
    $conn = new PDO("mysql:host=$server;dbname=$database;" , $username, $password); 
} catch(PDOException $e){ 
    die ("Connection failed" . $e->getMessage()); 
} 

Registrieren von Benutzer

require 'database.php'; 
if(!empty($_POST['email']) && !empty($_POST['password'])): 

$pass = $_POST['password']; 
$email = $_POST['email']; 

$sql = "Insert into user (email, password) values (:email, :password)"; 
$stmt = $conn->prepare($sql); 

$stmt ->bindParam(':email', $email); 
$stmt ->bindParam(':password', password_hash($pass, PASSWORD_BCRYPT)); //error showns here 

if($stmt -> execute()): 
    die('Success'); 
else: 
    die('Fail'); 
endif; 
endif; 

Wenn ihr mehr Informationen benötigen, bitte lassen Sie mich wissen.

+0

Verwenden Sie '$ stmt-> bindValue()' anstelle von '$ stmt-> bindParam()'. – Will

+1

Ihre Abfrage funktioniert sowieso nicht. Sie geben ein Feld an, in das zwei Werte eingefügt werden sollen. –

+0

Marc B. Ich habe ein paar Dinge ausprobiert und vergessen, 'password' in die insert-Anweisung zu schreiben. Danke, dass Sie es bemerkt haben –

Antwort

2

Verwenden Sie PDOStatement::bindValue() anstelle von PDOStatement::bindParam().

Aus der Dokumentation:

Unlike PDOStatement::bindValue(), the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.

So, Ihr Code wird:

$stmt->bindValue(':email', $email); 
$stmt->bindValue(':password', password_hash($pass, PASSWORD_BCRYPT)); 

Das Ergebnis einer Funktion kann nicht als Referenz übergeben werden, wenn E_STRICT Modus aktiviert ist, ohne eine Warnung ausgelöst wird. Bei Verwendung von bindValue() übergeben wir den Rückgabewert der Funktion im Grunde als Kopie.

+0

Danke. Das entfernte die Fehlermeldung, aber ich habe ein neues Problem. Die E-Mail und das Passwort zeigen "0" und "0" in der Datenbank an. –

+0

Kein Problem, froh zu helfen. Hmm. Was zeigt es, wenn Sie 'var_dump()' '$ email' und' $ pass'? Sie müssen möglicherweise eine separate Frage stellen, wenn es nicht etwas einfaches ist. – Will

+0

var_dump() zeigt die korrekten Zeichen, die ich eingegeben habe. Ich habe den Tisch neu erstellt und es funktioniert jetzt gut. Vielen Dank für die Hilfe! –

Verwandte Themen