2016-12-13 2 views
1

Ich versuche, eine Variable aus PHP anzuzeigen, die ich von einem MySQL-Server bekomme. Es wird jedoch nur eine leere Zeichenfolge als 'Name'-Variable angezeigt.PHP-Variable nicht auf Seite angezeigt

Mein Code ist:

$GLOBALS[name] = ""; 

$conn = new mysqli($servername, $username, $password, $dbname); 
if ($conn->connect_error) { 
    die("<br>Connection failed: " . $conn->connect_error); 
    $out = "Error when connecting to the database."; 
} else { 
    echo "<br>Connected successfully"; 
    $sql = "SELECT name, pwd FROM server1.us WHERE UPPER(eml) = UPPER('$email')"; 
    $result = $conn->query($sql); 
    $pwdHash = ""; 

    if ($result->num_rows == 0) { 
     $out = "Your email is not registered yet."; 
    } 
    else { 
     while($row = $result->fetch_assoc()) { 
      $pwdHash = $row['pwd']; 
     } 
    } 

    if (password_verify($pwd, $pwdHash) == false) { 
     $out = "Your passwords do not match!"; 
    } 
    else if($email == '') { 
     $out = "You have to input an email."; 
    }  
    else if($pwd == '') { 
     $out = "You have to input a password."; 
    } 
    else { 
     while($row = $result->fetch_assoc()) { 
     $name = $row['name']; 
    } 
} 
$conn->close(); 

Mein Code den Wert anzuzeigen:

<?php 
     if($out == null) { 
      echo "<h3>Thank you for logging in, $name!</h3>"; 
      echo "<p>You will be redirected...</p>"; 
     } else { 
      echo "<h3>Oops! Apparently something went wrong...</h3>"; 
      echo "<p>$out</p>"; 
      echo "<p>You can try again <a data-toggle='modal' data-target='#loginModal'>here</a> .</p>"; 
     } 
?> 

Wenn er ausgeführt wird, wird kein Fehler gegeben, aber die Ausgabe ist

Danke für Einloggen, ''! Sie werden weitergeleitet ...

Meine Tabelle in der Datenbank folgende Spalten:

id 
name 
eml 
pwd 

Antwort

0

Sie rufen $result->fetch_assoc() zweimal (zuerst, wenn Sie das Passwort überprüfen möchten, dann später, wenn Sie wollen um den Namen zu bekommen). Du solltest das nicht tun. einmal nennen es einfach, nicht in einer Schleife:

$result = $conn->query($sql); 
$pwdHash = ""; 

if ($result->num_rows == 0) { 
    $out = "Your email is not registered yet."; 
} 
else { 
    $row = $result->fetch_assoc(); 
    $pwdHash = $row['pwd']; 
} 

// [...] 

$name = $row['name']; 

Auch von Ihrem ersten Linie $GLOBALS[name] = ""; ich diesen Code gehe davon in einer Funktion ausgeführt wird, und Sie wollen, dass die $name Variable global zu sein, und somit sein später in Ihrer Ansicht zugänglich.

Wenn das, was Sie wollen, sollten Sie die global Schlüsselwort:

global $name; 
$name = $row['name']; 

Beachtenswert: die Art, wie Sie Benutzer bereitgestellte Daten $email in Ihre SQL-Abfrage zu injizieren ist sehr gefährlich. Lesen Sie etwas über SQL-Injection.

+0

Die Verwendung von global wirft einen internen Serverfehler. Außerdem fehlt ein Semikolon für $ row = $ result-> fetch_assoc(); wenn ich mich nicht irre. –

Verwandte Themen