我有一个注册用户的登录表单,但在输入正确的电子邮件和密码时似乎不想重定向。不知道为什么我从查询中找回0?我错过了一些明显的东西吗?
<?php
session_start();
require_once('includes/db_connect.php');
if($_SERVER["REQUEST_METHOD"] == "POST"){
// Define $email and $mypassword
$email = mysql_real_escape_string($_POST['email']);
$password = mysql_real_escape_string($_POST['password']);
$qry="SELECT * FROM dontblame WHERE email='$email' and password='$password'";
$result = mysql_query($qry);
$count = mysql_num_rows($result);
if($count==1){
$_SESSION['user']=$email;
header('location: ../dashboard.php');
}
else {
$login_err = "<p>Your email or password is incorrect.</p>";
}
mysql_close();
}
?>
编辑:这是我得到的错误......
FROM dontblame WHERE email='XXXXXXX@gmail.com' and password='e6a52beca192a3fd67c8a0ea52cdea29162dd265'" resource(3) of type (mysql result)
答案 0 :(得分:3)
试试这个:
$password = mysql_real_escape_string(hash("sha1",$_POST['password']));
然后使用此查询:
$qry = "SELECT * FROM dontblame WHERE email='".$email."' and password='".$password."'";
答案 1 :(得分:0)
在此行之后使用exit; or die();
if($count==1){
$_SESSION['user']=$email;
header('location: ../dashboard.php');
exit; or die();
}
如果它不起作用这个javascript代码代替标题。
<?php
$url = "http://localhost/admin/dashboard.php";
echo '<script> window.location = "'.$url.'";</script>';
?>
希望它有所帮助..
答案 2 :(得分:0)
重定向后使用die;
或exit
。并且在标题位置关闭会话写入之前。并尝试在header(location:http://localhost/admin/dashboard.php')
中使用完整路径。正如我的一些朋友所暗示的那样。
为什么要使用exit
或die
?
header() won't automatically stop the script from excecuting.
请试试这个: -
session_write_close();
header('Location: *where you want your form to go*');
die;
答案 3 :(得分:0)
尝试像这样调试这个程序:
$password = mysql_real_escape_string($_POST['password']);
$qry="SELECT * FROM dontblame WHERE email='$email' and password='$password'";
var_dump($qry);
$result = mysql_query($qry);
var_dump($result);
确保sql查询与您的想法相同。
或“header('location:../ dashboard.php');”有一些问题!
答案 4 :(得分:0)
尝试使用此..
$password=mysql_real_escape_string(sha1($_POST['password']));
下次检查$count
值,如果它为0,则必须使用其他方法转换密码
或检查是否有任何空格...请记住,在发送任何实际输出之前必须调用header()
,无论是普通HTML标记,文件中的空行还是PHP。
答案 5 :(得分:0)
我建议您转而使用mysqli,因为它更安全。 这是一个在mysqli中实现的代码的代码片段。
<?php
$host = "localhost";
$username = "anon";
$password = "secret";
$schema = "your database name";
$mysqli = new mysqli($host, $username, $password, $schema);
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT email FROM dontblame WHERE email=? and password=?";
if ($stmt = $mysqli->prepare($query)) {
/* bind parameters */
$stmt->bind_param("ss",$email,$pass);
$email = $_POST['email'];
$pass = $_POST['password'];
/* execute statement */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($result_email);
/* fetch values */
if($stmt->fetch()) {
$_SESSION['email'] = $resutl_email;
$success = true;
} else {
$success = false;
}
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
if($success){
header('location: ../dashboard.php');
exit();
} else {
$login_err = "<p>Your email or password is incorrect.</p>";
exit();
}
?>
为了安全编程,我还在重定向之前关闭了连接。 mysqli比使用常规的mysql方法有更多的好处,为查询准备参数是其中一个好处。
另外,请为您的密码哈希并加盐。这就是你可以做的最少的事情来保护你的用户的个人信息,以防你被黑了。