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使用できない2つのステートメントがあります。また、データをエスケープする必要があります$_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 に答える