我能';如果无法实现此功能,php将清理过滤器
有人能告诉我我做错了什么吗?我试图用php过滤器清理和验证表单用户输入。这个输入将进入一个mySql数据库,然后是一个html页面输出,所以我需要删除所有html标记,并为mySql提供安全性 谢谢我能';如果无法实现此功能,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,
/*
* 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,错误消息不起作用。更新上面的代码。