2016-11-16 6 views
-1

[作成]ボタンをクリックすると、レコードがカテゴリテーブルに追加されますが、何らかの理由でレコードが2回追加されます。それがどんなアイデアなのか?私は
if (isset($_POST['create'])) {がどこから呼び出されたか分かりません。私は自分のプロジェクト全体で4ページしか持っていません。誰も私のデータベースにこの行が2回挿入されている理由を教えてもらえますか?

<?php require('dbConnect.php'); 

    //use the variables we created in volleyLogin.php 
     session_start(); 
     $username = $_SESSION['username']; 
     $user_id = $_SESSION['user_id']; 
     echo "user name is " . $username . "<br>"; 
     echo "user id is " . $user_id . "<br>"; 

    if (isset($_POST['create'])) { 

     $category = ($_POST['category']); 
     $name = ($_POST['name']); 
     $phonenumber = ($_POST['phonenumber']); 
     $address = ($_POST['address']); 
     $comment = ($_POST['comment']); 

    //check if the category being entered is already there 
     $check="SELECT COUNT(*) FROM category WHERE cat_name = '$_POST[category]'"; 
     $get_value = mysqli_query($con,$check); 
    //check the number of values of the category being posted 
     $data = mysqli_fetch_array($get_value, MYSQLI_NUM); 
    //if the category name already exists in the category table 
     if($data[0] >= 1) { 
     echo "This Already Exists<br/>"; 
     } 

     else if ($data[0] < 1) 
     { 
    //if it's not in there, then add the category in the category table. 

     $sql = "INSERT INTO category VALUES(NULL, '{$category}', '$user_id')"; 
     $rs1=mysqli_query($con, $sql); 

     if ($con->query($sql) === TRUE) { 
     echo "Yes, it's been added correctly"; 

     } else { 
     echo "Error: " . $sql . "<br>" . $con->error; 
     } 

     } 
    $con->close(); 
     } 



    ?> 

     <!doctype html> 
     <html> 
     <body> 
     <h2>Create new Contact</h2> 
     <form method="post" action="" name="frmAdd"> 
     <p><input type="text" name = "category" id = "category" placeholder = "category"></p> 
     <p><input type="text" name = "name" id = "name" placeholder = "name"></p> 
     <p><input type="text" name = "phonenumber" id = "phonenumber" placeholder = "phone number"></p> 
     <p><input type="text" name = "address" id = "address" placeholder = "address"></p> 
     <p><input type="text" name = "comment" id = "comment" placeholder = "comment"></p> 

     <p><input type="submit" name = "create" id = "create" value = "Create new Contact"></p> 
     <a href="exit.php">Exit</a> 

     </form> 

     </body> 
     </html> 

答えて

4

次の2つの異なる方法で、二回$sqlクエリを実行している:

$rs1=mysqli_query($con, $sql); 

     if ($con->query($sql) === TRUE) { 

あなたが重複したエントリを取得している理由です。

$rs1は使用されていないので削除するか、関数を再度実行する代わりに条件付きで値を確認する必要があります。

+0

ありがとうございました。私はそれがなぜ機能するのか分かりませんが、それはありません。ここでは、私が入手した新しい本、PHP for the Webでこれらのセクションを読んでいきます。私は明らかにあなたの答えを9分で受け入れるでしょう。 – CHarris

+2

いいです。おそらく、2つの異なるものを混ぜ合わせただけです。 PHPのSQLインジェクションを防ぐにはどうすればいいですか?(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) 。あなたのコードは非常に脆弱です。入力データをクエリに直接入力しないでください。彼らを信じてはいけない、彼らはすべてのハッキーハッキーに行くことができます。 mysqli_real_escape_stringを使用するか、プリペアドステートメントを使用してください。 – Phiter

関連する問題