【问题标题】:Data is storing automatically in database when i refresh the page当我刷新页面时,数据会自动存储在数据库中
【发布时间】:2016-07-15 21:23:51
【问题描述】:

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

 ?>

【问题讨论】:

  • techguru 如果其中一个答案对您有帮助,请选择它(如果您愿意,请点赞)。研究、测试和写出这些答案需要时间。询问和运行不是很酷。

标签: javascript php html mysql


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    只需检查电子邮件是否已存在于数据库中。如果存在则不要重新输入数据。 改变这一行

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

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

    【讨论】:

      【解决方案3】:

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

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

      1. 加载页面并填写表格
      2. 提交表格。这会导致浏览器将POST 表单提交到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;
      }
      

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

      最后的脚本也不起作用

      请不要在同一个问题中解决多个问题。解决此问题后提出其他问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-12
        • 1970-01-01
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        • 2019-12-18
        • 1970-01-01
        • 2012-06-02
        相关资源
        最近更新 更多