信息
我正在为我的网站建立一个注册表单。我无法确定何时更好地进行消毒和验证以及按什么顺序进行。
示例#1
我应该检查输入是否为空或者先设置然后验证它?
if(isset($_POST['submit'])){
$errors = array();
// Check if inputs are set.
if(!isset($_POST['user[type]']) || !empty($_POST['user[type]'])){
$errors[] = "Please Select An Account Type.";
}
if(empty($errors)){
// Validate inputs
$type = filter_input(INPUT_GET, 'type', FILTER_NUMBER_INT);
}
}
但是在确认之后我肯定要检查它是否为空?
示例#2
if(isset($_POST['submit'])){
$errors = array();
$type = filter_input(INPUT_GET, 'type', FILTER_NUMBER_INT);
// Check if inputs are set.
if(empty($type)){
$errors[] = "Please Select An Account Type.";
}
if(empty($errors)){
// continue
}
}
我希望第二种选择是更好的方法,但我不确定。我是否想过这个?随意建议其他方法来解决这个问题。谢谢。
答案 0 :(得分:0)
我认为
就足够了if(empty($type)){
$errors[] = "Please Select An Account Type.";
}
因为现在无论如何都会发生这种情况
但是,值$ type = 0将被视为失败
答案 1 :(得分:0)
为了正确验证表单,必须考虑一些方面,以帮助过滤过多的垃圾输入。我的方法是:
首先,检查文本的最小长度。这样,您可以降低无意义输入的风险。其次,检查文本的最大长度;你不希望有人为了好玩而用大量的文字充斥你的数据库。第三,你应该使用正则表达式检查不同字段的正确格式(邮政编码,电话号码,电子邮件),非常重要的是,只允许该字段中所需的字符,以避免或最小化风险通过输入发送悲惨的跨站点注射的人。
function validate_form() {
$errors = array();
// El nombre del usuario es necesario
if (! strlen(trim($_POST['user_name']))) {
$errors[] = 'The username is required.';
}
// El nombre del usuario no debe contener caracteres problemáticos
if (preg_match('@[^a-zA-Z0-9_\- ]@', trim($_POST['user_name']))) {
$errors[] = 'The username cannot contain invalid characters.';
}
// El nombre del usuario no debe tener menos de 3 caracteres
if (strlen(trim($_POST['user_name'])) < 3) {
$errors[] = 'The username cannot have less than 3 characters long.';
}
// El nombre del usuario no debe tener más de 24 caracteres
if (strlen(trim($_POST['user_name'])) > 24) {
$errors[] = 'The username cannot have more than 24 characters long.';
}
// La contraseña es necesaria
if (! strlen(trim($_POST['password']))) {
$errors[] = 'The password is required.';
}
// La contraseña no debe contener caracteres problemáticos
if (preg_match('@[^a-zA-Z0-9_\-]@', trim($_POST['password']))) {
$errors[] = 'The password cannot contain invalid characters.';
}
// La contraseña no debe tener menos de 6 caracteres
if (strlen(trim($_POST['password'])) < 6) {
$errors[] = 'The password cannot have less than 6 characters long.';
}
// La contraseña no debe tener más de 12 caracteres
if (strlen(trim($_POST['password'])) > 12) {
$errors[] = 'The password cannot have more than 12 characters long.';
}
// La contraseña debe contener letras y números
if (! preg_match('/([a-zA-Z][0-9]|[0-9][a-zA-Z])+/', trim($_POST['password']))) {
$errors[] = 'The password must contain letters and numbers.';
}
// Password y Password Check deben ser iguales
if ($_POST['password'] != $_POST['password_check']) {
$errors[] = 'Password and Password Check do not match.';
}
// El correo electrónico es necesario
if (! strlen(trim($_POST['e_mail']))) {
$errors[] = 'The e-mail is required.';
}
// El correo electrónico no debe contener caracteres problemáticos
if (preg_match('/[^a-zA-Z0-9_\-@\.]/', trim($_POST['e_mail']))) {
$errors[] = 'The e-mail cannot contain invalid characters.';
}
// El correo electrónico no debe tener más de 64 caracteres
if (strlen(trim($_POST['e_mail'])) > 64) {
$errors[] = 'The e-mail cannot have more than 64 characters long.';
}
// El correo electrónico debe tener un formato correcto
if (! preg_match('/[^@\s]{3,}@([-a-z0-9]{3,}\.)+[a-z]{2,}/', trim($_POST['e_mail']))) {
$errors[] = 'The e-mail must have a valid format.';
}
// El país seleccionado debe ser válido
if (! array_key_exists($_POST['country'], $GLOBALS['countries'])) {
$errors[] = 'Please select a valid country.';
}
// La ciudad es necesaria
if (! strlen(trim($_POST['city']))) {
$errors[] = 'The city is required.';
}
// La ciudad no debe contener caracteres problemáticos
if (preg_match('@[^a-zA-Z\- ]@', trim($_POST['city']))) {
$errors[] = 'The city cannot contain invalid characters.';
}
// La ciudad no debe tener menos de 3 caracteres
if (strlen(trim($_POST['city'])) < 3) {
$errors[] = 'The city cannot have less than 3 characters long.';
}
// La ciudad no debe tener más de 64 caracteres
if (strlen(trim($_POST['city'])) > 64) {
$errors[] = 'The city cannot have more than 64 characters long.';
}
// El mes seleccionado debe ser válido
if (! array_key_exists($_POST['month'], $GLOBALS['months'])) {
$errors[] = 'Please select a valid month.';
}
// El día seleccionado debe ser válido
if (! array_key_exists($_POST['day'], $GLOBALS['days'])) {
$errors[] = 'Please select a valid day.';
}
// El año seleccionado debe ser válido
if (! array_key_exists($_POST['year'], $GLOBALS['years'])) {
$errors[] = 'Please select a valid year.';
}
// El nombre real del usuario es necesario
if (! strlen(trim($_POST['real_name']))) {
$errors[] = 'Your real name is required.';
}
// El nombre real del usuario no debe contener caracteres problemáticos
if (preg_match('@[^a-zA-Z\- ]@', trim($_POST['real_name']))) {
$errors[] = 'Your real name cannot contain invalid characters.';
}
// El nombre real del usuario debe tener menos de 3 caracteres
if (strlen(trim($_POST['real_name'])) < 3) {
$errors[] = 'Your real name cannot have less than 3 characters long.';
}
// El nombre real del usuario no debe tener más de 64 caracteres
if (strlen(trim($_POST['real_name'])) > 64) {
$errors[] = 'Your real name cannot have more than 64 characters long.';
}
// El número CAPTCHA introducido debe ser correcto
$captcha_num_1 = substr($_POST['captcha'], 0, 1);
$captcha_num_2 = substr($_POST['captcha'], 1, 1);
$captcha_num_3 = substr($_POST['captcha'], 2, 1);
$captcha_num_4 = substr($_POST['captcha'], 3, 1);
$captcha_num_5 = substr($_POST['captcha'], 4, 1);
if (($_SESSION['num1'] != crypt($captcha_num_1, $_SESSION['num1'])) ||
($_SESSION['num2'] != crypt($captcha_num_2, $_SESSION['num2'])) ||
($_SESSION['num3'] != crypt($captcha_num_3, $_SESSION['num3'])) ||
($_SESSION['num4'] != crypt($captcha_num_4, $_SESSION['num4'])) || ($_SESSION['num5'] != crypt($captcha_num_5, $_SESSION['num5']))) {
$errors[] = 'The CAPTCHA number entered is not correct.';
}
// El nombre de usuario y la dirección de e-mail deben ser únicos en la base de datos
global $db;
$sql = 'SELECT user_name, e_mail FROM users';
$q = mysqli_query($db, $sql);
if (mysqli_num_rows($q) > 0) {
while ($users = mysqli_fetch_object($q)) {
if ($users->user_name == $_POST['user_name']) {
$errors[] = 'This username already exists in the database. Please use a different one.';
}
if ($users->e_mail == $_POST['e_mail']) {
$errors[] = 'This e-mail address already exists in the database. Please use a different one.';
}
}
}
// Si hay errores, resetear el CAPTCHA
if (is_array($errors)) { reset_captcha();
}
return $errors;
}