【问题标题】:PHP_SELF displays errors on first runPHP_SELF 在第一次运行时显示错误
【发布时间】:2017-10-12 14:40:00
【问题描述】:

我刚开始学习 PHP,在用户单击表单中的提交后使用 $_SERVER["PHP_SELF"] 重定向到同一页面时遇到了这个问题。问题是我在页面的 PHP 脚本中使用的 $_POST[] 变量,我需要在用户单击提交并重新加载页面后访问它。但是在第一次运行时,当用户没有单击提交时,$_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>

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

【问题讨论】:

    标签: php html forms


    【解决方案1】:

    第一次页面加载后的值不存在所以使用isset 来检查这样的

    <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 injection attack 。尝试使用准备好的语句或 PDO

    【讨论】:

      【解决方案2】:

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

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

      您可以在if(isset($_POST["fname"])){ } 中执行所有功能

      【讨论】:

        猜你喜欢
        • 2015-12-04
        • 2017-08-21
        • 1970-01-01
        • 2014-03-30
        • 2022-06-17
        • 2013-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多