ошибка логики и отображение в php? - PullRequest
1 голос
/ 14 ноября 2010

хорошо, я делаю приложение, я собираюсь рассказать, как я делаю логику ошибок и отображать в моем приложении

// ERROR CHECK
if ( !empty( $user_status ) )
    $errors[] = language( 'ERROR_USERNAME_USED' );

if ( empty( $_POST['username'] ) )
    $errors[] = language( 'ERROR_USERNAME_NULL' );

if ( !( $validation->valid_uid( $_POST['username'] ) ) && !empty( $_POST['username'] ) )
    $errors[] = language( 'ERROR_USER_NAME_NOT_VALID' );

if ( empty( $_POST['password'] ) )
    $errors[] = language( 'ERROR_USER_PASS_NULL' );

if ( empty( $_POST['name'] ) )
    $errors[] = language( 'ERROR_USER_REALNAME_NULL' );

if ( !( $validation->valid_name( $_POST['name'] ) ) && !empty( $_POST['name'] ) )
    $errors[] = language( 'ERROR_USER_REALNAME_NOT_VALID' );

if ( empty( $_POST['company'] ) )
    $errors[] = language( 'ERROR_COMPANY_NAME_NULL' );

if ( !( $validation->valid_company_name( $_POST['company'] ) ) && !empty( $_POST['company'] ) )
    $errors[] = language( 'ERROR_COMPANY_NAME_NOT_VALID' );

if ( empty( $_POST['phone'] ) )
    $errors[] = language( 'ERROR_USER_PHONE_NULL' );

if ( !( $validation->valid_phone( $_POST['phone'] ) ) && !empty( $_POST['phone'] ) )
    $errors[] = language( 'ERROR_USER_PHONE_NOT_VALID' );

// Database
if ( !sizeof( $errors ) ) {
    // do something here.
    }

вот моя функция

$errors = array(); 
function error_display($handle, $title = null, $type = null) 
{
    if (sizeof($handle)) 
    {
        echo '<div id="red-error-box"><ul><h3>' . count($handle) . ' ' . $title . ' Error!</h3>';

        if (is_null($type)) {
            foreach ($handle as $key => $value) 
            {
                echo '<li class="error-list">' . $value . '</li>';
            }
        }
        if ($type == 1)
        {
             echo '<li class="error-list">' . $handle[0] . '</li>';
        }

        echo '</div>';
    }
}

затем я отображаю их с помощью error_display($errors); в приведенном выше HTML,

есть ли лучший способ сделать это?

Спасибо за ваше время, помогающее

Адам Рамадхан

Ответы [ 2 ]

1 голос
/ 15 ноября 2010

Как уже говорилось, список $error[] кажется хорошим подходом. Но, как пример, вы можете упростить ваш код до списка проверки и цикла:

$fields = array(
     "username" => language( 'ERROR_USERNAME_NULL' ),
     "password" => language( 'ERROR_USER_PASS_NULL' ),
     "name" => language( 'ERROR_USER_REALNAME_NOT_VALID' ),
     ...
);

foreach ($fields as $field=>$error_msg) {

     if (empty($_POST[$field])
      || method_exists($validation, "valid_$field")
      && !$validation->{"valid_$field"}($_POST["field"]))
     {
          $errors[] = $error_msg;
     }
}

Очевидно, вам нужно лучшее описание, если вам действительно нужно разделить тесты _NULL и _NOT_VALID. Я бы лично пропустил это. Но, возможно, ваш класс проверки справится с этим. Создайте один метод verify_fields_not_empty () и второй test_valid_format ($ per_list). Возможно, вам понадобится более умный способ сопоставить имена полей с методами валидации, но это просто вопрос абстрагирования.

Но что более важно, вы можете адаптировать коллекцию $error[] в центральном месте. Я не уверен, что это необходимо, однако. Ваш массив ошибок уже можно использовать для печати журналов и . Это только если второй модуль приложения будет зависеть от формата объекта там ...

1 голос
/ 14 ноября 2010

Возможно, не самый лучший ответ, но я использую немного более ленивый метод, который отлично сработал для меня. Я просто использую JavaScript для отчетов об ошибках, но делаю проверку данных перед изменениями базы данных. Таким образом, если злонамеренный пользователь хочет обойти что-либо, я все еще нахожусь, и форма все еще выглядит хорошей. Существует также проблема, когда у пользователя не включен JavaScript. Для этих пользователей я просто говорю им, что требуется. Облегчает мою жизнь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...