2016-07-15 5 views
1

私はPHPで登録ページを作成しました。すべてのデータを1つのユーザーに登録した後、データはデータベースに正しく格納されますが、その後に何も入力せずに登録ページを更新すると、最近のユーザーデータが再びデータベースに格納されます。なぜそれはどうですか?フォーム(方法=「POST」)を掲載しているページで、件のデータを再送信しますを更新したときにも、最後のスクリプトがページを更新すると、データはデータベースに自動的に格納されます

を働いていないと、以下の私のPHPコード

<?php 

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

    $ip = getIp(); 

    $c_name = $_POST['c_name']; 
    $c_email = $_POST['c_email']; 
    $c_pass = $_POST['c_pass']; 
    $c_image = $_FILES['c_image']['name']; 
    $c_image_tmp = $_FILES['c_image']['tmp_name']; 
    $c_country = $_POST['c_country']; 
    $c_city = $_POST['c_city']; 
    $c_contact = $_POST['c_contact']; 
    $c_address = $_POST['c_address']; 

    move_uploaded_file($c_image_tmp, "customer/customer_images/$c_image"); 

     $insert_c = "insert into customers (customer_ip,customer_name,customer_email,customer_pass,customer_country,customer_city,customer_contact,customer_address,customer_image) values ('$ip','$c_name','$c_email','$c_pass','$c_country','$c_city','$c_contact','$c_address','$c_image')"; 
} 
$run_c = mysqli_query($con, $insert_c); 

$sel_cart = "select * from cart where ip_add='$ip'"; 

$run_cart = mysqli_query($con, $sel_cart); 
$check_cart = mysqli_num_rows($run_cart); 
if ($check_cart==0) { 

    $_SESSION['customer_email']=$c_email; 
    echo "<script>alert('Accound has been created successfully')</script>"; 
    echo "<script>window.open('customer/my_accont.php'.'_self')</script>"; 
} 
else { 
    $_SESSION['customer_email']=$c_email; 
    echo "<script>alert('Accound has been created successfully')</script>"; 
    echo "<script>window.open('checkout.php'.'_self')</script>"; 
} 

?> 
+0

techguru答えのいずれかがあなたを助けた場合は、それを選択してください(そしてあなたが望むなら、upvote)。これらの答えを研究し、テストし、書き留めるには時間がかかります。聞いて実行するのは非常にクールではない。 – BeetleJuice

答えて

0

です。

0

もし何も入力せずにレジスタページをリフレッシュすると、 最近のユーザーデータが再びデータベースに格納されます。なぜそれはどうですか?

ページを更新すると、ブラウザは最後のページの読み込みから要求を再送信します。フォームの提出は、それが上だと同じページにあるのであれば、あなたはおそらく、次のことをやっている:

  1. フォームを送信ページをロードし、フォーム
  2. を記入してください。これにより、ブラウザはhttp要求の同じページへのフォーム提出をPOSTにします。スクリプトがリクエストを受信して​​ユーザーを登録します
  3. 更新を押します。これにより、フォームは空白に見えますが、ブラウザはPOSTと同じ提出先になります。あなたのスクリプトは、同じパラメータで新しい要求を受け取り、ユーザーを登録します。

同じデータを二重保存しないようにする最も効果的な方法は、保存する前にデータが存在するかどうかを確認することです。あなたが実行する前に:

insert into customers (customer_ip,customer_name,customer_email... 

まず

SELECT customer_email FROM customers WHERE customer_email = '$c_email' 

は、あなたがそのメールを登録する前にゼロの結果が返されていることを確認し、クエリを実行します。メールが既に存在する場合は、単に顧客と出口にリダイレクト:

if(mysqli_num_rows($email_check_result)){ 
    header('Location: myaccount.php'); 
    exit; 
} 

また、2人の顧客が同じメールを持つことができないように、あなたのDBのテーブルを設計する必要があります。顧客間で共有してはならないフィールドは、DB内にタイプUNIQUEまたはPRIMARYのインデックスがあることを確認してください。 See this reference.

とも最後のスクリプトは、同じ質問に複数の問題に対処しないでください

に動作していません。この問題を整理したら、別の質問をしてください。

0

電子メールが既にデータベースに存在するかどうかを確認してください。存在する場合は、データを再入力しないでください。 変更メールが存在する場合は、この行

$check_email = "select * from customers where customer_email='$c_email'"; 

$email = mysqli_query($con, $check_email); 
$num_email = mysqli_num_rows($email); 
if ($num_email==0) { 
    $run_c = mysqli_query($con, $insert_c); 
} 
ここ

$run_c = mysqli_query($con, $insert_c); 

あなたがチェックし、YESの場合には、再度データベースに入力して文句を言いません。

関連する問題