2013-04-05 2 views
0

У меня есть форма для создания учетной записи, и она перенаправляется на мою php-страницу, чтобы проверить форму для пустых полей и вставить данные.PHP - Обработка ошибок пустого поля

Я использую empty();, чтобы проверить, являются ли поля пустыми и как обработка ошибок. Я просто использую эхо, теперь мой вопрос в том, могу ли я сделать это несколько лучше, потому что моя страница проверки формы php не имеет любая конструкция применяется, поэтому обработка ошибок находится на пустой странице.

+0

Вы можете использовать jQuey для проверки значений полей, а затем только отправьте форму, если все заполненный. –

+0

Skugga: Я считаю, что его плохая практика заключается в проверке формы на стороне сервера, лучше использовать javascript в вашей форме, чтобы проверить все поля, а затем отправить окончательное полное значение на серверный скрипт (php). – dreamweiver

+0

@dreamweiver Надеюсь, вы не собираетесь полностью отказываться от проверки на стороне сервера ?! – deceze

ответ

1

Предполагая, что все поля в вашей форме вводят текстовые поля (добавьте класс «requiredField») на них. Создайте кнопку «Отправить», когда загружается пустая форма.

JQuery:

$(document).ready(function() { 
$("input.requiredField:text").bind("keyup change", function() { 

     updateSaveButton(); 
    }); 

}); 

function updateSaveButton() { 
if ($(".requiredField:text").filter(function() {return $(this).val().match(/^\s*$/);}).length) { 
$("#submit").button({ 
      disabled : true 
     }); 
} else { 
$("#submit").button({                                              
       disabled : false                                             
        }); 
} 


} 

Отправить это идентификатор кнопки отправки и кнопка является частью JQuery UI. Однако, если вы не используете jQuery UI, вы можете просто добавить отключенный атрибут. Например:

$("#submit").attr("disabled","disabled"); {to add disabled attribute} 
$("#submit").removeAttr("disabled"); {to remove disabled attribute} 

Поскольку кнопка «Отправка» останется недоступной, пользователь не сможет отправлять какие-либо формы. кнопка Submit будет также оставаться отключенным, когда пользователь вводит только пробелы в качестве значений любого текстового поля

1

На мой взгляд пустой() это лучший способ проверить ввод в общем

if(empty($_POST[ 'username' ])) { 

     $error = 'Please enter a user name'; 
} 

В лучшем случае вы делаете это

$username = !empty($_POST[ 'username' ]) ? trim($_POST[ 'username' ]) : ''; 

if(empty($username)) $error = 'Please insert a user name'; 
if(strlen($username) < 3) $error = 'Username needs 3 characters'; 
//etc... 

Это позволит убедиться, что пользователь не просто предоставить белое-пространство кормить запрошенный вход

Есть несколько методов для обработки ввода.

1) Перенаправление форму на ту же страницу и обрабатывать ввод над выходом

$error = ''; 
if(strtolower($_SERVER[ 'REQUEST_METHOD' ]) === 'post') { 


     //handle user input and fill $error if needed 

     if(empty($error)) { 
      //success 
     } 

} 

?> 
<form action="thissite.php"> 
     <?php if(!empty($error)) :?><span class="error"><?=$error?></span><?php endif; ?> 
     <...rest of the form...> 
</form> 

2) Вы можете обрабатывать его с помощью AJAX

отправить форму с помощью AJAX (см JQuery-х $.ajax и $.serialize , это хорошо поможет вам), получите строку JSON, содержащую либо состояние успеха, либо ошибку. Разобрать это и вставить элементы ошибок в вашей форме соответственно

3) (Худший способ имо) Перейти на новую страницу, показать ошибки и перенаправить к форме еще раз, если есть ошибки

Отправить форму на новый страницу, которая обрабатывает входные данные, выводит сообщения об ошибках в стиле и помещает ссылку, которая либо приступает к вам (при успешном завершении), либо возвращает вас в форму (по ошибке).

0

Лучшее, что вы можете сделать, это сделать это с помощью исключений (в случае, если вы используете класс для работы с регистрацией.

Например, вы бы иметь класс, как этот

class Account { 
    public function register($username, $password, $mail) { 
     if(empty($username)) throw new RegistrationException("Username is empty."); 
     // and so on 
    } 
} 

Затем в месте регистрации, вы будете делать что-то подобное

try { 
    $account = new Account(); 
} catch(RegistrationException $e) { 
    // print the message out 
    // $e->getMessage() will return the parameter of new RegistrationException(...) 
} 

Тогда просто создать класс исключения, расширяющий исключение

class RegistrationException extends Exception {} 

В случае, если у вас будет проверка на стороне клиента (javascript/jQ uery), НЕ забывайте иметь валидацию на стороне сервера (php). Если вы этого не сделали, пользователь удалит правила аутентификации и перейдем (без имени пользователя, с недопустимыми символами, ...)