返回完整字段的空字段错误

时间:2019-10-08 06:06:49

标签: php html

我有一份用户注册表格,其中我收到名字,姓氏,电子邮件,密码和重复密码。我还进行了一些验证,这些验证会在URL中返回错误,以标识输入是否有效或为空。但是,尽管我填写了所有字段,但是当我尝试提交表单时,即使所有内容都正确填写,我也会收到空白字段的if条件。

HTML

<form method="post" action="includes/signup.inc.php" id="create_customer" accept-charset="UTF-8"><input type="hidden" name="form_type" value="create_customer" /><input type="hidden" name="utf8" value="✓" />
  <div id="first_name" class="clearfix large_form"> <label for="fname" class="login">Nome</label>
    <input type="text" value="" name="fname" id="fname" class="large" size="30" />
  </div>
  <div id="last_name" class="clearfix large_form"> <label for="lname" class="login">Sobrenome</label>
    <input type="text" value="" name="lname" id="lname" class="large" size="30" /></div>
  <div id="email" class="clearfix large_form"> <label for="email" class="login">E-mail</label> <input type="email" value="" name="email" id="email" class="large" size="30" /></div>
  <div id="password" class="clearfix large_form"> <label for="password" class="login">Senha</label> <input type="password" value="" name="pwd" id="password" class="large password" size="30" />
    <div id="password" class="clearfix large_form"> <label for="password" class="login">Repetir Senha</label> <input type="password" value="" name="pwd-repeat" id="password" class="large password" size="30" />
    </div>
    <div class="acceptsMarketing"> <input type="checkbox" id="customer[accepts_marketing]" name="customer[accepts_marketing]"> <label for="customer[accepts_marketing]">Assine a nossa
                    newsletter?</label></div>
    <div class="action_bottom"> <input class="btn action_button" name="signup-submit" type="submit" value="Inscrever-se" />
      <p class="right" style="padding-top: 8px;">
        <input class="btn action_button" type="submit" value="Recuperar Senha" />
        <p class="right" style="padding-top: 8px;">
          Já é cliente? <a href="login.php" id="customer_login_link">Entrar →</a></p>
    </div>
</form>

PHP

<?php

if(isset($_POST['signup-submit'])){
    require 'dbh.inc.php';

    $fname = $_POST['fname'];
    $lname = $_POST['lname'];
    $email = $_POST['email'];
    $pwd = $_POST['pwd'];
    $pwdrepeat = $_POST['pwd-repeat'];

    if(empty($fname) || empty($lname) || empty($email) || empty($password) || empty($passwordrepeat)) {
        header("Location: ../register.php?error=emptyfields&fname=".$fname."&lname".$lname."&email".$email."&pwd".$pwd."&pwdrepeat".$pwdrepeat);
        exit();
    }

    else if (!preg_match("/^[a-zA-Z0-9]*$/", $fname))
    {
        header("Location: ../register.php?error=invalidmail&email=".$email);
        exit();
    }
    else if (!preg_match("/^[a-zA-Z0-9]*$/", $lname))
    {
        header("Location: ../register.php?error=invalidmail&email=".$email);
        exit();
    }
    else if($pwd !== $pwdrepeat){
        header("Location: ../register.php?error=passwordcheck&fname=".$fname."&lname".$lname);
        exit();
    }
    else{
        $sql = "SELECT email FROM users WHERE email=?";
        $stmt = mysqli_stmt_init($conn);
        if(!mysqli_stmt_prepare($stmt, $sql)){
            header("Location: ../register.php?error=signuperror");
        exit();
        }
        else{
        mysqli_stmt_bind_param($stmt, "s", $email);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_store_result($stmt);
        $resultCheck = mysqli_stmt_num_rows($stmt);
            if($resultCheck > 0){
            header("Location: ../register.php?error=signuperrorUserTaken&email=".$email);
            exit();
            }
            else{
                $sql = "INSERT INTO users (fname, lname, email, pwd) VALUES (?, ?, ?, ?)";
                $stmt = mysqli_Stmt_init($conn);
                if(!mysqli_stmt_prepare($stmt, $sql)){
                    header("Location: ../signup.phperror=sqlerror");
                    exit();
                }
                else{
                    $hashedPwd = password_hash($pwd, PASSWORD_DEFAULT);
                    mysqli_stmt_bind_param($stmt, "ssss", $fname, $lname, $email, $pwd);
                    mysqli_stmt_execute($stmt);
                    header("Location: ../signup.php?signup=success");
                    exit();
                }
            }
        }
        mysqli_stmt_close($stmt);
        mysqli_close($conn);
    }
}
else{
    header("Location: ../signup.php");
    exit();
}

1 个答案:

答案 0 :(得分:2)

问题在这里:

$pwdrepeat = $_POST['pwd-repeat'];

if(empty($fname) || empty($lname) || empty($email) || empty($password) || empty($passwordrepeat)) {

您将$_POST['pwd-repeat']分配给$pwdrepeat,但是您选中了empty($passwordrepeat)。从未设置$passwordrepeat,这意味着empty($passwordrepeat)始终为true。这使得整个if条件始终为真。