2013-02-28 23 views
0

Я создаю основную страницу регистрации и регистрации и по завершении формы смены пароля хочу перенаправить на changepassword.php? Success. Переадресованная страница отлично работает, если она введена в браузер, однако при отправке формы она перезагружает страницу changepassword.php вместо «успеха», и все, что находится из блока кода php, не отображается (т. Е. Форма, правый и нижний колонтитулы). Ниже мой changepassword.php код:Header Location не работает

<!DOCTYPE html> 
<html> 
<?php 
include ("storescripts/init.php"); 
protect_page(); 
include ("includes/overall/head.php"); 

if (empty($_POST) === false){ 
$required_fields = array('current_password','password','password_again'); 
foreach ($_POST as $key=>$value) { 
    if (empty($value) && in_array($key, $required_fields) == true) { 
     $errors[] = 'Fields marked with an asterisk are required'; 
     break 1; 
    } 
} 
if ($_POST['current_password'] === $member_data['mem_password']) { 
    if(trim($_POST['password']) !== trim($_POST['password_again'])){ 
     $errors[] = 'Your new passwords do not match'; 
    } else if (strlen($_POST['password']) <6) { 
     $errors[] = 'Your password must be at least 6 characters'; 
    } 
} else { 
    $errors[] = 'Your current password is incorrect'; 
} 
} 
?> 
<body> 
<?php include ("includes/overall/template_header.php");?> 
<div id="mainDivShort"> 
    <h1>Change Password</h1> 
    <div id="divBreak"></div> 
    <?php include ("includes/overall/column_left.php"); ?> 
    <div id="middleContent"> 
     <?php 
     if (isset($_GET['success']) && empty($_GET['success'])) { 
echo 'You have been registered successfully'; 
} else { 

    if (empty($_POST) === false && empty($errors) === true) { 
     //echo "**********************"; 
     change_password($session_mem_id, $_POST['password']); 
     header('Location: changepassword.php?success'); 
     exit(); 
    } else if (empty($errors) === false) { 
     echo output_errors($errors); 
    } 

    ?> 
     <form action="" method="post"> 
      <ul> 
       <li>Current Password*: <br> <input type="password" 
        name="current_password"> 
       </li> 
       <li>New Password*: <br> <input type="password" name="password"> 
       </li> 
       <li>Repeat New Password*: <br> <input type="password" 
        name="password_again"> 
       </li> 
       <li><input type="submit" value="Change"> 
       </li> 
      </ul> 
     </form> 
     <?php }?> 
    </div> 
    <?php include ("includes/overall/column_right.php"); ?> 
</div> 
<?php include ("includes/overall/template_footer.php");?> 
</body> 
</html> 

И только упаковывают вы должны смотреть на функции изменения пароля:

function change_password($mem_id, $password) { 
$mem_id = (int)$mem_id; 

mysql_query("UPDATE `members` SET `mem_password` = '$password' WHERE `mem_id` = $mem_id"); 
} 

пароль обновляет штраф в базе данных, это просто чисто не перенаправлять на страницу успеха. Заранее спасибо

+0

заголовок будет работать, если вы не сделаете «эхо» или «печать» раньше, поэтому ничего не выводите перед заголовком «header» – jcho360

+0

, перед тем, как выйти на любой выход и перед любым html. – Jrod

+0

Нет смысла использовать 'header', если вы выведете какой-либо html до этого –

ответ

-1

После вывода любого содержимого вы не можете поместить header('Location: changepassword.php?success');. Также переадресация header должна содержать абсолютный путь.

+2

Не для downvoter, но для этого нет необходимости использовать 'абсолютный путь' –

+0

@ Mr.Alien HTTP/1.1 требует абсолютного URI в качестве аргумента для» Location: – MarcinWolny

0

Директивы заголовка должны поступать перед контентом, любым контентом, включая разрывы строк, пробелы, html и т. Д., Иначе слишком поздно отправлять заголовки. Как только будет отправлено 1 бит контента, заголовки уже ушли.

+0

Хорошо, но «эхо» Вы были успешно зарегистрированы »; только становится истинным, выполняются условия для оператора if ниже. Так как же еще это можно выложить? – jhetheringt7

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