2016-07-05 3 views
0

私のコードで時間の豚を持っています。私はこれに新しいですし、非常に苦労しています。ログインフォームはPHP/MySQLを発行します。

私はいくつかの問題があります。まず、SQLデータベースに接続されたログインフォームを使用しようとしていますが、間違ったデータやデータが入力されていないときにエラーは発生しません。

第2に、ユーザーがログインしたときに各ページにユーザー名を表示しようとしていますが、これはデータベースに手動で入力されたユーザーに対してのみ有効です。 phpmyadminに表示されていても、登録フォームから追加されたユーザーは表示されません。最初の問題のため

マイログインページコードは次のとおりです。何かアドバイスのため

<?php 


echo '<h3>Sign in</h3>'; 

    if($_SERVER['REQUEST_METHOD'] != 'POST') 
    { 
     /*the form hasn't been posted yet, display it 
      note that the action="" will cause the form to post to the same page it is on */ 
     echo '<form method="post" action=""> 
      Username: <input type="text" name="Username" /> 
      Password: <input type="password" name="Password" /> 
      <input type="submit" value="Sign in" /> 
     </form>'; 
    } 
    else 

     { 
      //the form has been posted without errors, so save it 
      //notice the use of mysql_real_escape_string, keep everything safe! 


     $username = mysql_real_escape_string($_POST['Username']); 
     $password = mysql_real_escape_string($_POST['Password']); 
      $sql = "SELECT * FROM Users WHERE Username = '$username' AND Password = '$password'";    
      $result = mysql_query($sql); 
      if(!$result) 
      { 
       //something went wrong, display the error 
       echo 'Something went wrong while signing in. Please try again later.'; 
       header("location:index.php"); 
       //echo mysql_error(); //debugging purposes, uncomment when needed 
      } 
      else 
      { 
       {     
        { 
        //set the $_SESSION['signed_in'] variable to TRUE 
        $_SESSION['signed_in'] = true; 

        //we also put the user_id and user_name values in the $_SESSION, so we can use it at various pages 
        while($row = mysql_fetch_assoc($result)) 
        { 
         $_SESSION['UserID'] = $row['UserID']; 
         $_SESSION['Username'] = $row['Username']; 
        } 

        echo 'Welcome, ' . $_SESSION['Username'] . ' <a href="index2.php">Proceed to the forum Home page</a>.'; 
        } 
       } 
      } 
     } 

?> 

感謝。

+0

まず、mysql_の代わりに 'PDO'を使用してください –

+4

注:' mysql_ * '関数は廃止され、PHP 7から削除されました。そのバージョンにアップグレードするとコードは機能しなくなります。代わりに['mysqli_ *'やPDO](http://php.net/manual/en/mysqlinfo.api.choosing.php)を使って新しいコードを書くべきです。 –

+2

また、SQLインジェクションのために開いていることに注意してください。 –

答えて

0

機能mysql_query()実際のmysqlエラーがある場合はFALSEを返します。構文エラー、無効な制約挿入、入力データ型の不一致が考えられます。挿入されたユーザー名とパスワードの組み合わせが有効である可能性がある場合は、エラーは発生しません。 またはパスワードが間違っている場合は、あなたの場合は


は、それが0行(データなし)がないエラーある返されることを意味します。だからあなたのコードでは、変数$resultは決してFALSEではないので、あなたのコードは決してエラーループに入りません。

これを修正するには、結果がTRUEであるかどうかをチェックするのではなく、返される行の数が0より大きいかどうかをチェックするコードを変更する必要があります。これを実現するには、mysql_num_rows()関数を使用します。
変更されたコードは、この

$result = mysql_query($sql); 
$num_rows = mysql_num_rows($result); 
if($num_rows < 0){ 
    //put some code for error 
} 

さらにノートのようになります。あなたはPDOを使用しない場合
あなたは、MySQLの代わりにmysqliのを使用することができます。また、SQLインジェクションに脆弱です。あなたがprepared statementsを見て、あなたのサーバーに来るデータをより安全にする方法は本当に良いでしょう。

+0

本当に助けられた@Bozicに感謝します。 phpadminに手動で入力されたユーザーの私のページにのみ表示されるユーザーの詳細に関して、私の2番目の問題(上記参照)についてのアドバイスはありませんが、私の登録フォームに追加されたユーザーのためのアドバイスはありません。ありがとう – DarkKnight1203

関連する問題