2017-08-06 3 views
-2

私は最近登録/ログインシステムを作成しました。私は各ユーザーの個人用プロファイルページを持っています。このユーザーを検索すると、このユーザーには自分の情報があり、他のユーザーにはその情報が表示されます。私はすでにそのレイアウトを持っていますが、誰かがデータベースにないユーザー名を検索するとどうなりますか?ページは空でなければなりません。ユーザ名がrealの場合は、プロファイルページを表示します。そうでない場合は、

これは私の試しです、これは正しいですか?私はユーザー名が取られているかどうかを確認するために私の登録ページからこれを得ました。同じルールが依然としてURL上の誰かを検索するために適用されますか?

$sql = "SELECT * FROM users WHERE username = '".$username."'"; 
    $result = mysqli_query($con,$sql); 
    if(mysqli_num_rows($result)>=1){ 
     $error = true; 
     $username_error ='<div class="error-notice"> 
         <div class="oaerror danger"> 
         <strong>Uh oh!</strong> - That Username is already taken. Please use a different Username. 
         </div>'; 


    }else{ 
    } 

もしそうでない場合は、それを微調整する助けがありますか?

+0

あなたのコードは、SQLインジェクションの脆弱性です - あなたは、コードが動作する必要があることを '準備statements' – RamRaider

+0

を使用する方法を学習しようとする必要がありますが@RamRaiderが言ったように、それは脆弱です –

答えて

0

私は、クエリ文字列/ urlに渡された値に基づいてユーザーの存在を確認し、見つかった場合はユーザープロファイル(または同様のもの)を表示することを希望しています。それは正しい集計ですか?

SQLインジェクションに脆弱であることをコメントで述べましたが、SQL内に直接埋め込まれた変数を使用するのではなく、基本的にはprepared statementsのグリップを取得することを強くお勧めします。

try{ 

    $validuser = false; 

    $dbhost = 'localhost'; 
    $dbuser = 'xxx'; 
    $dbpwd = 'xxx'; 
    $dbname = 'xxx'; 
    $con = new mysqli($dbhost, $dbuser, $dbpwd, $dbname); 

    if(!empty($_GET['username'])){ 

     $username = filter_input(INPUT_GET, 'username', FILTER_SANITIZE_STRING); 


     $sql='select * from users where username=?'; 
     $stmt=$con->prepare($sql); 

     if($stmt){ 
      /* run the query to check username */ 

      /* Bind parameters to the placeholders */ 
      $stmt->bind_param('s', $username); 

      /* execute */ 
      $result = $con->execute(); 

      if($result){ 

       $stmt->store_result(); 
       $stmt->fetch(); 

       $rows = $stmt->num_rows; 
       $validuser = ($rows == 1) ? true : false; 

       $stmt->free_result(); 
       $stmt->close(); 

      } else { 
       throw new Exception('Query failed'); 
      } 

     } else { 
      throw new Exception('Failed to prepare sql statement'); 
     } 
    } 




    if($validuser){ 
     /* display user profile */ 
    } else { 
     /* display message - user not found etc */ 
    } 




}catch(Exception $e){ 
    echo $e->getMessage(); 
} 
関連する問題