Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能';如果无法实现此功能,php将清理过滤器_Php_Validation_Sanitize - Fatal编程技术网

我能';如果无法实现此功能,php将清理过滤器

我能';如果无法实现此功能,php将清理过滤器,php,validation,sanitize,Php,Validation,Sanitize,有人能告诉我我做错了什么吗?我试图用php过滤器清理和验证表单用户输入。这个输入将进入一个mySql数据库,然后是一个html页面输出,所以我需要删除所有html标记,并为mySql提供安全性 谢谢 /* * BEGIN Sanitize and validate */ // Adding fields to sanitize array. $filters = array( 'author' => FILTER_SANITIZE_SPECIAL_CHARS,

有人能告诉我我做错了什么吗?我试图用php过滤器清理和验证表单用户输入。这个输入将进入一个mySql数据库,然后是一个html页面输出,所以我需要删除所有html标记,并为mySql提供安全性

谢谢

      /*
 * BEGIN Sanitize and validate
 */

  // Adding fields to sanitize array.
$filters = array(
   'author'  => FILTER_SANITIZE_SPECIAL_CHARS,
   'title'  => FILTER_SANITIZE_SPECIAL_CHARS,
   'description'  => FILTER_SANITIZE_SPECIAL_CHARS,
);


/*** apply the filters to the POST array ***/
$filtered = filter_input_array(INPUT_POST, $filters);


 // filtering out anything that isn't an email address
    $sanitized_email = filter_var(($_POST["email"]), FILTER_SANITIZE_EMAIL);
    if ( filter_var($sanitized_email, FILTER_VALIDATE_EMAIL)  == TRUE) {
        echo '';
    } else {
        echo 'Invalid Email Address.  Go Back.';
        exit;
    }

    /*
 * BEGIN sanitize and validate
 */
新代码,但仍不起作用。我做错了什么事。仍在数据库中获取html,错误不起作用

      /*
 * BEGIN Sanitize and validate
 */

  // Adding fields to sanitize array.
$filters = array(
   'author'  => FILTER_SANITIZE_STRING,
   'title'  => FILTER_SANITIZE_STRING,
   'description'  => FILTER_SANITIZE_STRING,
);


/*** apply the filters to the POST array ***/
$filtered = filter_input_array(INPUT_POST, $filters);
$filters = array_map('mysql_real_escape_string',$filters);
$filters = array_map('htmlspecialchars',$filters);
    if ( filter_var_array($filtered, FILTER_SANITIZE_STRING)) {
        echo '';
    } else {
        echo 'Invalid Input.  Go Back.';
        exit;
    }



// filtering out anything that isn't an email address
    $sanitized_email = filter_var(($_POST['email']), FILTER_SANITIZE_EMAIL);
    if ( filter_var($sanitized_email, FILTER_VALIDATE_EMAIL)) {
        echo '';
    } else {
        echo 'Invalid Email Address.  Go Back.';
        exit;
    }

    /*
 * BEGIN sanitize and validate
 */
第二次编辑如下:

通过将清理代码添加到将数据带到数据库的脚本区域,获得要在数据库中显示的清理数据

 $_POST['author'] = mysql_real_escape_string(trim($_POST['author']));
      $author=filter_var($_POST['author'], FILTER_SANITIZE_STRING);

      $_POST['email'] = mysql_real_escape_string(trim($_POST['email']));
      $email=filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);

现在我必须完成验证电子邮件的尝试。

第一件事:您的查询安全性不是由筛选模块提供的;该扩展与数据库交互无关,它只清理或验证用户输入(之后,您可以在不使用数据库的情况下使用它执行许多操作)

更新:例如,在使用筛选模块后,将中断sql查询的引号或撇号仍然存在,并且由于字符串没有问题,因此如果您决定将其保存在数据库中,您的工作就是对其进行转义(或者在绑定参数的PDO这样的系统中,这不会成为问题)

因此,为了确保查询的安全,您应该使用其他系统,或者如果您被其他系统困住了,您可以使用适当的方法(例如使用mysql函数转义输入)

考虑到您没有说明您遇到的问题是什么,我可以补充一点,如果您想“清理”用户输入并删除html,您应该使用过滤器\u清理\u字符串标志,而不是过滤器\u清理\u特殊字符


对我来说,这个脚本工作正常,从输入中删除html标记

您没有提到问题所在。你有错吗?对不起,我应该解释得更清楚些。出于某种原因,我以为每个人都能读懂我的心思,哈哈!我对表单进行了测试,得到了正确的错误消息,成功后,它会进入数据库,但在数据库中仍然有html代码。我会去试试上面的建议,并让你知道它是否有效。非常感谢。如果是一个有效的电子邮件地址,并且不是真的或假的,那么即使此脚本中没有问题,添加的内容也会返回
$sanitized\u email
false@EmilyBonilla我认为你的数据库中没有html标记,我认为您有显示初始标记的html实体。。这是不同的。。如果使用B标记保存文本,则不会将其显示为粗体,而是将其包装在开始标记和结束标记之间。。这是因为您使用的是
FILTER\u SANITIZE\u SPECIAL\u CHARS
,而不是
FILTER\u SANITIZE\u STRING
,正如我在回答中所说的那样also@EmilyBonilla有什么反馈吗?:)这就是我现在拥有的,但它不起作用;也就是说,我的数据库中仍然有html,错误消息不起作用。更新上面的代码。