2013-06-06 2 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(); 
} 
?> 

Edit: Это ошибка я получаю ...

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_*. Вместо этого используйте PDO или mysqli_*.

+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(); 
} 

, если он не работает тр этого яваскрипта кода вместо заголовка.

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

Надежда Это помогает ..

0

После использования редиректа die; или exit. и перед закрытием записи заголовка. и попытайтесь использовать полный путь в header(location:http://localhost/admin/dashboard.php') вот так. как предлагают некоторые из моих frirnds также.

Зачем использовать exit или die?

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] 'и password =' ​​e6a52beca192a3fd67c8a0ea52cdea29162dd265 '"ресурс (3) типа (результат mysql) – tonjaggart

0

попробовать использовать это ..

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

следующий флажок $count значение, если это до 0, то и придется использовать другой метод для преобразования пароля или проверить наличие каких-либо пробелов ... Помните, что 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, подготовка параметров для запросов является одним из этих преимуществ.

также, пожалуйста, хэш и соль ваших паролей. это самое малое, что вы можете сделать, чтобы защитить личную информацию своих пользователей в случае взлома.