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