目标是清理从表单收集的$ _POST数据,但是在这种形式中我有一个带日期(d / m / Y)的输入字段,我需要在将其保存到数据库之前使用preg_replace()。此外,我有一个欧元值(1.000,00)的输入,我还需要使用preg_replace来修改该值。
PHP代码的第一部分是:
$filterType = array( // set up an array that will hold specific flags needed for PHP's filter_var() function.
'string' => FILTER_SANITIZE_STRING, //Strip tags, optionally strip or encode special characters
'integer' => FILTER_VALIDATE_INT, //Validate value as integer, optionally from the specified range
);
$post = array(); // sets up a new array to add sanitized $_POST data
foreach($_POST as $key => $value) { //Enter the loop.
$filter = $filterType[gettype($value)]; // $filter uses PHP's gettype() function to return the $value's type<br>
// and compare it to the $filterType array for the necessary flags to use in the filter_var() function.
$value = filter_var($value, $filter); // $value is the sanitized value that you want to save to the new array
$post[$key] = $value; // take the original key and sanitized value and append it to the new array.
} // exit loop
这里我需要从$ post数组$ _POST ['orderdate']和$ _POST ['ordervalue']中排除这样做:
$orderDate = preg_replace("#([0-9]{2})(/)([0-9]{2})(/)([0-9]{4})#","\\5-\\3-\\1",$_POST['orderdate'],;
$orderValue = preg_replace("/(,)/", "/(\.)/", $_POST['ordervalue'], ;
$bindValues = array( // set up a second array that will hold my specific values
'orderdate' => $orderDate,
'ordervalue' => $orderValue,
);
$bindValues = array_merge($bindValues, $post); // merge both arrays
然后将$ bindValues数组插入db:
$items = implode(',', array_keys($bindValues));
$values = implode(',:', array_keys($bindValues));
$table = 'orders' ;
$stmt = $dbh->prepare("INSERT INTO $table ($items) VALUES (:$values)");
foreach($bindValues as $key => $value) {
$stmt->bindValue(':' . $key, $value, PDO::PARAM_STR);
}
$stmt->execute();
$stmt->free_result();
这就是全部:)
答案 0 :(得分:1)
您尝试编写的此功能毫无意义。
与许多其他PHP用户一样,您非常希望无处不在地编写代码。
您的过滤器都不会按预期工作,也绝不会有任何好处。更不用说在入口点批量“消毒”的整体想法被证明是不可靠和有害的。
因此,最好摆脱它,只需手动验证您的自定义字段,然后将数据传递给DB。然后格式,而不是根据它将要使用的媒介“清理”它。
同时在查询中允许SQL注入。
答案 1 :(得分:0)
使用if
围绕foreach的内部。
foreach($_POST as $key => $value) {
if ($key != 'orderdate' && $key != 'orderValue') {
// your code
}
}