2017-07-29 7 views
0

私はここに書かれたコードに懸念があります。接続を確認してもOKですが、ここのif文が実行されると、password = cpasswordから2番目のif文までユーザーが存在するかどうかをチェックし、falseのためelseに入りますが、 if($ query_run)が偽になる理由がわからない、3番目のif文に達しました。

したがって、データは自分のデータベースに追加されず、そのelse文で宣言したERRORのアラートが表示されます。

<?php 
    if(isset($_POST['submit_btn'])) 
    { 
     $username = $_POST['username']; 
     $password = $_POST['password']; 
     $cpassword = $_POST['cpassword']; 
     if($password==$cpassword) 
     { 
      $query= "select * from user WHERE username ='$username'"; 
      $query_run = mysqli_query($con,$query); 
       if(mysqli_num_rows($query_run)>0) 
       { 
       // there is already a user with the same username 
        echo '<script type="text/javascript"> alert("user already exist.. Try another username")</script>'; 
       } 
       else 
       { 
       $query = "insert into user values('$username','$password')"; 
       $query_run = mysqli_query($con,$query); 
       if($query_run) 
       { 
        echo '<script type="text/javascript"> alert("User Registered Go to Login page to Log in")</script>'; 
       } 
       else 
       { 
        echo '<script type="text/javascript"> alert("Error..")</script>'; 
       } 
      } 
     } 
     else 
     { 
       echo '<script type="text/javascript"> alert("Password does not match!")</script>'; 
     } 
    } 
?> 
+2

してください、準備されたクエリを使用するには、SQLインジェクションに開放されています。 –

+0

@IvanBolnikhこれは問題ではありませんでした。 –

+1

@MichaelHirschler:それは問題ではありません。誰かが安全でないことをしていて、安全でないことが分かっている場合は、話す必要があります。 – halfer

答えて

-2

<?php 
 
    if(isset($_POST['submit_btn'])) 
 
    { 
 
     $username = $_POST['username']; 
 
     $password = $_POST['password']; 
 
     $cpassword = $_POST['cpassword']; 
 
     if($password==$cpassword) 
 
     { 
 
      $query= "select * from user WHERE username ='$username'"; 
 
      $query_run = mysqli_query($con,$query); 
 
       if(mysqli_num_rows($query_run)>0) 
 
       { 
 
       // there is already a user with the same username 
 
        echo '<script type="text/javascript"> alert("user already exist.. Try another username")</script>'; 
 
       } 
 
       else 
 
       { 
 
       $query = "insert into user (username, password) values('$username','$password')"; 
 
       $query_run = mysqli_query($con,$query); 
 
       if($query_run) 
 
       { 
 
        echo '<script type="text/javascript"> alert("User Registered Go to Login page to Log in")</script>'; 
 
       } 
 
       else 
 
       { 
 
        echo '<script type="text/javascript"> alert("Error..")</script>'; 
 
       } 
 
      } 
 
     } 
 
     else 
 
     { 
 
       echo '<script type="text/javascript"> alert("Password does not match!")</script>'; 
 
     } 
 
    } 
 
?>

+0

$ query = "INSERT INTOユーザー(ユーザー名、パスワード)VALUES($ username、$ password)"のみを変更します。 –

+0

他の2つの回答(そのうちの1つは著者によって削除されています)に従って、私はOPがコード内に持つセキュリティエラーについて言及したいと思います。彼らは少なくとも(1)SQLインジェクション、(2)平文パスワードの保管です。 – halfer

+1

これはどのようにして問題を解決しましたか?何が行われたかについて具体的な説明はありません。コード内の違いを人々に見てもらう必要があります。 –

0

クエリが間違っています。値を挿入するための列が指定されていません。 column1column2があなたのusernamepassword列になります

$query = "insert into user (column1, column2) values('$username','$password')"; 

: はあなたの列名を置き換えることでこれを試してみてください。

注:あなたはSQLインジェクションを利用できます。したがって、準備されたクエリを使用する必要があります。

+0

これは、OPコードのSQLインジェクションの脆弱性とプレーンテキストのパスワードを複製します。あなたがそれらを見るとき**常に** **セキュリティ問題を言及してください! – halfer

+1

みんな、ありがとうございます。それは本当に働いた。初心者のための私の謝罪はあなたに再びありがとう –

+0

@ReffersonDahanを手伝ってうれしい。それが動作する場合、答えとして受け入れます。 :) –