2016-07-15 47 views
1

我使用php製作了註冊頁面。當我在填寫所有數據正確存儲在數據庫中後註冊一個用戶時,在此之後如果我刷新註冊頁面而沒有填充任何內容,則最近的用戶數據再次存儲在數據庫中。爲什麼是這樣?而且最後的腳本不工作當我刷新頁面時數據自動存儲在數據庫中

下面是我的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

當您刷新已發佈表單(method =「POST」)的網頁,你會重新發送DATAS。

0

如果我刷新註冊頁面而沒有填充任何內容然後 最近的用戶數據再次存儲在數據庫中。爲什麼是這樣?

刷新頁面時,瀏覽器會重新發送來自上次頁面加載的請求。所以,如果你的表單的提交是它是在同一個頁面,你可能做了以下內容:

  1. 加載頁面並填寫表格
  2. 提交表單。這會導致瀏覽器將表單提交到http請求中的同一頁面。您的腳本收到請求並註冊用戶
  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; 
} 

你也應該設計自己的數據庫表,不讓兩個客戶有相同的電子郵件。確保客戶之間不能共享的任何字段在數據庫中的索引類型爲UNIQUEPRIMARYSee this reference.

而且最後的腳本不工作

請不要解決同一個問題的多個問題。一旦你解決了這個問題,請提出一個不同的問題。

0

只需檢查電子郵件是否已存在於數據庫中。如果存在,則不要重新輸入數據。 更改此行

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

$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); 
} 

這裏你檢查,如果電子郵件存在,如果是,它不會再在輸入數據庫。

相關問題