PHP登录表单不重定向

时间:2013-06-06 05:50:42

标签: php forms validation login

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

6 个答案:

答案 0 :(得分:3)

试试这个:

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

然后使用此查询:

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

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

答案 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')中使用完整路径。正如我的一些朋友所暗示的那样。

为什么要使用exitdie

  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方法有更多的好处,为查询准备参数是其中一个好处。

另外,请为您的密码哈希并加盐。这就是你可以做的最少的事情来保护你的用户的个人信息,以防你被黑了。