2013-06-06 117 views
0

我有一个注册用户的登录表单,但它似乎并不想在输入正确的电子邮件和密码时重定向。不知道为什么我从查询中取回0?我错过了明显的东西吗?PHP登录表单不能重定向

<?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='[email protected]' and password='e6a52beca192a3fd67c8a0ea52cdea29162dd265'" resource(3) of type (mysql result) 
+0

尝试使用完整的url:'header('location:http://localhost/admin/dashboard.php');'类似的东西。 –

+0

您是否将密码存储为纯文本? –

+0

@yogesh不,我存储为SHA1。我忘了提及,我也正在输入字段下看到我打电话给他们的错误变量。 – tonjaggart

回答

3

试试这个:

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

然后使用此查询:

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

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

+0

尝试过了,仍然得到同样的错误。我是全新的PHP,我一定会阅读你发布的内容。感谢您的领导@ChristianMark – tonjaggart

+0

你能发布错误信息吗? –

+0

这是我看到的错误消息:$ login_err =“

您的电子邮件或密码不正确。

”; – tonjaggart

0

使用exit; or die();后,这条线

if($count==1){ 
    $_SESSION['user']=$email; 
    header('location: ../dashboard.php');  
    exit; or die(); 
} 

,如果它不工作TR到位标题的这段JavaScript代码。

<?php 
$url = "http://localhost/admin/dashboard.php"; 
echo '<script> window.location = "'.$url.'";</script>'; 
?> 

希望它有助于..

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; 
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');”有一些问题!

+0

FROM dontblame WHERE email='[email protected]”和口令= 'e6a52beca192a3fd67c8a0ea52cdea29162dd265'”资源(3)型的(MySQL的结果) – tonjaggart

0

尝试使用这个..

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

下一个检查$count值,如果是,直到0,那么u必须使用其他方法来转换密码 和检查任何空间......请记住,header()必须之前调用任何实际的输出都可以通过普通的HTML标签,文件中的空行或PHP发送。

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

另外,请哈希和盐你的密码。这是你至少可以做的,以防万一被黑客攻击时保护你的用户的个人信息。