2017-04-18 2 views
1

私はPHPの初心者ですので、このログインスクリプトでは多くのセキュリティ上の欠陥が存在します。しかし、心配しないでください。私は一度これを修正すると固定されたものを手に入れます。ここに私のログインPHPスクリプトがあります。PHPログインスクリプトで行が選択されない

<?php 
$error=''; 
if(isset($_POST['submit'])){ 
    if(empty($_POST['username']) || empty($_POST['password'])) { 
     $error = "Username or Password is Invalid"; 
     echo "<script type='text/javascript'>alert('$error');</script>"; 
    } 
    else { 
     $user = $_POST['username']; 
     $pass = $_POST['password']; 

     $servername = "localhost"; 
     $username = "id1394453_users"; 
     $password = "password"; 
     $database = "id1394453_users"; 

     $conn = mysqli_connect($servername, $username, $password, $database); 

     if (!$conn) { 
      die("Connection failed: " . mysqli_connect_error()); 
     } 

     $query = mysqli_query($conn, "SELECT * FROM Users WHERE user='username' AND pass='password'"); 

     $rows = mysqli_query($conn, $query); 
     if (mysqli_num_rows($rows) == 1) { 
      header("Location: Home.html"); 
     } 
     else { 
      $error = "Username of Password is Invalid"; 
      echo "<script type='text/javascript'>alert('$error');</script>"; 
      echo "<script type='text/javascript'>alert('$user');</script>"; 
      echo "<script type='text/javascript'>alert('$pass');</script>"; 
      echo "<script type='text/javascript'>alert('$rows');</script>"; 
     } 
     mysqli_close($conn); 
    } 
} 

?>

私はそれがMySQLデータベースに接続すると、すべての変数が正しいことだということを確認するためにチェックしています。 (mysqli_num_rows($行)== 1){

は、それが他の経路をとる場合には、ライン26

に達したとき。それは私が望むものではありません。あなたが見ることができるように、私は何値$行があったかを確認するためにチェックし、それは何もなかった。それで、私の注意を25行目にします。

$行= mysqli_query($ conn、$ query);

私はすでに$ connをテストして接続が正しく機能していることを確認しています。これは、行23で定義されている$ query veriableにつながります。

$ query = mysqli_query($ conn、 "SELECT * FROM Users WHERE user = 'username' AND pass = 'password'");

これは私が思うところに問題がある場所です。問題は何が間違っているのか分かりません。テーブルは「ユーザー」と呼ばれ、私が望む列は「ユーザー名」と「パスワード」と呼ばれます。だからええ。私はここで間違って何をしていますか?

+1

あなたが二回 – nogad

+1

私はこの事は、ライブつもりはない願ってクエリを実行します。 *それはありますか?* –

答えて

2

ここでのクエリは静的に見えます。

$query = mysqli_query($conn, "SELECT * FROM Users WHERE user='username' AND pass='password'"); 

変数を正しく置き換える必要がありますか?あなたは忘れた$

$query = mysqli_query($conn, "SELECT * FROM Users WHERE user='$user' AND pass='$pass'"); 

また、エラーがあります。 $query$rowsである必要があります。

$query = mysqli_query($conn, "SELECT * FROM Users WHERE user='username' AND pass='password'"); 
$rows = mysqli_query($conn, $query); 

上記は完全に無効です。それはに置き換えてください:

$query = "SELECT * FROM Users WHERE username='$user' AND password='$pass'"; 
$rows = mysqli_query($conn, $query); 

そしてSQLインジェクション防止部を忘れないでください:

$user = mysqli_real_escape_string($conn, $_POST['username']); 
$pass = mysqli_real_escape_string($conn, $_POST['password']); 
+0

彼は '$ user'と' $ pass'を使用します – nogad

+0

@ thebootsie123いいえいいえ...更新された答えを確認してください。 –

+0

@nogad親切に質問をチェック! ':') ' –

関連する問題