0

基本的なログインと登録のページを作成しています。パスワードの変更フォームに入力したら、changepassword.php?successにリダイレクトします。リダイレクトされたページはブラウザに入力すると正常に機能しますが、フォームを送信すると、?successではなくchangepassword.phpページが再読み込みされ、phpコードブロックから下のすべて(つまり、フォーム、列の右、フッター)が表示されません。以下は私のchangepassword.phpコードです:

<!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");
}

パスワードはデータベース上で正常に更新されますが、成功ページにリダイレクトされることはありません。前もって感謝します

4

2 に答える 2

0

ヘッダーディレクティブは、コンテンツ、コンテンツ、改行、スペース、htmlなどの前に配置する必要があります。そうしないと、ヘッダーを送信するには遅すぎます。1ビットのコンテンツが送信されるとすぐに、ヘッダーはすでに消えています。

于 2013-02-28T14:56:05.577 に答える
-1

header('Location: changepassword.php?success');コンテンツを出力した後に配置することはできません。またheader、リダイレクトには絶対パスを含める必要があります。

于 2013-02-28T14:51:28.850 に答える