2017-05-13 4 views
0

Ich habe gerade mit dem Erlernen von PHP begonnen, und ich stehe vor diesem Problem, wenn ich $ _SERVER ["PHP_SELF"] verwende, um auf dieselbe Seite umzuleiten, nachdem der Benutzer auf Senden geklickt hat. Das Problem sind die Variablen $ _POST [], die ich in meinem PHP-Skript auf der Seite verwendet habe, auf die ich zugreifen muss, nachdem der Benutzer auf Senden klickt und die Seite neu lädt. Aber beim ersten Durchlauf, wenn der Benutzer nicht auf Senden geklickt hat, sind die Variablen $ _POST leer und es werden Fehler auf der Seite selbst angezeigt. Natürlich gibt es keine Fehler, nachdem der Benutzer auf "Senden" und "Seite neu laden" geklickt hat. Ich möchte nach dem Senden nicht auf eine andere Seite umleiten. Wie umgehe ich diese Fehler beim ersten Durchlauf?PHP_SELF zeigt Fehler beim ersten Lauf an

Gibt es einen besseren Ansatz für das, was ich versuche zu tun?

Der Code für meine Seite ist hier:

<!DOCTYPE html> 
<html> 

<head> 
<title>Welcome!</title> 
</head> 

<body> 
<h3> Welcome!</h3> 
</br></br> 

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" > 
First Name: <input type="text" name="fname"> </br></br> 
Last Name: <input type="text" name="lname"> </br></br> 
Age: <input type="number" name="sage"> </br></br> 
<input type="submit" value="Submit"></br></br> 
</form> 

<?php 
    $servername = "localhost"; 
    $username = "user1"; 
    $password = "abcd123"; 
    $dbname = "myDbFromPhp"; 

    $fname = $_POST["fname"]; /*Lines responsible for the errors, I think*/ 
    $lname = $_POST["lname"]; 
    $sage = $_POST["sage"]; 


    if($fname != "" and $lname != "") /*Checking for empty vars*/ 
    { 


    $conn = new mysqli($servername, $username, $password, $dbname); 

    if($conn->connect_error) 
    { 
     die("Connection failed: ".$conn->connect_error); 
    } 

    echo "<h4>Connected successfully</h4>"; 


    $sql = "INSERT INTO Students 
      (fname, lname, sage) 
      VALUES 
      ('".$fname."','".$lname."',".(string)$sage.");" ; 
    if($conn->query($sql) === TRUE) 
    { 
     echo "<h4>Value entered successfully</h4>"; 
    } 
    else 
    { 
     echo "</br>Error creating record</br>".$conn->error; 
    } 

    $conn->close(); 


    } 

?> 
</body> 

</html> 

Die Seite einfach eine Eingabe von dem Benutzer nimmt (Student: Vorname, Name, Alter), und wenn Klicks Benutzer hochladen, neu geladen und speichert sie zu einer Datenbank.

Antwort

0

Zum ersten Mal von Seitenladepostwert nicht so isset existiert verwenden, die ähnliche

<input type="submit" name="submit" value="Submit"></br></br> 

if(isset($_POST['submit'])) 
{ 
    //all of your db insertion related codes all here 
     $fname = $_POST["fname"]; /*Lines responsible for the errors, I think*/ 
     $lname = $_POST["lname"]; 
     $sage = $_POST["sage"]; 
     ...................... 
     ...................... 


    header('Location:samepage.php'); 

    // redirect the page to avoid the duplicate insertion by pressing F5 or reload . 
} 

Ihr Code sieht SQL-Injection-Angriff zu überprüfen. vorbereitete Anweisung oder PDO versuchen

0

In Ihrem ersten Laden zu verwenden, dass Variable nicht Werte, also php einen Fehler genarate, daher können Sie isset() verwenden um zu überprüfen, ob die Daten zugewiesen oder nicht

if(isset($_POST["fname"])){ 
    $fname = $_POST["fname"]; 
    $lname = $_POST["lname"]; 
    $sage = $_POST["sage"]; 
} 

Sie können alle Funktionen innerhalb der if(isset($_POST["fname"])){ }

tun
Verwandte Themen