我有一份用户注册表格,其中我收到名字,姓氏,电子邮件,密码和重复密码。我还进行了一些验证,这些验证会在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();
}
答案 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
条件始终为真。