2017-05-13 6 views
0

私はちょうどPHPを学び始めました。ユーザーがフォームでSubmitをクリックすると、$ _SERVER ["PHP_SELF"]を使用して同じページにリダイレクトするときにこの問題に直面しています。問題は、私がPHPのスクリプトで使用したページの$ _POST []変数です。これは、ユーザーが[Submit]をクリックしてページをリロードした後にアクセスする必要があります。しかし、最初の実行時に、ユーザーがSubmitをクリックしていないときは、$ _POST変数は空であり、ページ自体にエラーが表示されています。もちろん、ユーザーが[送信]と[ページの再読み込み]をクリックしてもエラーは発生しません。送信後に別のページにリダイレクトしたくありません。最初の実行時にこれらのエラーを回避するにはどうすればよいですか?PHP_SELFは初回実行時にエラーを表示します

私がやろうとしていることに対してより良いアプローチがありますか?

私のページのコードはここにある:

<!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> 

ページには、単にユーザー(学生:姓、名、年齢)からいくつかの入力を受け取り、ユーザーがクリックを送信すると、リロードして保存しますデータベースに転送する。ページの

答えて

0

まず時間は、負荷後の値はので、この

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

のようなあなたのコードは、SQLインジェクション攻撃に見えることを確認するためにissetを使用して存在していません。あなたの最初のロードでは、準備されたステートメントまたはPDO

0

を使用しようとすると、その変数に値を持っていないのでgenarateエラーをPHP、したがって、あなたは、データが割り当てられているかどうかをチェックするためにisset()を使用することができますか

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

あなたは内部のすべての機能を行うことができますif(isset($_POST["fname"])){ }

関連する問題