PHP - 表单值无法正确传递

时间:2015-08-04 07:15:34

标签: php html mysql

首先,我为代码的混乱道歉。

我是PHP的新手,我正在观看视频并练习更新密码和确认。我能够通过电子邮件验证(空),但是一旦我尝试提交密码和新密码,它就会一直显示我没有填写密码和新密码。

有人可以帮我查看我的代码吗?非常感谢你。

<?php 
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    include ('connection.php');
    $errors = array();
    if (empty($_POST['email']))
    {
        $errors[] = 'Require your email! ';
    }
    else
    {
        $e = mysqli_real_escape_string($dbc, trim($_POST['email']));
    }
    if (empty($_POST['password']))
    {
        $errors[] = 'Require your password!';
    }
    else
    {
        $p = mysqli_real_escape_string($dbc, trim($_POST['password']));
    }
    if (!empty($_POST['newpass']))
    {
        if ($_POST['newpass'] != $_POST['conpass'])
        {
            $errors[] = "Your new password does not match the confirmed password!"; 
        }
        else
        {
            $np = mysqli_real_escape_string($dbc, trim($_POST['newpass']));
        }
    }
    else
    {
            $errors[] = 'You forgot to enter your new password!';
    }
    if(empty($errors))
    {
        $q = "SELECT id FROM users WHERE (email='$e' AND password='$p')";
        $r = mysqli_query($dbc, $q);
        $num = mysqli_num_rows($r);
        if($num == 1)
        {
            $row = mysqli_fetch_array($r, MYSQLI_NUM);
            $q = "UPDATE users SET password='$np' WHERE id = '$row[0]'";
            $r = mysqli_query($dbc, $q);
            if (mysqli_affected_rows($dbc) == 1 )
            {
                echo "You have succesfully update your password.";
            }
            else
            {
                echo "Your password could not be changed due to a system error, please try again.";
            }
            mysqli_close($dbc);
        }
        else
        {
                echo "The Email and the password were in correct.";
        }
    }
    else
    {
        echo "Error! The following error(s) occured: <br />";
        foreach($errors as $msg)
        {
            echo $msg."<br />";
        }
    }
}
?>
<h1>Change Password</h1>
<form action="update.php" method="post">
    <p>Email: <input type="text" name="email" size="20" maxlenght="30" value="<?php if(isset($_POST['email'])){echo $_POST['email'];} ?>" /></p>
    <p>Current Password: <input type="password" name"password" size="20" maxlength="30" value="<?php if(isset($_POST['password'])){echo $_POST['password'];} ?>" /></p>
    <p>New Password: <input type="password" name"newpass" size="20" maxlength="30" value="<?php if(isset($_POST['newpass'])){echo $_POST['newpass'];} ?>" /></p>
    <p>Confirm Password: <input type="password" name"conpass" size="20" maxlength="30" value="<?php if(isset($_POST['conpass'])){echo $_POST['conpass'];} ?>" /></p>
    <p><input type="submit" name="submit" value="Change Password" /></p>
</form>

2 个答案:

答案 0 :(得分:2)

您的HTML代码中存在语法错误。

你在这些方面错过了=个标志:

<input type="password" name"password" ...

应为<input type="password" name = "password"

<input type="password" name"newpass" ...

应为<input type="password" name = "password"

<input type="password" name"conpass" ...

应为<input type="password" name = "conpass"

名称标记对于 GET POST 方法非常重要。这是什么允许数据从输入字段发送到服务器。

答案 1 :(得分:0)

好的,这是您的代码的更新版本:

<?php 

if($_SERVER['REQUEST_METHOD'] == 'POST'){

    include ('connection.php');

    $errors = array();

    $email=trim($_POST['email']);
    $password=trim($_POST['password']);
    $newpass=trim($_POST['newpass']);
    $conpass=trim($_POST['conpass']);

    if (empty($email)) {
        $errors[] = 'Require your email! ';
    } else {
        $e = mysqli_real_escape_string($dbc, $email);
    }

    if (empty($password)) {
        $errors[] = 'Require your password!';
    } else {
        $p = mysqli_real_escape_string($dbc, $password);
    }

    if (!empty($newpass)) {
        if ($newpass != $conpass){
            $errors[] = "Your new password does not match the confirmed password!"; 
        } else {
            $np = mysqli_real_escape_string($dbc, $newpass));
        }
    } else {

            $errors[] = 'You forgot to enter your new password!';
    }


    if(empty($errors)){
        $q = "SELECT `id` FROM `users` WHERE (`email` LIKE '$e' AND `password` LIKE '$p') LIMIT 0, 1";
        $r = mysqli_query($dbc, $q);
        $num = mysqli_num_rows($r);

        if($num == 1){
            $row = mysqli_fetch_array($r, MYSQLI_NUM);

            $q = "UPDATE `users` SET `password` LIKE '$np' WHERE `id = '$row[0]'";
            $r = mysqli_query($dbc, $q);

            if (mysqli_affected_rows($dbc) == 1 ){

                echo "You have succesfully update your password.";

            } else {

                echo "Your password could not be changed due to a system error, please try again.";
            }

            mysqli_close($dbc);

        }  else {

                echo "The Email and the password were in correct.";
        }

    } else {
        echo "Error! The following error(s) occured: <br />";
        foreach($errors as $msg){
            echo $msg."<br />";
        }
    }

}

empty()检查之前,您需要trim() POST,同样在MySQL查询字符串中,您需要使用LIKE搜索密码和电子邮件,而不是{{1}因为字符串不是整数。

此外:

=

您忘记将<p>Email: <input type="text" name="email" size="20" maxlenght="30" value="<?php if(isset($_POST['email'])){echo $_POST['email'];} ?>" /></p> <p>Current Password: <input type="password" name="password" size="20" maxlength="30" value="<?php if(isset($_POST['password'])){echo $_POST['password'];} ?>" /></p> <p>New Password: <input type="password" name="newpass" size="20" maxlength="30" value="<?php if(isset($_POST['newpass'])){echo $_POST['newpass'];} ?>" /></p> <p>Confirm Password: <input type="password" name="conpass" size="20" maxlength="30" value="<?php if(isset($_POST['conpass'])){echo $_POST['conpass'];} ?>" /></p> <p><input type="submit" name="submit" value="Change Password" /></p> 置于=属性之后。