2016-07-15 66 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); 
} 

这里你检查,如果电子邮件存在,如果是,它不会再在输入数据库。

相关问题