在正确的页面上回应$ _POST错误

时间:2013-03-01 06:45:17

标签: php html mysql forms mysqli

感谢阅读。

我有一个问题是在表单提交后在正确的页面上回显错误。提交表单后,它会重定向到 website.com/controllers/accountController.php 。我希望刷新当前页面, website.com/play.php?p=myaccount

请注意表单正在提交,只是在重定向页面上打印错误而不是带有表单的页面。

take a look at my previous question(相关但完全不同的问题)。

HTML表单(myaccount.inc.php):

<div id="change-password">

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

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

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

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

        <div><label class="DEVON" 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代码(accountController.php):

<?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 />";
}

3 个答案:

答案 0 :(得分:3)

if(isset($_POST['submit'])=='Change Password')声明错误。

由于isset始终返回Boolean,因此您的ID不会永久执行。

您可以将其用作

if(isset($_POST['submit']) && $_POST['submit'] =='Change Password')

答案 1 :(得分:0)

if(isset($_POST['submit'])=='Change Password')

isset在将其与更改密码进行比较时返回false为false将返回false

问候。

答案 2 :(得分:0)

if(isset($ _ POST ['submit'])=='更改密码') 这种用法在php中无效