我有一个页面,上面有两个表单(和两个提交按钮),表单通过INSERT INTO语句的action="将页面链接回本身。INSERT INTO语句之一是:
<?php
$sql="INSERT INTO panelProduct (length_mm, width_mm, aperture)
VALUES ('$_POST[p_length_mm]','$_POST[p_width_mm]','$_POST[p_aperture]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
?>
我将表单和INSERT语句放在同一页面上的原因之一是,表单允许用户将产品添加到订单中,并且可能有几个产品(所以我认为用户可以一直提交,直到完成为止…)。另一个原因是,我需要使用上一页面发送的$_POST值来对他们输入的产品执行其他操作,我不知道如何将它发送到多个页面。
无论如何,我发现的问题是,每次刷新页面时,都会在数据库中插入一个新行,其中包含NULL值。这对我来说是有意义的,因为PHP每次遇到上面的语句时都会执行它。因此,我的问题是,如果用户在表单中输入了一些内容并"提交",我如何设置某种条件,只执行INSERT语句?
您可以使用PHP的empty()方法来检查每个变量中的空值。
类似于:
if(!empty($_POST['p_length_mm']) && !empty($_POST['p_width_mm']) && !empty($_POST['p_aperture']))
{
//execute your query here
}
else
{
//if there's an alternative you would like to happen if values are null, or just leave out.
}
希望这能奏效。
您必须检查数据是否来自您的表单。我建议使用这种方法-将您的提交按钮(即<input type="submit" name="my_submit_button" value="Whatever" />
和此条件)命名为插入代码:
if( isset( $_POST['my_submit_button']) ) {
.. process your post data
}
此外,请始终记住不要信任用户提供的数据。验证$_POST
中是否存在所有预期数据,以及格式是否符合要求(即,您要求提供编号和收到的信件等)。如果所有测试都通过了,那么您就可以将数据提交到DB了。
您需要这样的条件:
if ('POST' === $_SERVER['REQUEST_METHOD']) {
// a form was posted
}
当然,你仍然需要检查你的帖子是否真的包含了正确的东西:
isset($_POST['p_length_mm'], $_POST['p_width_mm'], $_POST['p_aperture'])
更好的方法是使用filter_input_array()
来净化传入的数据;您当前的代码容易受到SQL注入攻击。使用PDO
或mysqli
和准备好的语句是可行的。