0

最近質問したところ、コードを次のように修正しました。

{ 
//Check if user already exists 
$un_check = mysql_query("SELECT Username FROM users WHERE Username = '$un'");  
if(mysql_num_rows($un_check) >0) {
echo "Username already exists";
}
else{
 // Username Free
}

サインアップすると、「ユーザー名は既に存在します」と表示されますが、とにかくアカウントを作成でき、同じ情報がデータベースに追加されます。

これは私のコードまたはデータベースの問題ですか?

4

6 に答える 6

3

テーブルに同じ値を 2 回入力することを禁止するには、一意のインデックスを作成します。

既存のエントリをチェックすることと、同じ値を持つ別の行を挿入できないようにすることは別のことです。

このようなインデックスを追加すると、次のように機能します。

ALTER TABLE `users` ADD UNIQUE `MY_UNIQUE_INDEX` ( `username` ) 
于 2013-06-25T13:58:20.620 に答える
0

別の方法は、スクリプトを殺すことです。つまり、die();関数を使用します。これにより、どこに配置してもスクリプトが停止します。次のように挿入します。

//Check if user already exists 
$un_check = mysql_query("SELECT Username FROM users WHERE Username = '$un'");  
if(mysql_num_rows($un_check) >0) {
    echo "Username already exists";
    die(); // Don't continue, as we don't want to insert a username
}
else{
    // Username Free
}

これは機能しますが、ユーザー名が存在するかどうかに関係なく実行したい他のコードがある場合は、他のelse{}人が提案したように、ブロック内にユーザーを挿入するコードを配置するだけです。

于 2013-06-25T14:06:35.987 に答える
-1

私は同じ問題を通過しましたが、私の解決策はこれでした

<?php
//Connection Script Start
$mysql_host = "localhost";
$mysql_user = "root";
$mysql_password = "*******";
$mysql_database = "db_name";
$connect = mysqli_connect($mysql_host, $mysql_user, $mysql_password, $mysql_database);
//Connection Script Ends

$un = "userabc";
$search = "SELECT * FROM table_name WHERE username='$un'";
$query = mysqli_query($connect, $search);
$i = mysqli_num_rows($query);
if($i==0){
//username free
}else{
echo "This username is already taken";
}
?>
于 2013-06-25T14:14:21.127 に答える