如何解决php中的登录错误

时间:2014-12-28 20:35:09

标签: php html mysql

我在php中创建了一个登录页面。对于数据库,我在这里使用了mysql。如果我想登录它总是显示消息用户名密码错误...但已存在用户名和密码。所以我无法找出问题所在。

http://jsfiddle.net/Sazal/my4wvnvt/

这是我的登录设计页面..

这里是checklogin.php代码..

// userName and password sent from form
$myusername=$_POST['username'];
$mypassword=$_POST['pwd'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE userName='$myusername' and pass='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1 ){
// Register $myusername, $mypassword and redirect to file "login_success.php"
//session_register("myusername");
//$_SESSION['login_user']=$myusername; // Initializing Session
//$_SESSION['myusername']=$myusername;
//$_SESSION['password']=$mypassword;
//session_register("mypassword");
header("location:home.php");
}
else {
//echo "Wrong Username or Password";
header("Location:index.php?errorMssg=".urlencode("Wrong Username or Password"));
}
?>

3 个答案:

答案 0 :(得分:12)

您的表单元素没有名称属性。你不能依赖" id"单独

<input type="text" class="form-control" id="username" placeholder="Enter username">

<input type="text" class="form-control" id="pwd" placeholder="Enter password">

您需要添加它们,因为您要声明

$myusername=$_POST['username'];
$mypassword=$_POST['pwd'];

修改为:

<input name="username" type="text" class="form-control" id="username" placeholder="Enter username">

<input name="pwd" type="text" class="form-control" id="pwd" placeholder="Enter password">

我注意到您可能以纯文本格式存储密码。如果是这种情况,则非常气馁。

我建议您使用CRYPT_BLOWFISH或PHP 5.5&#39 {s} password_hash()功能。对于PHP&lt; 5.5使用password_hash() compatibility pack


旁注:您还应在每个标题后添加exit;

即:

if($count==1 ){
    header("location:home.php");
    exit;
}
else {
//echo "Wrong Username or Password";
    header("Location:index.php?errorMssg=".urlencode("Wrong Username or Password"));
    exit;
}


还需要考虑的一点是,您的列长度应足够长,以便像列类型那样容纳您的数据。

存储密码哈希时,我自己最充分地使用VARCHAR; 255.

我承认它有点矫枉过正,但那只是我。

答案 1 :(得分:0)

尝试:

<input name="username"...>

不是:

<input id="username"...>

密码相同。

它是索引$_POST数组的“name”属性的值。

另外,在php脚本中尝试var_dump($_POST);,在mysql端搜索错误之前测试你从html表单中实际收到的内容。

答案 2 :(得分:0)

您的输入字段没有名称属性使用name =“” 使用id和class不会通过邮件请求发送文件的值 如果没有name属性,则输入字段无法通过发布请求获取数据