2013-02-13 3 views
1

Я написал небольшую функцию для проверки необходимых полей формы, не пустой. Функция принимает два аргумента, 1st - массив со всеми значениями из $ _POST superglobal. 2nd - это необходимый массив полей, который я заполняю.PHP: проверка значения ключа не пуста

Посмотрите:

public $errors = array(); 

public function validate_fields($fields_array, $required_fields) 
{ 
    foreach ($required_fields as $key => $value) 
    { 
     if (array_key_exists($key, $fields_array)) 
     { 
      # If key exists in $fields_array 
      # check that the key value inside $fields_array is set & isn't empty 
      # if it's empty, populate with an error 
      if(empty($fields_array[$key][$value])) 
      { 
       $this->errors[] = "{$key} is empty but in fields_array"; 
      } 
     } 
     else 
     { 
      # Key does not exists in $fields_array 
      # Did someone temper with my html ? 
      $this->errors[] = "{$key} is not in fields_array"; 
     } 
    } 
    return (empty($this->errors)) ? true : false; 
}  

Вопрос у меня, кажется, связано с "если (пусто ($ fields_array [$ ключ] [$ значение]))" заявление. моя цель - проверить, что значение ключа $ fields_array не пусто на основе ключа $ required_fields. Я уверен, что заявление, которое я использую, отключено. Если вы видите все, что, по вашему мнению, может быть написано лучше, сообщите мне, поскольку я новичок в php. Цените помощь.

ответ

2

Я думаю, что вы пытаетесь сделать, это:

if(empty($fields_array[$key])) { 
    //this means value does not exist or is FALSE 
} 

Если вы хотите проверить пустые строки или белого пространства, то вам нужно что-то большее, чем просто пустой. Например.

if(empty($fields_array[$key]) || !trim($fields_array[$key]))   { 
    //this means key exists but value is null or empty string or whitespace only 
} 
+0

Привет, Ричард, спасибо! Я не знал, что пустой возвращает ложь на пробелы. Еще раз спасибо. Кстати, так я заполняю массив обязательных полей: \t $ required_fields = array ("email" => "", "email_confirm" => ""); существует ли более быстрый подход к настройке массива с помощью только ключа вместо определения ключа + пустое значение? –

+0

$ required_fields = array_fill_keys (массив ("email", "email_confirm", "..."), ""); – kufudo

+0

Спасибо, что немного очищает его. –

2

Вам не нужно выбирать значение только как ключ индекса. Где $ fields_array [$ key] = $ value;

if(empty($fields_array[$key]) && trim($fields_array[$key]) != '') 
+0

Я вижу, вы добавили еще несколько условий, то Ричард, не используя пустой и аккуратный! покрыть все, чего я хочу избежать? (любая пустая строка или пробелы) –

+0

Просто будьте осторожны с пустым(), он обрабатывает такие вещи, как 0 или «0», как «пустой», что может быть не так, как вы хотите в некоторых случаях. Подробнее см. Комментарии в http://php.net/manual/en/function.empty.php. Вероятно, лучше явно проверить условия, которые вы хотите. – kufudo

+0

Я не могу думать ни о какой причине, я ожидаю, что пользователи будут вводить 0, «0» или даже «-0» в форме. Хотя у меня есть 2 переключателя для пола во время регистрации, я назначу их 1 и 2 в db. Если моя логика ошибается, исправьте меня :) –

2

Обратите внимание, что приведенные выше ответы будут работать только для индексированных массивов в> PHP 5.4. Если у вас есть ассоциативный массив, который вы должны использовать IsSet вместо пустого:

if(isset($fields_array[$key]) && trim($fields_array[$key]) != '') 

http://nl3.php.net/manual/en/function.empty.php см, пример # 2

Смежные вопросы