0

データベースでユーザー名が使用されているかどうかを確認することで何か新しいことを学び、オンラインで見つけたチュートリアルに基づいてコードを作成しました。私は論理を理解していますが、正しい方法でアプローチしたかどうかはわかりません。本質的に。情報はフォームフィールドから渡されます。入力された内容がデータベースのフィールドと一致する場合は、結果「yes」を返す/エコーする必要があります。一致しない場合は、「no」をエコーする必要があります。簡単そうです。

チュートリアルは、事前に決定された値を対象に設計されています。すなわち$existing_users= array('test'、'' one'、' two'、three');

'test'、'' one'、' two'、three'が実際にデータベースから動的にプルされるようにしたいのですが。

そこで、動的な値を配置しようとすると、作成したコードが機能しないものの、そのように設定を追加しようとしました。私のコードは次のとおりです。

$existing_users = array();
mysql_select_db($database_db, $db);
$result = mysql_query('SELECT * FROM clients') or exit(mysql_error());
while ($row = mysql_fetch_assoc($result)) {$existing_users[] = $row['shortcode'];}

$arr = $existing_users;

$display = "'" . implode("', '", $arr) . "'";

    // THIS IS THE PROBLEM 
    // If the code is written out as:
    // $existing_users=array('test',''one','two',three'); 
    // It works.
    // When the script is coded as below. It doesn't work.
    // Note. If I echo $display is displays 'test',''one','two',three'

$existing_users=array($display);

//value received from the get method
$user_name=$_POST['user_name'];

//checking weather user exists or not in $existing_users array
if (in_array($user_name, $existing_users))
{

//user name is not available
echo "no";
} 
else
{ 
//user name is available 
echo "yes";
}

オンラインのtuteをハッキングしているため、これに正しい方法でアプローチしているかどうかはわかりません。はるかに簡単な方法がある可能性があります。どんな考えでも大歓迎です。

4

2 に答える 2

3

これを行うためのより速い方法は次のとおりです。

$user_name=mysqli_real_escape_string($_POST['user_name']);

$result = mysql_query("SELECT * FROM clients where shortcode like '$user_name'") or exit(mysql_error());

if(mysql_num_rows($result)==0)
    echo 'no';
else
    echo 'yes'

$_POSTthoからの入力を検証しませんでした

とにかくどのチュートリアルをフォローしていますか?

于 2012-08-26T00:13:09.193 に答える
1

$existing_usersデータベースクエリからその配列をすでに作成しているので、作り直す必要はありません。

$existing_users = array();
mysql_select_db($database_db, $db);
$result = mysql_query('SELECT * FROM clients') or exit(mysql_error());
while ($row = mysql_fetch_assoc($result)) {
    $existing_users[] = $row['shortcode'];
}

$user_name=$_POST['user_name'];

if (in_array($user_name, $existing_users)){
    echo "no";
} else { 
    //user name is available 
    echo "yes";
}

コードをPDOに移動してみてください

$db = new PDO('mysql:host=localhost;dbname='.$database_db, 'username', 'password', array(ATTR::PDO_EMULATE_PREPARES => false));
$stmt = $db->prepare("SELECT * FROM clients WHERE `shortcode`=:shortcode");
$stmt->execute(array(':shortcode' => $_POST['user_name']));

if($stmt->rowCount() == 1){
    echo 'no';
} else {
    echo 'yes';
}
于 2012-08-26T00:11:36.053 に答える