我刚刚开始学习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>
该页面只是从用户那里获取一些输入(学生:名字,姓氏,年龄),当用户点击提交时,重新加载并将它们保存到数据库。
答案 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"])){ }