PHP_SELF在首次运行时显示错误

时间:2017-05-13 10:17:02

标签: php html forms

我刚刚开始学习PHP,当用户在表单中单击“提交”后使用$ _SERVER [“PHP_SELF”]重定向到同一页面时,我遇到了这个问题。问题是我在页面的PHP脚本中使用的$ _POST []变量,我需要在用户点击提交和页面重新加载后访问。但是在第一次运行时,当用户没有单击Submit时,$ _POST变量为空,我在页面本身上显示错误。当然,用户单击“提交”和页面重新加载后没有错误。我不希望在提交后重定向到另一个页面。如何在第一次运行时规避这些错误?

对于我想要做的事情,有没有更好的方法?

我的页面代码在这里:

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

该页面只是从用户那里获取一些输入(学生:名字,姓氏,年龄),当用户点击提交时,重新加载并将它们保存到数据库。

2 个答案:

答案 0 :(得分:0)

第一次页面加载帖子值不存在,因此请使用Hotel: string (nullable = true) Guests: string (nullable = true) Address: string (nullable = true) City: string (nullable = true) 来检查这个

isset
  

你的代码看起来是sql注入攻击。尝试使用预准备语句或PDO

答案 1 :(得分:0)

在您第一次加载时,该变量没有值,因此php会产生错误,因此您可以使用isset()来检查是否分配了数据

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

您可以在if(isset($_POST["fname"])){ }

中执行所有功能