PHP-MySQL登录系统

PHP-MySQL登录系统,php,mysql,database,Php,Mysql,Database,这是我第一次使用PHP和MySQL创建一个登录系统,用户可以在其中输入用户名和密码,PHP脚本会检查数据库中是否存在用户名和密码 当用户输入正确的信息时,它会显示“成功登录到用户配置文件页面…”消息,这一切都很好。但是,如果用户输入了错误的信息,则会出现“对不起……您输入了错误的ID和密码……请重试……”消息,但页面为空白。为什么呢 <?php define('DB_HOST','localhost'); define('DB_NAME','test'); //name of databa

这是我第一次使用PHP和MySQL创建一个登录系统,用户可以在其中输入用户名和密码,PHP脚本会检查数据库中是否存在用户名和密码

当用户输入正确的信息时,它会显示“成功登录到用户配置文件页面…”消息,这一切都很好。但是,如果用户输入了错误的信息,则会出现“对不起……您输入了错误的ID和密码……请重试……”消息,但页面为空白。为什么呢

<?php
define('DB_HOST','localhost');
define('DB_NAME','test'); //name of database
define('DB_USER','root'); //mysql user
define('DB_PASSWORD',''); //mysql password

$con = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die(mysqli_connect_error());
/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
}
$db = mysqli_select_db($con,DB_NAME) or die(mysqli_connect_error()); 

/*
$ID = $_POST['user'];
$Password = $_POST['pass'];
*/
function SignIn(mysqli $con){
    session_start(); //starting the session for user profile page
    if(!empty($_POST['user'])){ //checing the 'user' name which is from Sign-in.html, is it empty or have some text
        $query = mysqli_query($con,"SELECT * FROM UserName where userName = '$_POST[user]' AND pass = '$_POST[pass]'") or die(mysqli_connect_error());
        $row = mysqli_fetch_array($query) or die(mysql_error());
        if(!empty($row['userName']) AND !empty($row['pass'])){
            $_SESSION['userName'] = $row['pass'];
            echo "SUCCESSFULLY LOGIN TO USER PROFILE PAGE...";
        }
        else{
            echo "SORRY...YOU ENTERED WRONG ID AND PASSWORD...PLEASE RETRY...";
        }
    }
}

if(isset($_POST['submit'])){
    SignIn($con);
}
?>

在我真正回答您的问题之前,我建议您对用户名和密码都使用
mysqli\u real\u escape\u string()。您可以使用
PDO
,它可以为您完成所有工作,在我看来,这样做的工作量更少

问题是您忘记在第一条if语句中添加另一个
else

if(!empty($_POST['user'])) { 
    // first block
    if(!empty($row['userName']) AND !empty($row['pass'])) {
       // first inner block  
    } else {

    }
} else {
  // this else is what your missing
}

首先,我必须声明,您的代码很容易出错,为什么要将会话用户名设置为密码
session_start()
必须位于文件的最顶端,而不是函数内部。作为一个警告练习,如果我的用户名是“
1”;删除数据库用户名;
”?@castis SQL injection我输入的密码是
”或1=1
,这是一种以我选择的任何用户身份登录的简单方法!您还应该使用合适的算法对密码进行散列-纯文本还不够好,因为如果数据库被盗,您的用户可能会暴露在他们其他帐户上的模拟中(因为,不幸的是,许多用户跨站点使用相同的电子邮件/密码组合)。它仍然不起作用。它把我带到一个空白页。我使用的是本地WAMP服务器。工作正常,谢谢!这只是一个测试脚本。我将添加适当的安全措施以避免SQL注入。@KevinShen不客气,Kevin,很高兴能提供帮助。我们现在可以结束问题,您可以将其标记为已解决。访问然后返回我的答案,并对复选框执行相同操作,直到它变为绿色,干杯!哦,是的,我也把我的代码改成了你的,但现在每次我登录它都会显示无效,即使用户名和密码正确。有什么想法吗?似乎if($user==$username&&$pass==$pw)if语句失败了。@KevinShen重新加载答案,并查看编辑下的底部:。这是我用来测试它的,它工作正常。是的,它工作正常。我找到了错误的根源。似乎我不能在查询行中使用$user和$pass,我必须使用$\u POST[user]和$\u POST[pass]
if(!empty($row['userName']) AND !empty($row['pass']))
if(!empty($row['userName']) AND !empty($row['pass']))
$row = mysqli_fetch_array($query);
    $username = $row['userName'];
    $pw = $row['pass'];

if($user==$username && $pass==$pw) {
// $user and $pass are from POST
// $username and $pw are from the rows

    $_SESSION['userName'] = $row['pass'];

    echo "Successfully logged in.";
    }

else { echo "Invalid."; }
$user = mysqli_real_escape_string($con,$_POST['user']);
$pass = mysqli_real_escape_string($con,$_POST['pass']);
$query = mysqli_query($con,"SELECT * FROM UserName 
        where userName = '$user' 
        AND pass = '$pass'") 
        or die(mysqli_connect_error());
<?php 
$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';

$con = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME) or die(mysqli_connect_error());

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
}

 function SignIn($con){

$_POST['user'] = "John";
$user = $_POST['user'];

$_POST['pass'] = "12345";
$pass = $_POST['pass'];

   // session_start(); //starting the session for user profile page
   if(isset($_POST['user'])){

$query = mysqli_query($con,"SELECT * 
        FROM UserName where userName = '$_POST[user]' 
        AND pass = '$_POST[pass]'") 
        or die(mysqli_connect_error());


$row = mysqli_fetch_array($query);
    $username = $row['userName'];
    $pw = $row['pass'];

if($user==$username && $pass==$pw) {
    echo "Successfully logged in.";
    }

else { echo "Invalid"; }


    } // brace for isset post user

} // brace for function

if(isset($_POST['submit'])){
   echo SignIn($con);
}
?>