2017-08-15 18 views
-2

私は自分の音楽サイトのコードを作成しています。これは登録フェーズの一部です。私は、既存の電子メールアドレスが見つかった場合にデータベースをチェックして、 "電子メール("電子メールアドレス ")はすでに存在しますが、見つからなければ、データベースに情報を挿入します。発見されたHTMLフォームから送信したものと同様の対処が、見つからメールがない場合、システムはその後に停止し、何もしません。誰かが私が間違っていたところ、私が把握助けることができます。データの冗長性を避ける

if ($_POST['submit2']){ 
$fname = $_POST['Fname']; 
$sname = $_POST['Sname']; 
$email = $_POST['Emailaddress']; 
$pass = $_POST['newpassword']; 

$sql= "select * from cust_information where email = '$email';"; 
$results = mysqli_query($conn, $sql) or die(mysqli_error($conn)); 
$row = mysqli_fetch_array($results) or die(mysqli_error($conn)); 

    if (count($row) < 0) 
    { 
     $sql2 = "insert into cust_information (firstName, lastName, email, password) values(`$fname`, `$sname`, `$email`, `$pass`)"; 
     $results2 = mysqli_query($conn, $sql) or die(mysqli_error($conn)); 
     if (!$results2){ 
     echo "successfully uploaded cust"; 
     } 
    }else{ 
     echo "email <strong>".$row["email"]. " </strong> already Exist"; 
    } 
} 
+0

このコードはSQLインジェクションに広く開いていますが、バグを修正するには ''$ fname''引用符を使用してください。文字列ではなくテーブルとフィールド名を引用するために引用符が使われます。 – xander

+0

@Banelegumata 'count'が0より小さい整数を返すかどうかチェックしています。これは不可能で、内部のコードは決して実行されません。 – Daedalus

+0

does not work ...フィールドはdbに追加されません。この問題を整理するとすぐに、SQLインジェクションに苦労します。 –

答えて

2

をあなたがしています返される結果の数が0より小さいかどうかをチェックします。配列の長さ(および結果の数)は0より小さくなることはありません。mysqli_fetch_arrayは、結果が見つからない場合はnullを返します。 $row === nullの場合。

しかし、ここでは変数をSQLクエリ文字列に連結すると、SQL Injectionと呼ばれる重大なセキュリティ上の問題が発生する可能性があることを指摘します。コードが現在設定されているので、フォームのユーザーはデータベースで好きなクエリを実行することができますが、これはあなたが望むものではありません。この問題を軽減するには、prepared statementsをお読みください。

関連する問題