2016-12-13 15 views
1

mySQLi Serverから取得したPHPから変数を表示しようとしています。ただし、 'name'変数として空のStringのみが表示されます。PHP変数がページに表示されない

私のコードは次のとおりです。値を表示するには

$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(); 

マイコード:実行すると

<?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>"; 
     } 
?> 

、エラーが与えられていないが、出力は

いただきありがとうございますですログインしてください! あなたは、データベース内の

私のテーブルには、列を以下ました...リダイレクトされます:あなたは、パスワードを確認したいとき

id 
name 
eml 
pwd 

答えて

0

あなたは後からお好きな時に、最初に(2回$result->fetch_assoc()を呼んでいます名前を得るために)。あなたはそうしてはいけません。だけではないループ内で、一度それを呼び出す:

$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']; 

また、あなたの最初の行$GLOBALS[name] = "";から、私はこのコードを仮定している機能で実行され、あなたが$name変数はグローバルになりたいので、可能れます後で見ることができる注目すべきは

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

:あなたのSQLクエリにユーザー提供のデータ$emailを注入方法は非常に危険であることはあなたが望むものである場合

は、あなたがglobalキーワードを使用する必要があります。 SQLインジェクションについてのいくつかを読んでください。

+0

グローバルを使用すると内部サーバーエラーがスローされます。また、セミコロンがありません。 $ row = $ result-> fetch_assoc(); 私が間違っていない場合。 –

関連する問題