我在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"));
}
?>
答案 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属性,则输入字段无法通过发布请求获取数据