2016-12-14 7 views
0

私はこのコードを書いていますが、ユーザーを追加する作業はしていますが、重複したユーザーに対しては同じユーザー名の値を再度保存しました。私はusernameが既に取られている場合、ポップアップメッセージを与えたい。私は初心者を助けてください。ユーザー名の検証は機能しません

<?php 
ob_start(); 
    include("db.php"); 
    if(isset($_POST['send'])!="") { 
    $username = mysqli_real_escape_string($con, $_POST['username']); 
    $usermail = mysqli_real_escape_string($con, $_POST['usermail']); 
    $usermobile = mysqli_real_escape_string($con, $_POST['usermobile']); 
    $bool = true; 
    $con = mysqli_connect("localhost","root","","demo"); 
    $result = mysqli_query("SELECT `username` FROM `sample` WHERE username = '$username'"); 
    if(mysqli_num_rows($result)>0) 
    { 
      Print '<script>alert("Username has been taken!");</script>'; 

     } 
     if ($bool) { 
     $inssql = "insert into sample set 
     username = '" . $username . "', 
     emailid = '" . $usermail . "', 
     mobileno = '" . $usermobile . "', 
     created = now()"; 
     $update = mysqli_query($con, $inssql); 


     } 
    } 
+0

ユーザー名が一意であると想定されている場合は、データベースのその列に一意のインデックスを設定する必要があります。そして、あなたの 'SELECT'クエリは、すべての行ではなく、そのユーザ名を持つ行だけを探すべきです。 – jeroen

+0

データベースにデータを挿入する前に、countが0より大きい場合にユーザーが存在するかどうかを確認します。エラーメッセージが表示されたら、ユーザーを挿入します。 – Sona

+1

スクリプトは[SQLインジェクション攻撃](http://stackoverflow.com/questions)の危険性があります。/60174/how-can-i-prevent-sql-injection-in-php) [Little Bobby Tables](http://bobby-tables.com/)に何が起こったかを見てください。 [もしエスケープ入力、それは安全ではありません!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) [準備パラメータ化されたステートメント] /php.net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

答えて

1

スクリプトを終了または挿入を行う前に、あなたのフラグをオフにしていることを確認してください:あなたはまだ重複したエントリを持つ場合は$のユーザー名の結果が何であるか、

if(mysqli_num_rows($result)>0) 
{ 
    Print '<script>alert("Username has been taken!");</script>'; 
    die('username already taken'); 
    //$bool = FALSE; 
} 

デバッグをし、それを比較しますデータベース内の値。

+0

ユーザ名を一意に定義することで、私のために動作しますが、 –

関連する問題