出于学习目的,我正在尝试将数据从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['']