0

我有一个页面,上面有两个表单(和两个提交按钮),表单将页面链接回自身,其中包含 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 语句的条件?

4

3 回答 3

1

你需要这样的条件:

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 注入攻击是开放的。使用PDOormysqli和准备好的语句是要走的路。

于 2012-09-03T15:55:23.917 回答
1

您必须检查数据是否来自您的表单。我建议使用这种方法 - 将您的提交按钮命名(即<input type="submit" name="my_submit_button" value="Whatever" />,将此条件命名为您的插入代码:

if( isset( $_POST['my_submit_button']) ) {
  .. process your post data
}

另外,永远记住不要相信用户提供的数据。验证是否所有预期的数据都存在$_POST并且格式是否符合要求(即您要求提供数字和收到的信件等)。如果所有测试都通过了,那么您就可以将数据提交到数据库了。

于 2012-09-03T16:00:56.397 回答
1

您可以使用 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.
}

希望能解决问题。

于 2012-09-03T16:02:25.493 回答