2017-07-26 71 views
0

我有一个php登录脚本,它不会读取两行以上的数据库用户记录。它允许数据库中的前两个用户登录并拒绝其他用户。我能做什么。php登录脚本不能读取两行以上的数据库记录

这是代码

<?php 

session_start(); 

$host="localhost"; 
$myusername="root"; 
$mypassword="blaze"; 
$db_name="schoolmaxtas"; 

$con = mysqli_connect($host, $myusername, $mypassword, $db_name); 

if (!$con){ 
     die("Failed to connect to MySQL: " . mysqli_connect_error()); 
    } 


    $username = $_POST['username']; 
    $password = $_POST['password']; 


    $sql = "SELECT * FROM users WHERE username='$username' and password='$password'"; 
    $result = mysqli_query($con, $sql); 


    $count = mysqli_num_rows($result); 

    if($count==1){ 
     $_SESSION['username'] = $username; 
     $_SESSION['password'] = $password; 

     header("location:records.php"); 

    } 
    else{ 
    echo "incorrect username or password"; 
    } 
    ?> 
+1

获得两项纪录! !,一个想法是使数据库中的用户名字段唯一 –

+0

尝试直接在数据库上运行SELECT语句并检查结果 –

+0

共享表格模式可能有所帮助 – Kapparina

回答

-3

你使用的mysqli所以把这段代码

$count = mysqli_num_rows($con,$result); 
+2

根据[PHP文档](http://php.net/manual/en/mysqli-result.num-rows.php),mysql_num_rows只需要一个参数,即mysqli_result。它不需要连接对象, –

0

如果你的表的用户名或密码不是唯一最好是你有这样的IF

if($count>=1){ 
     $_SESSION['username'] = $username; 
     $_SESSION['password'] = $password; 

     header("location:records.php"); 

    } 
    else{ 
    echo "incorrect username or password"; 
    } 
-1

如果您的数据库架构允许使用非唯一的用户名,则此代码可能会返回两行用户名和密码被复制并停止工作。

if($count > 0) 

将为您提供更好的服务。

而且,从来没有把$直接_POST值到一个数据库查询,你应该总是消毒先去除可能影响查询任何字符,这是一个重要的习惯进入:

$username = mysqli_real_escape_string($con, $_POST['username']);