MySQL:为什么忽略表单字段中的文本?

时间:2009-07-02 16:09:38

标签: php mysql forms insert

我想从一开始就自学MySQL / PHP。以下代码从各种教程站点中解除。我正在使用我的虚拟主机提供的phpMyAdmin。

我创建了一个名为“ID”的自动递增字段和另一个名为“first”的字段(varchar,limit 30,not null)。然后我用一个名为“first”的文本字段和一个Submit按钮创建了一个简单的表单。我在框中键入我的名字,然后单击“提交”。这确实在数据库中使用ID创建了一行,但“first”字段始终为空。

我尝试用一​​些直截了当的单词替换'$ _POST [first]',这很有效 - 表中出现的字数很好。这就是我知道它确实在与数据库交谈的方式,它只是没有拿起文本字段

INSERT语句运行后,我显示表中的所有记录。它会显示所有ID号,然后显示空白“first”应该是什么。

我也有它回应INSERT语句。这是echo显示的内容: INSERT INTO tblHurray(ID,first)VALUES('','')

当我用'$ _POST [first]'替换单词时,echo看起来像这样: INSERT INTO tblHurray(ID,first)VALUES('','words')

这是我的第一个问题,如果我遗漏了任何相关信息,请告诉我!并提前感谢您的帮助。

这是表格:

<form action="run_input.php" method="post">
Name: <input type="text" name="first">
<input type="Submit">
</form>

这是点击“提交”时运行的内容:

<?
include("run_connect.php"); // this connects to the database, this works

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','$_POST[first]')";
mysql_query($step1);
echo "$step1";

echo "<b><center>Database Output</center></b><br><br>";

$step2=mysql_query("SELECT * FROM tblHurray");

$num=mysql_numrows($step2);

$i=0;
while ($i < $num) {

$firstname=mysql_result($step2,$i,"first");
$ID=mysql_result($step2,$i,"ID");
echo "$ID: $firstname<br />";

$i++;
}
?>

3 个答案:

答案 0 :(得分:1)

尝试

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','".$_POST['first']."')";

虽然,如果你真的要去学习它,那么就开始吧 PHP PDO。从长远来看,它将为您节省很多麻烦,特别是对于参数化查询。

答案 1 :(得分:0)

这一行

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','$_POST[first]')";

需要看起来像这样:

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','" . mysql_escape_string($_POST['first']) . "')";

总是引用你的数组键(['first']而不是[first])这是一个好习惯。

此外,习惯于在插入数据库之前始终转义用户输入以防止SQL注入。

同时仔细检查以确保HTML表单上的输入名称与您的PHP代码匹配。

$_POST['first']

相同
$_POST['First']

答案 2 :(得分:0)

Mark Biek对此进行了修改,但作为一个小数调整,mysql_real_escape_string函数优于mysql_escape_string,因为它会影响与该连接相关联的字符集。