У меня есть этот код, который очищает ввод пользователя от переменной с именем «username»:
$username_clean = preg_replace( "/[^a-zA-Z0-9_]/", "", $_POST['username'] ); if (!strlen($username_clean)){ die("username is blank!");
Я хочу выполнить один и тот же процесс на каждом входе на этой странице, но у меня есть около 12 различных входов, так как это зарегистрированная форма. Есть ли более простой способ дезинфекции и проверки каждого входа вместо применения preg_replace () и оператора if на каждом из них?
Если вы хотите дезинфицировать все элементы в $_POST
, вы можете просто создать функцию array_map
и применить ее ко всем элементам с помощью array_map
:
$post_clean = array_map("sanitization_function", $_POST);
Затем вы получите доступ к своим переменным через $post_clean
вместо $_POST
.
Это будет выглядеть примерно так:
function sanitize($dirty){ return preg_replace( "/[^a-zA-Z0-9_]/", "", $dirty ); } $cPOST = array_map("sanitize", $_POST); if (!strlen($cPOST['username'])){ die("username is blank!"); }
Если вы хотите только очистить подмножество элементов $_POST
, вы можете сделать что-то вроде:
$cPOST = array(); $sanitize_keys = array('username','someotherkeytosanitize'); foreach($_POST as $k=>$v) { if(in_array($k, $sanitize_keys)) { $cPOST[$k] = preg_replace( "/[^a-zA-Z0-9_]/", "", $v); } else { $cPOST[$k] = $v; } }
Попробуй это:
$cPOST = array(); $sanitize_keys = array('username','someotherkeytosanitize'); for($_POST as $k=>$v) { if(in_array($k, $sanitize_keys)) { $cPOST[$k] = preg_replace( "/[^a-zA-Z0-9_]/", "", $v); if(strlen($cPOST[$k]) == 0){ die("%s is blank", $k); } } else { $cPOST[$k] = $v; } } # At this point, the variables in $cPOST are the same as $_POST, unless you # specified they be sanitized (by including them in the $sanitize_keys array. # Also, if you get here, you know that the entries $cPOST that correspond # to the keys in $sanitize_keys were not blank after sanitization.
Просто не забудьте изменить $ sanitize_keys на массив любых переменных (или ключей $ _POST), которые вы хотите дезинфицировать.
Если регулярное выражение и проверка на отказ совпадают, вы можете написать функцию:
function validate($input, $input_name) { $clean_input = preg_replace( "/[^a-zA-Z0-9_]/", "", $input ); if (!strlen($username_clean)){ die("$input_name is blank!"); } return $clean_input; } validate($_POST['username'], "Username");