2016-05-05 2 views
0

Ich möchte Werte aus meiner Datenbank abrufen und sie einer Variablen zuweisen. Das ist mein Code.Wie kann man einer Variablen mit bind_result und fetch Werte zuweisen?

Ich muss die Werte aus meiner Tabelle der Variablen $ user zuweisen und sie an meine login.php-Datei zurückgeben.

$user = $db->getUserByEmailAndPassword($email, $password); 

if ($user != false) { 
    // use is found 
    $response["error"] = FALSE; 
    $response["ngno"] = $user["ngno"]; 
    $response["user"]["email"] = $user["email"]; 
    $response["user"]["name"] = $user["name"]; 
    $response["user"]["user_type"] = $user["user_type"]; 
    echo json_encode($response); 
} else { 
    // user is not found with the credentials 
    $response["error"] = TRUE; 
    $response["error_msg"] = "Login credentials are wrong. Please try again!"; 
    echo json_encode($response); 
} 

Mein Code scheint nicht Werte in die $ Benutzervariable zuzuweisen. Was mache ich falsch?

Antwort

0

Das Problem ist aufgrund der folgenden Anweisung in getUserByEmailAndPassword() Methode

$user = $stmt->fetch(); 

fetch() Methode holt Ergebnisse aus einer vorbereiteten Anweisung in die gebundenen Variablen, und die Methode gibt tatsächlich true oder false.

Hier ist die Referenz:

Statt ein Array erstellen, sagen $user und schieben diese gebunden Variablenwerte in das Array. Und schließlich das Array von der Methode zurückgeben.

So Ihre getUserByEmailAndPassword() Methode sollte wie folgt sein:

public function getUserByEmailAndPassword($email, $password){ 
    $stmt = $this->conn->prepare("SELECT ngno, email, encrypted_password, name, user_type FROM `guide` WHERE email = ? LIMIT 1"); 
    $stmt->bind_param("s", $email); 

    if ($stmt->execute()) { 
     $stmt->bind_result($ngno, $email, $encrypted_password, $name, $user_type); 
     $user = array(); 
     if($stmt->fetch()){ 
      if($encrypted_password == $password){ 
       $user['ngno'] = $ngno; 
       $user['email'] = $email; 
       $user['name'] = $name; 
       $user['user_type'] = $user_type; 

       $stmt->close(); 
       return $user; 
      }else{ 
       return false; 
      } 

     }else{ 
      return false; 
     } 
    } else { 
     return false; 
    } 
} 
+0

@RyanAluvihare Froh, dass ich helfen könnte. *Prost!* :-) –

0

Da ich keinen Kommentar setzen, haben Sie versucht:

var_dump($user); 

Wenn es gibt NULL zurück, überprüfen Sie die Methode getUserByEmailAndPassword, vor allem diese Zeile:

$encrypted_password == $password 

Da Ihr sind Ihre $ verschluesseltes_passwort vergleichen Sind Sie sicher, dass die Variable $ password, mit der Sie vergleichen, auch das verschlüsselte (sollte Hash) Passwort sein? Wird diese Antwort aktualisieren, sobald Sie antworten.

+0

mein login.php Code funktioniert gut, weil es richtige Antwort geben, wenn ich get_result statt bind_results verwenden. Beide Passwörter stimmen überein. Ich habe sogar mit einer printf-Anweisung überprüft .. Das Problem ist, ich glaube, $ user = $ stmt-> fetch() scheint nicht zu funktionieren. –

+0

Sind die obigen Codes aus zwei verschiedenen Dateien? Wie hast du die beiden Codes von oben zusammengeführt? Durch require_once? Wenn nicht, müssen Sie eine SESSION verwenden. – MiSAKACHi

+0

hat den Kommentar aktualisiert. Ja, es wurde mit requir_once zusammengeführt. –

Verwandte Themen