2017-04-18 186 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数据库和所有的变量是正确的。当它到达线26

如果(mysqli_num_rows($行)== 1){

它需要的其他路径。这不是我想要的。正如你所看到的,我检查了$ rows是什么值,它什么也没有。因此,我将注意力转移到第25行

$ rows = mysqli_query($ conn,$ query);

我已经在测试$ conn以确保连接正常工作。所以这使我想到这是在第23行

$查询= mysqli_query定义的$查询veriable($康恩, “SELECT * FROM用户WHERE USER = '用户名' 并通过= '密码'”);

这是我认为有麻烦的地方。问题是我不确定它有什么问题。该表被称为“用户”,我想要的列被称为“用户名”和“密码”。嗯是的。我在这里做错了什么?

+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请检查问题! ':'' –