PHP查询未按预期工作.Insert语句在应该显示错误时运行



我想知道是否可以获得一些帮助,了解我正在创建的网站的注册页面中哪里出了问题。

当用户创建帐户时,会进行检查以确保他们输入的用户名和电子邮件尚未被使用。如果两者都没有,那么他们输入的信息就会输入到我设置的SQL表中。目前,尽管这还没有达到应有的效果,但如果已经获取了电子邮件地址,则会显示一个错误,但如果用户名已经获取,则不会显示任何错误,并将信息插入SQL表中。

这就是我现在拥有的:

<body>
<?php
//if form has been submitted process it
if(isset($_POST['submit'])){

//collect form data
extract($_POST);

if($name==''){
$error[] = 'Please enter your name.';
}

if($username ==''){
$error[] = 'Please enter the username you would like.';
}
if($email==''){
$error[] = 'Please enter your email address.';
}

if($age < 18){
$error[] = 'You are too young to create an account with this site.';
}

if ($age==''){
$error[] = 'Please enter your age.';
}

if($email==''){
$error[] = 'Please enter your email address.';
}

if($password ==''){
$error[] = 'Please enter your password.';
}

if($passwordConfirm ==''){
$error[] = 'Please confirm the password.';
}

if($password != $passwordConfirm){
$error[] = 'Passwords do not match.';
}


if(!isset($error)){
$query = $dbconn->prepare('SELECT username FROM users WHERE username = ?');
$query->bindValue( 1, $username );
$query->execute();

if( $query->rowCount() > 0 ) { # If rows are found for query

echo '<p class="error" align="center">An account has already been made using this username</p>';

}

$query = $dbconn->prepare('SELECT email FROM users WHERE email = ?');
$query->bindValue( 1, $email );
$query->execute();

if( $query->rowCount() > 0 ) { # If rows are found for query

echo '<p class="error" align="center">An account has already been made using this email address</p>';

}
else {

try {
$hashedpassword = password_hash($password, PASSWORD_BCRYPT);

//insert into database

$stmt = $dbconn->prepare('INSERT INTO users (username,name,password,email,role,age,passwordchange) VALUES (:username, :name, :password, :email, :role, :age, :passwordchange)') ;
$stmt->execute(array(
':username' => $username,
':name' => $name,

':password' => $hashedpassword,

':email' => $email,
':role' => "user",

':age' => $age,

':passwordchange' => 0

));
//redirect to login page
header('Location: login.php');
exit;
} catch(PDOException $e) {
echo $e->getMessage();
}           
}
}

}
//check for any errors
if(isset($error)){
foreach($error as $error){
echo '<p class="error" align="center">'.$error.'</p>';
}
}

?>
<div class = "register">
<form action='' method='post' align = "center">
<h2>Register an account</h2>
<p><label>Name</label><br />
<input type='text' name='name' value='<?php if(isset($error)){ echo $_POST['name'];}?>'></p>
<p><label>Username</label><br />
<input type='text' name='username' value='<?php if(isset($error)){ echo $_POST['username'];}?>'></p>
<p><label>Email Address</label><br />
<input type='email' name='email' value='<?php if(isset($error)){ echo $_POST['email'];}?>'></p>

<p><label>Age</label><br />
<input type='age' name='age' value='<?php if(isset($error)){ echo $_POST['age'];}?>'></p>
<p><label>Password</label><br />
<input type='password' name='password' value='<?php if(isset($error)){ echo $_POST['password'];}?>'></p>

<p><label>Confirm Password</label><br />
<input type='password' name='passwordConfirm' value='<?php if(isset($error)){ echo $_POST['passwordConfirm'];}?>'></p>
<p><input type='submit' name='submit' value='Register'></p>

<p>Already a member? <a href="login.php">Log in</a></p>
</form>
</div>
</body>

更多信息:

如果我交换用户名和电子邮件查询,则会显示一个错误,如果用户名已经被使用,但没有与电子邮件一起使用。

如果我没有else语句和插入数据库的代码,那么两个查询都会返回一个错误。我只是真的很困惑我哪里出了问题,任何帮助都将不胜感激

编辑:

所以我仍然很困惑为什么这不起作用,我已经像其他项目一样做了这件事,而且效果很好,所以我不知道为什么它在这里不起作用。

评论建议将else与第二个if语句放在一起进行电子邮件检查,然后我收到一个错误,说";出乎意料";。那么,我还能做些什么来解决这个问题呢?

我设法弄清楚了,是的,这是一个逻辑问题导致了这个问题。这就是我现在的做法,它运行得很完美:

$userQuery = $dbconn->prepare( 'SELECT username FROM users WHERE username = ?');
$userQuery->bindValue( 1, $username );
$userQuery->execute();
$emailQuery = $dbconn->prepare( 'SELECT email FROM users WHERE email = ?' );
$emailQuery->bindValue( 1, $email );
$emailQuery->execute();

if($userQuery->rowCount() > 0 && $emailQuery->rowCount() > 0  ) {

echo '<p class="error" align="center">An account has already been made using this username</p>';
echo '<p class="error" align="center">An account has already been made using this email address</p>';
}

else if( $userQuery->rowCount() > 0 ) { # If rows are found for query
echo '<p class="error" align="center">An account has already been made using this username</p>';
}

else if( $emailQuery->rowCount() > 0 ) { # If rows are found for query
echo '<p class="error" align="center">An account has already been made using this email address</p>';
}

相关内容

最新更新