2014-01-06 3 views
1

все! У меня было ужасное время, пытаясь понять, почему моя проверка формы не распознает пустые поля и возвращает их как ошибки.PHP Not Reading Form Fields As Empty

Вот функция, я использую, чтобы проверить поля:

function check_required_fields($required_array) { 
$field_errors = array(); 
foreach($required_array as $fieldname) { 
    if (!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)) { 
     $field_errors[] = $fieldname; 
    } 
} 
return $field_errors; 
} 

Тогда моя форма процесса, как это:

if (isset($_POST['submit'])) { // Form has been submitted. 
    $errors = array(); 

    // perform validations on the form data 
    $required_fields = array('client', 'banner', 'district', 'store', 'position', 'first_name', 'last_name', 'email', 'password'); 
    $errors = array_merge($errors, check_required_fields($required_fields, $_POST)); 

и AN оператор проверяет IF на наличие ошибок:

if (empty($errors)) { 
     $query = 

Проблема в том, что даже если мои поля пустые (и я проверил их с помощью var_dump ($ _ POST)) PHP выполняет запрос $. Я думаю, что что-то не так с функцией. Надеюсь, кто-то может помочь мне обнаружить ошибку!

Вот суть моего HTML-код:

<form action="registration.php" method="post"> 

<label for="first_name" class="medium">First Name</label> 
<input type="text" name="first_name" class="textbox short_field"> 

<button type="submit" name="submit" value="submit" class="form-submit-button">SUBMIT</button> 

</form> 

Я также использую следующие функции для проверки длины строки и она работает просто отлично:

function check_max_field_lengths($field_length_array) { 
$field_errors = array(); 
foreach($field_length_array as $fieldname => $maxlength) { 
    if (strlen(trim(mysql_prep($_POST[$fieldname]))) > $maxlength) { $field_errors[] = $fieldname; 
    } 
} 
return $field_errors; 
} 

и

$fields_with_lengths = array('first_name' => 30, 'last_name' => 30, 'email' => 50, 'password' => 30); 
    $errors = array_merge($errors, check_max_field_lengths($fields_with_lengths, $_POST)); 
+0

И в HTML-код? Вы должны включить 'method = 'POST'' в свой тег формы. –

+0

Вы 'var_dump ($ errors)', чтобы увидеть, что там? –

+0

Функция 'check_require_fields()' принимает только один аргумент, но вы вызываете ее с двумя. –

ответ

1

«Проблема в том, что даже если мои поля пустые (и я проверил их с var_dump ($ _ POST)) PHP выполняет запрос $. "

Ваша проблема вызвана этим условием: $ Var = 0. Php может отбрасывать переменные различных типов между друг с другом, так что пустая строка равна 0. Доказательство:

<?php 
$var = ''; 
var_dump($var == 0); 

Выход: bool(true)

Теперь посмотрим на этот образец, имитирующие, как PHP обрабатывает ваше состояние:

<?php 
$var = ''; 
var_dump(empty($var)); 
var_dump((empty($var) && $var != 0)); 

Выход:

bool(true) 
bool(false) 

В случае 2-й булева функция возвращает ложь, поэтому, переменная не будет добавлен в массив ошибок.

Я не знаю, чего вы хотите достичь: $var != 0. Но условие:

if (!isset($_POST[$fieldname]) || 
    (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)) { 
     $field_errors[] = $fieldname; 
} 

можно легко переключить на это:

if (empty($_POST[$fieldname])) { 
    $field_errors[] = $fieldname; 
} 
+0

Спасибо, пользователь4035! Это исправило это! И, благодаря всем остальным за их вклад. – Mike