刷新页面时,数据会自动存储在数据库中

时间:2016-07-15 13:02:59

标签: javascript php html mysql

我用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>";
}   

 ?>

3 个答案:

答案 0 :(得分:0)

当您刷新已发布表单的页面(method =&#34; POST&#34;)时,您将重新发送数据。

答案 1 :(得分:0)

  

如果我刷新注册页面而不填充任何内容,那么   最近的用户数据再次存储在数据库中。为什么这样?

刷新页面时,浏览器会从最后一页加载中重新发送请求。因此,如果您的表单提交到它所在的同一页面,您可能正在执行以下操作:

  1. 加载页面并填写表格
  2. 提交表格。这会导致浏览器将POST表单提交到http请求中的同一页面。您的脚本接收请求并注册用户
  3. 按刷新。这会使浏览器POST提交与之前相同的提交,即使表单看起来是空白的。您的脚本接收具有相同参数的新请求并注册用户
  4. 防止双重存储相同数据的最有效方法是在存储数据之前检查数据是否存在。在执行之前:

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

    您还应该将数据库表设计为永远不允许两个客户拥有相同的电子邮件。确保客户之间不能共享的任何字段在数据库中具有类型为UNIQUEPRIMARY的索引。 See this reference.

      

    并且最后一个脚本无效

    请不要在同一问题中解决多个问题。一旦你解决了这个问题,就问一个不同的问题。

答案 2 :(得分: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);
}

在这里,您检查了电子邮件是否存在,如果是,则不会再输入数据库。