PHP: проверьте, установлены ли поля формы и не пустые - до и после preg_replace - PullRequest
0 голосов
/ 13 июня 2019

У меня есть базовая форма с дюжиной полей (я бы взял 3 например):

<input type="text" name="user_first_name" class="form-control" pattern="[A-Za-z-]+" required />
<input type="text" name="user_last_name" class="form-control" pattern="[A-Za-z-]+" required />
<input type="tel"  name="user_phone" class="form-control" />
...

Только номер телефона может быть пустым, фамилия и имя являются обязательными и могут содержать только буквы и тире (технические ограничения были наложены на меня нашей старой ERP)

Я создал функцию для очистки всех моих полей, которая выглядит следующим образом:

public function sanitizeInfo($user_first_name, $user_last_name, $user_phone) {

    $user_first_name  = preg_replace('/[^A-Za-z-]/', '', $user_first_name);
    $user_last_name   = preg_replace('/[^A-Za-z-]/', '', $user_last_name);
    $user_phone       = (isset($user_phone) and !empty($user_phone)) ? preg_replace('/[^A-Za-z0-9+-.)(]/', '', $user_phone) : NULL;

    $array = array(
      "first_name" => $user_first_name,
      "last_name"  => $user_last_name,
      "phone"      => $user_phone
    );

    return $array;
  }

В моем скрипте PHP я делаю эту первую проверку:

$fields = array('user_first_name', 'user_last_name');
$error = FALSE; 

foreach ($fields as $fieldname) { 
  if(!isset($_POST[$fieldname]) or empty($_POST[$fieldname])) {
    $error = TRUE; 
    $message = 'err';
  }
}

if (error === TRUE) {
  echo "Error !"
} else {
  $info = sanitizeInfo($_POST['user_first_name'], $_POST['user_last_name'], $_POST['user_phone']);
  ...
  ** QUERY **
}

Я хочу проверить перед отправкой в ​​базу данных, что поля не пусты (только номер телефона может быть НЕДЕЙСТВИТЕЛЕН)

Но проблема сейчас в том, что я не знаю, существуют ли мои необязательные поля, и особенно моя функция sanatizeInfo проблематична, потому что она позволяет помещать пустые поля в базу данных

Пример: Пользователь вводит "!! -" в качестве имени, а функция sanitizeInfo возвращает "", потому что preg_replace для удаления этих символов

Как этого избежать?

1 Ответ

0 голосов
/ 13 июня 2019

Все, что вам нужно сделать, это вызвать функцию sanitizeInfo перед проверкой пустых полей и заменить цикл foreach простой функцией array_search.

Это может быть реализовано следующим образом:

$fields = array('user_first_name', 'user_last_name');
$error  = FALSE;

$values = sanitizeInfo($fields[0], $fields[1], @$fields[2]);
$arSear = array_search('', $values);
if ($arSear !== FALSE && $arSear != 'phone'){
  $error   = TRUE;
  $message = 'The field `'.$arSear.'` is empty.';
}

if ($error) {
  echo 'Error: '. $message;
} else {
  // QUERY ....
}

В целях согласованности я рекомендую всегда использовать && и || в php против AND и OR.Это предотвратит любые поездки в отношении приоритета. 'AND' vs '&&' в качестве оператора

...