0

我有一个注册用户的登录表单,但是当输入正确的电子邮件和密码时,它似乎不想重定向。不知道为什么我从我的查询中得到一个 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)
4

6 回答 6

3

尝试这个:

$password = mysql_real_escape_string(hash("sha1",$_POST['password']));

然后使用这个查询:

$qry = "SELECT * FROM dontblame WHERE email='".$email."' and password='".$password."'";

但请不要使用mysql_*。请改用PDOmysqli_*

于 2013-06-06T06:03:50.883 回答
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>';
?>

希望能帮助到你..

于 2013-06-06T06:06:23.227 回答
0

重定向后使用die;or exit。在标题位置关闭会话写入之前。并尝试header(location:http://localhost/admin/dashboard.php')像这样使用完整路径。正如我的一些朋友所建议的那样。

为什么使用exitor die

  header() won't automatically stop the script from excecuting.

请试试这个: -

 session_write_close();
 header('Location: *where you want your form to go*');
 die;
于 2013-06-06T06:07:28.490 回答
0

尝试使用这个..

$password=mysql_real_escape_string(sha1($_POST['password']));

下一个检查$count值,如果它直到 0,那么你必须使用其他方法来转换密码或检查任何空格......请记住,header()必须在发送任何实际输出之前调用它,无论是通过普通 HTML 标记、文件中的空白行还是来自 PHP。

于 2013-06-06T06:21:11.043 回答
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 方法有更多的好处,为查询准备参数是这些好处之一。

另外,请对您的密码进行散列和加盐。这是您在被黑客入侵时为保护用户的个人信息所能做的最起码的事情。

于 2013-06-06T06:23:39.443 回答
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');”有问题!

于 2013-06-06T06:08:30.933 回答