我错过了什么导致:命令不同步;你现在不能运行这个命令?
问题描述:
$ recruitcheck/$ badgecheck实际上可以正常工作,并且它可以正确返回,并且它提供了已验证的回显,但是我认为我在存储/绑定/关闭方面做了一些不正确的事情,因为我在准确计算有用。我错过了什么导致:命令不同步;你现在不能运行这个命令?
问题出现在$ emailcheck/$ namecheck中,因为它不能准确地返回查询,而且它有点绕过$ register阶段,它返回错误echo,所以$ emailcheck/$ namecheck总是假/ 0。
我以前工作过,但我试图实现一些安全功能,因此我添加了准备好的语句,并且在添加这些语句之前我几乎不知道我在做什么,所以如果此问题不恰当,信息不够。如果您发表评论,我将编辑该帖子以使其更具相关性。请给我机会。
$recruitcheck = mysqli_prepare($maindb, "SELECT aurapass, recruitbadge FROM auras WHERE auraname = ?");
mysqli_stmt_bind_param($recruitcheck, "s", $recruitername);
mysqli_stmt_execute($recruitcheck);
mysqli_stmt_bind_result($recruitcheck, $passcheck, $badgecheck);
mysqli_stmt_fetch($recruitcheck);
if($passcheck == $recruitpass){
if($badgecheck == "valid"){
mysqli_close($recruitcheck);
echo "<script>alert('Recruiter badge verified.')</script>";
$emailcheck = mysqli_prepare($maindb, "SELECT * FROM auras WHERE email = ?");
mysqli_stmt_bind_param($emailcheck, "s", $email);
mysqli_stmt_execute($emailcheck);
mysqli_stmt_fetch($emailcheck);
$namecheck = mysqli_prepare($maindb, "SELECT * FROM auras WHERE auraname = ?");
mysqli_stmt_bind_param($namecheck, "s", $auraname);
mysqli_stmt_execute($namecheck);
mysqli_stmt_fetch($namecheck);
if(mysqli_num_rows($emailcheck)>0 || mysqli_num_rows($namecheck)>0){
die("<script>alert('New auraname/email is already taken.')</script>");
}
else{
mysqli_close($emailcheck);
mysqli_close($namecheck);
if($email == $emailconfirm){
$register = mysqli_prepare($maindb, "INSERT INTO auras (recruitername, recruitmethod, email, birthday, country, gender, auraname) VALUES (?, ?, ?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($register, "sssisss", $recruitername, $recruitmethod, $email, $birthday, $country, $gender, $auraname);
mysqli_stmt_execute($register);
mysqli_close($register);
if(!$register) {
echo mysqli_error($maindb);
die("<script>alert('Error returned during registration: See bottom of page.')</script>");
}
else{
die("<script>alert('New aura registered successfully!')</script>");
$ passcheck/$ badgecheck只是绑定变量,他们被称为唯一的地方是,你看到他们在这里。否则:
$recruitpass = cleaninput($_POST["recruitpass"]);
和
function cleaninput($info) {
$info = trim($info);
$info = stripslashes($info);
$info = htmlspecialchars($info);
return $info;}
的recruitcheck实际工作,因为它与不正确与正确输入改变,但代码不正确地移动到下一个检查。
答
你叫mysqli_close()
为$emailcheck
和$namecheck
查询你叫他们mysqli_num_rows()
之前。
正是我要说的。 @BaileyF我想添加一个101的调试技巧:剪切一些代码直到它工作,然后逐行放回去。这不是唯一的技术,并不总是最好的,但对于初学者来说可能是非常有用的,有时也可以快速找出问题的根源。 –
我插入了一个fetch,但它仍然不运行$ emailcheck/$ namecheck。 –
@BaileyF:请向我们展示'$ passcheck','$ recruitpass'和'$ badgecheck'的内容。 –