我是php和mysql的新手。我找到了一个很棒的教程,可以在网站上创建注册和登录部分。我正在设法很好地解构它并做出微小的改变。然而...
登录时,如果密码不正确,则验证并返回错误。如果正确则登录。
我遇到的问题是,如果您输入正确的密码但在其后面添加额外的字符既不验证也不登录。只需转到空白页面即可。这是登录页面的验证码 -
<?php
include('db.php');
if(!isset($_POST['login']))//checking if user has entered this page directly
{
include('form.php');
}
else{
if(isset($_POST['user'])&&$_POST['user']==""||!isset($_POST['user']))
{
$error[] = "Username Field can't be left blank";
$usererror = "1";
}
if(!isset($usererror))
{
$user = mysql_real_escape_string($_POST['user']);
$sql = "SELECT * FROM users WHERE user = '$user'";
if(mysql_num_rows(mysql_query($sql))=="0")//1 means there is one entry same so we print error
{
$error[] = "Can't find a user with this username";
}
}
if(isset($_POST['pass'])&&$_POST['pass']==""||!isset($_POST['pass']))
{
$error[] = "password Field can't be left blank";
}
if(isset($error)){
if(is_array($error)){echo "<div class=\"error\"><span>please check the errors and refill the form<span><br/>";
foreach ($error as $ers) {
echo "<span>".$ers."</span><br/>";
}
echo "</div>";
include('form.php');
}
}
if(!isset($error)){
$suser=mysql_real_escape_string($_POST['user']);
$spass=md5($_POST['pass']);//for secure passwords
$find = "SELECT * FROM users WHERE user = '$suser' AND password = '$spass'";
if(mysql_num_rows(mysql_query($find))=="1"or die(mysql_error())){
session_start();
$_SESSION['username'] = $suser;
header("Location: loggedin.php");
}
else{
echo "<div class=\"warning\"><span>Some Error occured durring processing your data</div>";
}
}
}
?>
任何帮助将不胜感激......
修改
我刚刚注意到,我得到的唯一错误是输入了无密码。如果输入的密码不正确,我会得到空白页。任何人都可以帮助解密密码的原因吗?
答案 0 :(得分:2)
使用 trim()
处理字符串前后的额外空格
看起来像是一个逻辑问题。您需要使用括号来组织条件:
if(
(isset($_POST['pass'])&&$_POST['pass']=="")
||
!isset($_POST['pass'])
)
答案 1 :(得分:0)
if(mysql_num_rows(mysql_query($ find))==“1”或die(mysql_error())){
如果SQL查询没有返回任何结果(意味着密码和用户名不匹配),则if语句返回false并且没有任何反应。在这种情况下,您应该返回错误消息。
编辑:
之后我没有注意到其他声明。我认为实际问题是死(mysql_error())。当SQL查询没有返回任何结果时,if语句将执行die(mysql_error()),这将返回一个空白,因为空结果不是错误。
我建议你删除die(mysql_error())并包含一个单独的if语句来检查mysql_errno()(当出现错误时返回true)。
if(mysql_errno()){ 死亡(mysql_error()); }
值得注意的是,在最近的PHP版本中不推荐使用mysql_ *函数。建议使用MySQLi或PDO以PHP连接MySQL。
答案 2 :(得分:0)
试试这个,看它是否有效。
if(mysql_num_rows(mysql_query($find))=="1") {
session_start();
$_SESSION['username'] = $suser;
header("Location: loggedin.php");
} else {
echo "<span>Your username or password was incorrect.</span>";
include "form.php";
die;
}