使用PDO进行实时检查无效

时间:2013-08-30 21:10:23

标签: php jquery pdo

我正在使用JQuery检查用户名是否正在使用,但是我有一些问题。它总是卡在“搜索”中。下图显示了问题的确切原因。

enter image description here

Register.JS:

$(document).ready(function(){

$('#username').keyup(function() {

    var username = $(this).val();

    $('#usernameCheck').text('Searching...');

if (username === '')  {
    $('#usernameCheck').text('');
}else {
  $.post('usernamecheck', { username:username }, function(data) {
      $('#usernameCheck').text(data);

  });
}
});
});   

Register.php:

    <html>
    <head>
    <title>Register</title>
    <link rel='stylesheet' type='text/css' href='styles.css'>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>         
    <script type="text/javascript" src="JS/register.js"></script>             
    </head>
   </html>

<?php

echo '<form action="register.php?action=registerCheck" method="post" name="formOne">
  <br/><input type="text" id="username" placeholder="Username" maxlength="50" title="Maximum 50 charcters or less."><span id="usernameCheck"></span><br/>
  <br/><input type="password" name="passwordOne" placeholder="Password"  maxlength="60" title="Maximum 60 charcters or less."><br/>
  <br/><input type="password" name="passwordTwo" placeholder="Retype Password" maxlength="60" title="Must be the same as the password field above this."><br/>
  <br/><input type="text" name="email" placeholder="Email Address" title="Must be correct in-case admins wish to contact you."><br/>
  <br/><textarea disabled rows="1" cols="4" name="defSpamCheck">'.$spamCheck.'</textarea><br/>   
  <br/><textarea rows="1" cols="30" name="userSpamCheck" placeholder="Enter the 4 digit code above." title="Needed to check for bots."></textarea><br/>            
  <br/><input type="submit" value="Register" onclick="return validate()">
  </form>';
}

function registerCheck() {

global $PDO;  

// All the validations
if (!isset($_POST['username']) || empty($_POST['username'])) {
    echo '<br/>';
    echo '<p class="error">You missed out the usernane field.</p>';
    echo '<a href="register.php">Back</a>';
    endPage();      
} else if (!isset ($_POST['passwordOne']) || empty ($_POST['passwordOne'])) {
    echo '<br/>';
    echo '<p class="error">You missed out the password field.</p>';
    echo '<a href="register.php">Back</a>';
    endPage();
} else if (!isset ($_POST['passwordTwo']) || empty ($_POST['passwordTwo'])) {
    echo '<br/>';
    echo '<p class="error">You missed out the second password field.</p>';
    echo '<a href="register.php">Back</a>';
    endPage();
} else if ($_POST['passwordOne'] != $_POST['passwordTwo']) {
    echo '<br/>';
    echo '<p class="error">Passwords do not match.</p>';
    echo '<a href="register.php">Back</a>';
    endPage();
} else if (!isset ($_POST['email']) || empty ($_POST['email'])) {
    echo '<br/>';
    echo '<p class="error">You missed out the email field.</p>';
    echo '<a href="register.php">Back</a>';  
    endPage();
} else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    echo '<br/>';
    echo '<p class="error">Email not valid.</p>';
    echo '<a href="register.php">Back</a>';  
    endPage();        
} else if (!isset ($_POST['userSpamCheck']) || empty ($_POST['userSpamCheck'])) {
    echo '<br/>';
    echo '<p class="error">You missed out the spam check field.</p>';
    echo '<a href="register.php">Back</a>';
    endPage();
} else if (strlen($_POST['username']) > 50) {
    echo '<br/>';
    echo '<p class="error">Username has to be 50 characters or less.</p>';
    echo '<a href="register.php">Back</a>';
    endPage();        
} else if (strlen($_POST['passwordOne']) && strlen($_POST['passwordTwo']) > 60) {
    echo '<br/>';
    echo '<p class="error">Password has to be 60 characters or less.</p>';
    echo '<a href="register.php">Back</a>';
    endPage();         
} else if (strlen($_POST['username']) < 5) {
    echo '<br/>';
    echo '<p class="error">Username has to be greater than 5 characters.</p>';
    echo '<a href="register.php">Back</a>';
    endPage();        
} else if (strlen($_POST['passwordOne']) && strlen($_POST['passwordTwo'])  < 5) {
    echo '<br/>';
    echo '<p class="error">Password has to be greater than 5 characters</p>';
    echo '<a href="register.php">Back</a>';
    endPage();      
} else {
    $username = htmlspecialchars($_POST['username']);

    // Replace all these with $replace
    $sChars = array ("<", ">", "(", ")", "*", "&", "#", ":");
    $replace = ' ';

    // Trim to remove any blank spaces
    trim(str_replace($sChars, $replace, $username));        
    $password = sha1(htmlspecialchars($_POST['passwordOne']));
    $email = htmlspecialchars($_POST['email']);

    $stmtOne = $PDO->prepare("SELECT COUNT(`uID`) uUsername FROM `users` WHERE uUsername=? LIMIT 1");
    $stmtOne->bindParam(1, $username, PDO::PARAM_INT);
    $stmtOne->execute();
    $result = $stmtOne->fetch(PDO::FETCH_ASSOC);

    if ($result == 1) {
        echo '<br/>';
        echo '<p class="error">Username already in use, pick another one.</p>';
        echo '<a href="register.php">Back</a>';
        endPage();
    }

   $stmtTwo = $PDO->prepare("INSERT INTO `users` (uUsername, uPassword, uEmail) VALUES (?, ?, ?)");

    if ($stmtTwo->execute(array($username, $password, $email))) {
        echo '<br/>';
        echo '<p class="norm">Account created! You can now log in.</p>';
        header("Refresh:3; URL=login.php");
        endPage();
    } else {
        echo '<br/>';
        echo '<p class="error">We could not create your account, please try again later.</p>';
        header("Refresh:3; URL=login.php");
        endPage();
    }
}
}

?>

usernamecheck.php:

    <?php

include 'pdo.config.php';
include 'register.php';

global $username;

    $stmtOne = $PDO->query("SELECT COUNT(*) uUsername FROM `users` WHERE uUsername='$username'");
    $rows = $stmtOne->fetchALL();
    $count = count($rows);

    if ($count < 1) { 
        echo 'Username already in use, pick another one';
    } else if ($count == 0) {
        echo 'Username available';
    }


?>

但它不起作用,我做错了什么?

2 个答案:

答案 0 :(得分:0)

$count是行数。您的查询总是返回1行,因为它只返回一个计数。此外,您的if测试都在检查$count是否为0(我认为您打算为第一个编写$count == 1。)

$stmtOne = $PDO->prepare("SELECT COUNT(*) uUsername FROM `users` WHERE uUsername = :username");
$stmtOne->exec(array('username' => $username));
$row = $stmtOne->fetch(PDO::FETCH_OBJ);
$count = $row->uUsername;

if ($count == 1) { 
    echo 'Username already in use, pick another one';
} else if ($count == 0) {
    echo 'Username available';
}

答案 1 :(得分:0)

好的,所以我的代码是正确的,但我有一个小但很严重的错误。

(文档)$。就绪(函数(){

$('#username')。keyup(function(){

var username = $(this).val();

$('#usernameCheck').text('Searching...');

if (username === '')  {
$('#usernameCheck').text('');
}else {
$.post('usernamecheck', { username:username }, function(data) {
  $('#usernameCheck').text(data);

});
}
});
});   

在寻找文件的地方,我输入了“usernamecheck”。这不是usernamecheck.php。我错过了文件扩展名。