【问题标题】:Proper form validation (PHP/MySql)正确的表单验证 (PHP/MySql)
【发布时间】:2013-07-26 18:22:01
【问题描述】:

运行此代码时出现以下错误:

解析错误:/Applications/XAMPP/...results.php 第 43 行中的语法错误,意外 ',',期待 ')'

第 43 行对应下面的查询行。

这是我的代码。这些变量与来自问卷页面的表单输入相关。 $source_of_fund_1$source_of_fund_1 与单选按钮表单输入相关。其他变量与文本字段/区域有关。我对单选按钮变量使用 isset 验证,对文本字段/区域使用 !empty

<?php

$source_of_fund_1 = $_POST['source_of_fund_1'];
$source_of_fund_2 = $_POST['source_of_fund_2'];
$repayment_date = $_POST['repayment_date'];
$do_differently = $_POST['do_differently'];

require_once 'connect.inc.php';

$query = "INSERT INTO tablename 
            (source_of_fund_1, source_of_fund_2, repayment_date, do_differently)
            VALUES 
            ('$source_of_fund_1', '$source_of_fund_2', '$repayment_date',  '$do_differently')";

$result = @mysqli_query($link, $query);

if (($result) && !empty($repayment_date, $do_differently) 
        && isset($source_of_fund_1, $source_of_fund_2)) {
    echo 'Thank you for your submission.';
} else {
    echo 'We were unable to process your information.'.mysqli_error($link).'Please ensure all required fields were filled out.';
}

mysqli_close($link);

?>

任何帮助都将不胜感激!谢谢!

【问题讨论】:

  • 很确定你不能在 PHP 中做多行字符串
  • 警告您的代码容易受到 sql 注入攻击!
  • 你为什么要检查所有$_POST数据是否在你运行MySQL查询之后?
  • 如何防止PHP中的SQL注入:stackoverflow.com/questions/60174/…
  • 感谢大家的cmets,提示!

标签: php mysql forms validation


【解决方案1】:

您的问题在于空呼叫。参数不超过一个:

!empty($repayment_date, $do_differently)

应该是:

!empty($repayment_date) && !empty($do_differently)

【讨论】:

  • 很高兴为您提供帮助。如果它对您有用,那么当人们遇到此问题时,您应该接受答案以供将来参考。
【解决方案2】:

我认为,最直接的问题是,因为您正在使用带有多个参数的 empty - 与 isset 不同,它只需要一个。

不过,还有一些其他问题。

  1. 不要抑制 @ 的任何错误 - 如果出现问题, 你想了解它,所以你可以适当地处理它。

  2. 您正在将内容从 $_POST 直接传递到您的 SQL 中,而没有进行完整性检查。 这不安全。至少你应该使用mysqli_real_escape_string - 但是如果你使用mysqli,为什么不把它变成一个准备好的语句,然后绑定变量呢?安全多了。

【讨论】:

  • 您好,谢谢!做一个准备好的语句并绑定变量是什么意思?
  • 在此处查看此答案:stackoverflow.com/a/60496/1315962 - 这是一种帮助您编写更安全代码的方法。就目前情况而言,如果有人输入了包含撇号的数据,它充其量只会破坏您的查询;并且可能做很多,更糟。准备好的语句可以帮助你避免这种事情。
  • 谢谢!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 2015-11-13
  • 2013-06-25
  • 2015-01-25
  • 1970-01-01
相关资源
最近更新 更多