浏览器在PHP中重新加载时自动插入以前的数据

浏览器在PHP中重新加载时自动插入以前的数据

问题描述:

I have some data input area.Here is my file.

Here is my db.php:

<?php

$username = "root";
$password = "";

try {
    $db = new PDO('mysql:host=localhost;dbname=task', $username, $password);
    echo "Connection Successfull";
} catch (PDOException $e) {
    die("Error: Database connection");
}

?>

And my index.php is:

<?php 
    include "db.php";
?>
<!DOCTYPE html>
<html>
<head>
    <title>This is title</title>
        <link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
    <div class="wrap1">
        <form method="POST" action="">
            <input type="text" name="name" required>  Username</br></br>
            <input type="email" name="email" required>  Email</br></br>
            <input type="text" name="website" required>  Website</br></br>
            <input type="submit" value="Submit">
        </form>
    </div>

    <?php
        $username = $_POST['name'];
        $emailadd = $_POST['email'];
        $webadd   = $_POST['website'];
        $sql = "INSERT INTO users (name,email,website) VALUES ('$username','$emailadd','$webadd')";
        if(empty($username) || empty($emailadd) || empty($webadd)){
            echo "Please input all field";
        }
        else{
            if ($db->query($sql)) {
                echo "Inserted!";
            }
            else{
                echo "Error";
            }
        }
        $db = null;

    ?>
</body>
</html>

When i first go to index.php page then it's showing some notice.

Notice: Undefined index: name in C:\xampp\htdocs\techmasters\begin\index.php on line 21

Notice: Undefined index: email in C:\xampp\htdocs\techmasters\begin\index.php on line 22

Notice: Undefined index: website in C:\xampp\htdocs\techmasters\begin\index.php on line 23

but if i input any data then it going to be inserted fine.My problem is that if i reload the browser then previous inserted data going to inserted again.How can i solve this problem?

Thanks in advanced.

Its because, you are not checking whether form is submitted or not.

On every page request, data is getting inserted, add a check.

<?php
if (isset($_POST['name']) && ! empty($_POST['name'])) {
 $username = $_POST['name'];
 $emailadd = $_POST['email'];
 $webadd   = $_POST['website'];
 $sql = "INSERT INTO users (name,email,website) VALUES ('$username','$emailadd','$webadd')";
 if (empty($username) || empty($emailadd) || empty($webadd)){
  echo "Please input all field";
 }
 else{
  if ($db->query($sql)) {
   echo "Inserted!";
  }
  else{
   echo "Error";
  }
 }
 $db = null;
 $_POST = NULL;
}
?>

This will ensure that database insert will be done only in case of form submit.

EDIT:

If you submit a form to same page and then reload the page, it will ask you to resubmit the form. Either change method to get and check for duplicity or submit the form to another file (move form submit code to other file and set it as form action).

When you reload the page it's asking for form re-submission. When you click on resend then it will post all data again and inserted in database. To overcome this issue you can use jquery.

Try this code :

html file :

    <!DOCTYPE html>
    <html>
    <head>
        <title>This is title</title>
            <link href="style.css" rel="stylesheet" type="text/css">
    </head>
    <body>
        <div class="wrap1">
            <form method="POST" id="frm" action="">
                <input type="text" name="name" required>  Username</br></br>
                <input type="email" name="email" required>  Email</br></br>
                <input type="text" name="website" required>  Website</br></br>
                <input type="submit" class="sub" value="Submit">
            </form>
        </div>
<script>
$(".sub").click(function (e) {
    e.preventDefault();
    $.post("test.php",$("#frm").serialize(),function(data){
       if(data == "Inserted!") {
           //You can reload your page here
        } else {
           //Display error message.
        }
     });
});
</script>

     </body>
    </html>

You php code (test.php) :

<?php
include "db.php";
if(isset($_POST['name']) && $_POST['name'] != "") {
    $username = $_POST['name'];
    $emailadd = $_POST['email'];
    $webadd   = $_POST['website'];
    $sql = "INSERT INTO users (name,email,website) VALUES ('$username','$emailadd','$webadd')";
    if(empty($username) || empty($emailadd) || empty($webadd)){
          echo "Please input all field";
    } else {
           if ($db->query($sql)) {
              echo "Inserted!";
           }
           else{
              echo "Error";
           }
     }
     $db = null;
     exit;
}

?>

Don't forget to add jquery file in your html.