带有HTML / PHP的POST之后的空字段


Empty fields after POST with HTML / PHP?

出于学习目的,我正在尝试将数据从HTML表单插入MySQL数据库,这是我为表单编写的代码:

<form action="newmovie.php" method="post">
            <p>Titulo:  <input type="text" name="movieTitle"> </p>
            <p>Año:  <input type="text" name="movieYear"> </p>
            <p>Director:  <input type="text" name="movieDirector"> </p>
            <p>Protagonista:  <input type="text" name =movieProtagonist> </p>
            <input type="submit"  class="button" value="Agregar">
</form>

因此,在同一个网页中,我检查是否正在执行 POST:

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        include("connectDB.php");
        $mySQL=new MySQL();
        $movieTitle=$_GET['movieTitle']; 
        $movieDirector=$_GET['movieDirector'];    
        $movieYear=$_GET['movieYear'];    
        $movieProtagonist=$_GET['movieProtagonist'];
        echo "INSERT INTO peliculas (titulo,director,year, protagonista) VALUES ('$movieTitle','$movieDirector','$movieYear', '$movieProtagonist')";
        $queryResult=$mySQL->query("INSERT INTO peliculas (titulo,director,year, protagonista) VALUES ('$movieTitle','$movieDirector','$movieYear', '$movieProtagonist')");
        echo "$queryResult";    
    }
?>

因此,插入已完成,但字段为空,这就是回显打印的内容:

插入到鹈鹕(蒂图洛,导演,年份,主角) 值(",")

我的代码做错了什么?

在此处修复拼写错误

<p>Protagonista:  <input type="text" name =movieProtagonist> </p>

通过将其更改为

<p>Protagonista:  <input type="text" name="movieProtagonist"> </p>

将 PHP 更改为:

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        include("connectDB.php");
        $mySQL=new MySQL();
        $movieTitle=$_POST['movieTitle']; 
        $movieDirector=$_POST['movieDirector'];    
        $movieYear=$_POST['movieYear'];    
        $movieProtagonist=$_POST['movieProtagonist'];
        echo "INSERT INTO peliculas (titulo,director,year, protagonista) VALUES ('$movieTitle','$movieDirector','$movieYear', '$movieProtagonist')";
        $queryResult=$mySQL->query("INSERT INTO peliculas (titulo,director,year, protagonista) VALUES ('$movieTitle','$movieDirector','$movieYear', '$movieProtagonist')");
        echo "$queryResult";    
    }
?>

解释:

您可以使用 HTTP GET 或 HTTP POST 将表单提交到 PHP 脚本。您可以在表单中定义它。在您的表单中,您将其设置为通过 POST 发送,但尝试使用 $_GET 在 php 中检索它。

Get 适用于需要发送 URL,并且只应用于从数据库中检索数据的情况。获取变量是这样传递的

http://yourserver.com/yourscript.php?variable1=something&variable2=somethingElse

帖子隐藏在 HTTP 请求中(您在 URL 中看不到它)。最好对任何对数据库进行更改的请求使用"post"。

您可以在此处阅读有关差异的更多信息:http://blog.teamtreehouse.com/the-definitive-guide-to-get-vs-post

<form action="newmovie.php" method="post">

由于您的表单方法是发布,因此您需要使用

$movieTitle=$_POST['movieTitle'];

您也可以使用

$movieTitle=$_REQUEST['movieTitle'];

对于 POST 和 GET 来说,但这会导致不必要的开销

在 PHP 文件中而不是

$_GET

使用

$_REQUEST

当您使用表单标签中的method='post'时,您的问题将得到解决。并且您通过用于获取方法获取数据$_GET获取数据。

始终使用$_REQUEST从表单中获取数据,因为它很常见 从获取和发布中获取这两个数据。

使用 $_POST 读取表单数据:示例:$movieTitle=$_POST['movieTitle'];

请尝试下面的代码,它将解决您的问题。

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $movieTitle=$_POST['movieTitle']; 
    $movieDirector=$_POST['movieDirector'];    
    $movieYear=$_POST['movieYear'];    
    $movieProtagonist=$_POST['movieProtagonist'];
    echo "INSERT INTO peliculas (titulo,director,year, protagonista) VALUES ('".$movieTitle."','".$movieDirector."','".$movieYear."', '".$movieProtagonist."')";
    $queryResult=$mySQL->query("INSERT INTO peliculas (titulo,director,year, protagonista) VALUES ('".$movieTitle."','".$movieDirector."','".$movieYear."', '".$movieProtagonist."')");
    echo "$queryResult";    
}

?>

因为 method='post'

Instead of $_GET['']

使用任一

$_POST['']

$_REQUEST['']