0

我希望 PHP 确保用户名尚未使用,并检查该字段是否为空。对不起,当谈到 php 时,我是一个大菜鸟。这是我的代码:

// Check for an Username:
    $dup = mysql_query("SELECT user_username FROM users WHERE user_username='".$_POST['user_username']."'");
        if(mysql_num_rows($dup) >0){
            $errors[] = 'Username already used.';
        }
        else{
            $un = mysqli_real_escape_string($dbc, trim($_POST['user_username']));
            echo '<b>Congrats, You are now Registered.</b>';
        }
        else {
            $errors[] = 'You forgot to enter your Username.';
            }
4

2 回答 2

0

您有两个else不能使用的语句。此外,您需要转义您的$_POST数据。最后,随着时间的流逝,您应该远离 mysql_* 函数。使用 mysqli 或 PDO。

<?php
$sql = sprintf("SELECT user_username FROM users WHERE user_username='%s'",
        mysql_real_escape_string($_POST['user_username']));
$dup = mysql_query($sql);
if(empty($_POST['user_username'])){
    $errors[] = 'You forgot to enter your Username.';
}elseif(mysql_num_rows($dup) >0){
    $errors[] = 'Username already used.';
}else{
    $un = mysqli_real_escape_string($dbc, trim($_POST['user_username']));
    echo '<b>Congrats, You are now Registered.</b>';
}?>

在我看来,另一种更简单的流程是 try/catch 语句。这样,如果用户名为空,您就不必进行不必要的数据库调用:

<?php
try{
    if(empty($_POST['user_username'])){
        throw new Exception('You forgot to enter your Username.');
    }

    $sql = sprintf("SELECT user_username FROM users WHERE user_username='%s'",
        mysql_real_escape_string($_POST['user_username']));
    $dup = mysql_query($sql);

    if(mysql_num_rows($dup) >0){
        throw new Exception('Username already used.');
    }

    echo '<b>Congrats, You are now Registered.</b>';

}catch(Exception $e){
    echo $e->getMessage();
}?>
于 2012-11-30T17:01:37.107 回答
0

在执行任何 SQL 查询之前,您应该先检查输入是否存在。

if (!empty($_POST['user_username']) && isset($_POST['user_username'])) {
  $dup = mysql_query("SELECT user_username FROM users WHERE user_username='".$_POST['user_username']."'");
  if(mysql_num_rows($dup) >0){
    $errors[] = 'Username already used.';
  }
  else {
    echo 'Username is available.';
  }
}
else {
  $errors[] = 'Username is empty';
}

正如其他人评论的那样,不推荐使用 mysql_* 函数,您还需要考虑如何清理输入。

于 2012-11-30T17:09:07.120 回答