2013-05-11 1 views
1

Я только что начал кодирование в PHP, и я застрял в перенаправлении. Я принял информацию $ _POST из представленной формы и присвоил ее переменным. Я получаю 2 пароля: $ password и $ c_password. Моя цель - проверить, совпадают ли оба этих пароля, если они хотят, чтобы они хешировали их. Если нет, я хочу отправить обратно пользователя (перенаправление) на страницу register.php. Проблема в том, что я блокирую все под перенаправлением javascript, это работает. Но если я не блокирую скрипт после перенаправления js, пользователь регистрируется в БД и перенаправляется на страницу login.php. Вот что я закодированы до сих пор:Перенаправление скрипта с PHP после формы хеширования

<?php 

// Open database connection 
include 'db_connect.php'; 

// check existence and accept form data 
if(isset($_POST['username']) && isset($_POST['email']) && isset($_POST['password']) && isset($_POST['c_password'])) { 
$username = $_POST['username']; 
$email = $_POST['email']; 
$password = $_POST['password']; 
$c_password = $_POST['c_password']; 
} 

// Hash the password if password and c_password match 
if(strcmp($password, $c_password) == 0) { 
$password = hash('sha512',$_POST['password']); 
} 
else { ?> 
    <script type="text/javascript"> 
     document.location = './register.php?pass_nomatch=1'; 
    </script> 
<?php 
} 

// Create a random salt 
$random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true)); 

// Create salted password (Careful not to over season) 
$password = hash('sha512', $password.$random_salt); 

// Add your insert to database script here. 
// Make sure you use prepared statements! 
if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt) VALUES (?, ?, ?, ?)")) {  
$insert_stmt->bind_param('ssss', $username, $email, $password, $random_salt); 
// Execute the prepared query. 
$insert_stmt->execute(); 
// Close MYSQL database connection 
mysqli_close($mysqli); 
// Redirect user to login page 
header('Location: ./login.php'); 
} 

?> 

Если какой-либо один есть ответ на мой вопрос, пожалуйста, ответьте как можно скорее :)

+0

Что вы подразумеваете под перенаправлением? вы имеете в виду перенаправление пользователя на другую страницу? – samayo

+0

Я точно не знаю, каков ваш вопрос, но я бы предложил использовать заголовки для перенаправления (заголовок («Location: url /»);) как то, что вы делаете в конце, а не javascript, как в середине. – Matt

+0

@Matt Я попробовал заголовок ('register.php? Pass_nomatch = 1'); но он не работает, если после заголовка() есть код; – Dribba

ответ

0

Перенаправление страницы в PHP, вы можете использовать встроенные в функции header();

например: header('Location: http://www.yoursite.com/page.php')

Помните, что очень важно, чтобы вы положили, абсолютный путь, в качестве аргумента в заголовок. Вот почему от Wikipedia: HTTP_location.

Интернет стандарт требует абсолютного URI следовать заголовок Расположение , что означает, что он должен содержать схему [4] (например, HTTP :, HTTPS :, телнет :, электронной почты:) [5] и соответствует синтаксису схемы и семантика. Например, для синтаксиса и семантики HTTP-схемы для URL-адресов HTTP требуется «хост» (адрес веб-сервера) и «абсолютный путь » с дополнительными компонентами «порт» и «запрос». В случае , что нет абсолютного пути, он должен быть указан как «/», когда используется как URI запроса для ресурса. [6]

Теперь соответствующие пароли должны быть так же просто, как:

if($passwordA === $passwordB) { 
    // === is called, identity comparison operator. 
    // http://www.php.net/manual/en/language.operators.comparison.php 

else{ 
    header('Location: http://site.com/register.php?pass_nomatch=1'); 
    die("If you are not redirected in 5 seconds, click <a href='#'>here<a/> "); 
    } 
+0

Я хочу перенаправить пользователя на страницу register.php, если сбой совпадения пароля. Это возможно ? – Dribba

+0

Обновлено. проверьте его сейчас – samayo

+0

php NoOb, спасибо за решение .. работает как шарм: D .. в чем разница между if ($ password == $ c_password) и if ($ password === $ c_password)? – Dribba

1

Просто используйте:

header('Location: http://www.yoursite.com/page.php'); 

, а затем остановить сценарий:

die(); 

Это будет убедитесь, что сценарий остановлен.

+0

Исправить. Вызов 'header' в PHP не делает ничего, кроме как поместить другой заголовок ответа HTTP для отправки в« кучу », но это не влияет на дальнейшее выполнение скрипта. Если кто-то хочет закончить скрипт после вывода заголовка (redirect) и не выполнить ни один из следующего кода, нужно сделать это явно, используя 'die()' или 'exit'. – CBroe

Смежные вопросы