0

こんにちは、お時間をいただきありがとうございます。

私が行った調査の量に関係なく、この問題に対する既に議論されている解決策を見つけることができません。

問題は、一見フォームを投稿せずに、送信ボタンが自動的にリダイレクトされることです。MySQL関数からMySQLiに変換するまでは機能しました。ウェブサイトのこの部分を除いて、他のすべてが機能しています。

HTML フォーム (myaccount.inc.php):

<div id="change-password">

<form class="clearfix" action="" method="post">

        <div><span class="he1">Change Password</span></div>

        <div>
            <?php include_once 'controllers/accountController.php'; ?>
        </div>

        <div><label class="fieldlabel" for="password">Current Password:</label></div>
        <input type="password" name="password" id="password" size="23" /><br />

        <div><label class="fieldlabel" for="passwordnew1">New Password:</label></div>
        <input type="password" name="passwordnew1" id="passwordnew1" size="23" /><br />

        <div><label class="fieldlabel" for="passwordnew2">Confirm New Password:</label></div>
        <input type="password" name="passwordnew2" id="passwordnew2" size="23" /><br />

        <input type="submit" name="submit" value="Change Password" class="bt_changepass" />

</form>

</div>

このフォームは、適切な用語がないため、PHP によって制御されます。

PHP (accountController.php):

// Checking whether the Password Change form has been submitted.
if(isset($_POST['submit'])=='Change Password')
{
echo "<br />";

// Get the data from the database.
$sql = $mysqli->query("SELECT * FROM ss_members WHERE usr = '".$_SESSION['usr']."' AND pass = '".md5($_POST['password'])."'");
$row = $sql->fetch_assoc();

// Will hold our errors
$err = array();

if($_POST['password'] == "" || $_POST['passwordnew1'] == "" || $_POST['passwordnew2'] == "")
{
    $err[] = 'All the fields must be filled in!';
}

if(!$row['pass'] == md5($_POST['password']) && $_POST['passwordnew1'] != "" && $_POST['passwordnew2'] != "")
{
    $err[] = 'Current password is not correct!';
}

if($_POST['passwordnew1'] <> $_POST['passwordnew2'])
{
    $err[] = 'New passwords do not match!';
}

if(!count($err))
{
    if($row['usr'])
    {
        // If everything is OK change password.
        $stmt = $mysqli->prepare("UPDATE ss_members SET pass = md5(?) WHERE usr = {$_SESSION['usr']}");
        $stmt->bind_param('s', $_POST['passwordnew1']);
        $stmt->execute();
        $stmt->close();

        echo "Password has been sucessfully updated!<br />";
    }
    else
    {
        $err[]='Something broke!';
    }
}

if($err)
{
    // Save the error messages in the session.
    foreach($err as $error)
    {
        echo $error . "<br />";
    }   
}

echo "<br />";
}
4

5 に答える 5

4

actionタグに設定がなく<form>、データを同じファイルに送信しています。すなわち、myaccount.inc.php

次のように変更します。

<form class="clearfix" action="accountController.php" method="post">
于 2013-03-01T05:57:29.873 に答える
1

mysqli はクラスであり、その関数クエリは静的ではないため、使用する前に mysqli クラスのインスタンスを宣言する必要があります$mysqli->query

あなたは置くべきです

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

$sql = $mysqli->query("SELECT * FROM ss_members WHERE usr = '".$_SESSION['usr']."' AND pass = '".md5($_POST['password'])."'");
于 2013-03-01T06:33:49.870 に答える
1

これを試して :

フォームアクションを与えるaccountController.php

<form class="clearfix" action="accountController.php" method="post">

于 2013-03-01T05:57:47.190 に答える
1

問題は、あなたが含めていることです

<?php include_once 'controllers/accountController.php'; ?>

ヘッダーが送信された後。

次のいずれかを移動できます。

<?php include_once 'controllers/accountController.php'; ?>

ページの上部、ハンドラー部分内、またはフォームを送信することができます

controllers/accountController.php

使用して

<form class="clearfix" action="controllers/accountController.php" method="post">

于 2013-03-01T06:02:19.243 に答える
1

フォルダ内に存在する actionため、これに変更します。accountController.phpcontrollers

<form class="clearfix" action="controllers/accountController.php" method="post">
于 2013-03-01T06:02:44.860 に答える