2017-02-24 5 views
0

私のPHPコードに問題があります。私は、データベースからユーザー名とパスワードを取るログインシステムを作りたいと思っています。私はほとんど全てがうまくいくようにした。しかし、1つの問題があります。あなたが名前とパスワードを入力するとき/何が問題ではない、ランダムでさえ/それは私をログインさせ、私が望む場所に私をリダイレクトします。どのようにそれを修正し、それはデータベースから正しいユーザー名とパスワードを使用するように?ここにログインコードファイルをインポートします。事前に感謝、私の英語には申し訳ありません。入力されたすべてのユーザー名とパスワードは、PHPログインで動作します

<?php 

include 'dbh.php'; 

$uid = $_POST['uid']; 
$pwd = $_POST['uid']; 

$query = "SELECT * FROM user WHERE uid='$uid' AND pwd='$pwd'"; 
$result = mysqli_query($conn, $query); 

if ($result = mysqli_query($conn, $query)) 
{ 
    while ($row = mysqli_fetch_assoc($result)) 
    { 
      printf("Login success\n"); 
    } 

    // If the while loop fails, password/username combo was incorrect 
    printf("Login failed - Invalid username or password."); 
} else { 
    printf("Login failed, could not query the database.\n"); 
} 


header("Location: panel.php"); 

?>  
+0

を試してみてください。また、クエリは2回実行されます。 – particleflux

+0

私は、あなたに脆弱性があるため、同じクエリでユーザーを照会せずに渡すことをお勧めします。 – Rhopercy

+0

SQLインジェクションとサニタイズユーザー入力を調べる必要があります。 – fubar

答えて

0

使用mysqli_num_rows

$sql="SELECT * FROM user WHERE uid='$uid' AND pwd='$pwd'"; 

if ($result=mysqli_query($con,$sql)) 
    { 
    if (mysqli_num_rows($result)!=0) { 
     printf("Login success\n"); 
    }else{ 
     printf("Login failed - Invalid username or password."); 
    } 
    mysqli_free_result($result); 
    } 
+0

'mysql_ *'メソッドをもう使用しないでください。現在のバージョンのPHPでは廃止され、削除されています。その代わりに、mysqli_ *またはPDOと_preparedステートメントを使用します。 – MrDarkLynx

+0

@MrDarkLynxが修正されました。 –

+0

同じことをします。 – quakeN

0

まず第一に、あなたはSQLインジェクションにWIDE OPENしている、あなたはそれを更新したいと思うでしょう。他の場所のトンで覆われて、それを見てください。

しかし、問題を解決するために、あなたは小切手に関係なくリダイレ​​クトしています。これをあなたのwhileループに移してください:

while ($row = mysqli_fetch_assoc($result)) 
{ 
     printf("Login success\n"); 
     header("Location: panel.php"); 
} 

これは、何が起こっても解雇されることを意味します。

+0

MYDOMAINページが機能していません MYDOMAINは現在このリクエストを処理できません。 HTTPエラー500 – quakeN

+0

エラーログには何が問題なのですか? – Chausser

0

はおそらく望んでいたされていない側の注意点、 `$のuid`と` $同じpwd`are、上この

<?php 

    function Db(){ 
     $host  = "localhost"; // your db settings 
     $username = "yourusername"; 
     $password = "yourpass"; 
     $db  = "users"; 

     $conn = new mysqli($host, $username, $password, $db); 
     // use mysqli instead mysql_connect, it is outdated I guess 

     if(!$conn){ 
      die("Could not connect"); 
     } 
    } 

    if(isset($_POST['login'])){ 

     $uid = trim($_POST['username']); 
     $pwd = trim($_POST['password']); 

     if($uid == ""){ 
      $err[] = "Username is missing."; 
     }elseif($pwd == ""){ 
      $err[] = "Password is missing."; 
     }else{ // When validation succeed then make query. 
      $db = Db(); 
      $uid = $db->real_escape_string($uid); // escape strings from mysql injection 
      $pwd = $db->real_escape_string($pwd); 
      $sql = "SELECT * FROM users 
        WHERE username = '$uid' 
        AND password = '$pwd'"; 
      $result = $db->query($sql); 

      if($result->num_rows == 1){ 
       header("location:panel.php"); // login succeed 
      }else{ 
       $err[] = "Username or password are incorrect"; 
       header("location:login.php"); // login failed 
      } 
     } 

    } 
    ?> 

    <?php 
     if(isset($err)): 
      foreach($err as $loginErr): 
       echo $loginErr; // Print login errors. 
      endforeach; 
     endif; 
    ?> 


    <!-- HTML login form goes here --> 
+0

名前とパスワードを入力すると空のlogin.phpページに送られます – quakeN

関連する問題