Использование PHP для запроса информации об ошибках и публикации сообщений об ошибках - PullRequest
0 голосов
/ 16 июля 2010

У меня есть HTML-форма, которая принимает введенные данные и отправляет их через функцию mail (). У меня также есть несколько методов проверки, которые проверяют входные данные, и я создал переменную массива $ errors для регистрации всех ошибок; например,

если имя оставлено пустым, $ errors [] = "Name empty"; Если письмо оставлено пустым, $ errors [] = "email empty";

и т. Д. *

Мне удалось сообщить об ошибках, используя следующую технику:

print '<div id="formfeedback"><h3>Error!</h3><p>The following error(s) has occurred:<br />';
    foreach ($errors as $msg) { //prints each error
            print " - $msg<br />\n";
        } // end of foreach

Однако я хочу следующее. Я хочу, чтобы страница была перенаправлена ​​обратно в исходную форму, которая использовалась для ввода информации (я знаю точное местоположение ссылки, поэтому я могу использовать header () или даже <meta=http-equiv=refresh>, чтобы вернуть меня на страницу формы.

Кроме того, в форме я хочу иметь возможность размещать ошибки над формой в некотором div (назовите это div = errors)

Смогу ли я сделать следующее?

    <div id="errors">
<?php    
print 'The following error(s) has occurred:<br />';
            foreach ($_REQUEST[$errors] as $msg) { //prints each error
                    print " - $msg<br />\n";
                } // end of foreach
?>   
 </div>

Большое спасибо!

Amit

Ответы [ 4 ]

1 голос
/ 16 июля 2010

Я согласен с @Fosco. Я хочу объяснить немного больше -

Может быть два случая 1. Вы делаете сырой php 2. Вы программируете на любом php-фреймворке, например CI или своем.

, и это поможет идентифицировать поле ошибки и изменить стиль, чтобы улучшить реакцию пользователя. Также последние входные данные остаются такими, какими они были.

  1. Вы делаете сырой php В этом случае вы можете получить входные данные в том же файле / странице. Я приведу общий пример позже.

  2. Вы кодируете на любом php-фреймворке, например CI или своем. В этом случае вы загружаете файл представления для отображения страницы формы и можете передавать данные для просмотра страницы / файла при его загрузке.

Для обоих вышеперечисленных случаев вы можете выполнить некоторое кодирование, например: *

/* 
your input validation and verification goes here. where $error is generated too
In addition add some error status in above section, 
you can do it in your $error array too. Also you store received data into $data here. index of $data should be similar as (corresponding) HTML input name. 
You can do it like below
*/
$error_stat = array();
//if the input field name is "email" and email input data raises any error then

$error_stat['email'] = true;
// same for name
$error_stat['name'] = true;
// and so on

// now decide whether you will back to the form page or send the email and do other tasks
if(count($error_stat)<= 0){
  // send email
  // do aditional tasks
}
else{
  // load the form again if its aframework or the form is in seperate file
  // off course send $error,$data and $error_stat to the form page/file
}

// now here is a code segment of form page
<?php if(isset($error) && count($error)>0):?>
<div id="error-msg">
<?php
//display errors here
?>
</div>
<?php endif;?>

<form .... >
<input type="text" name="email" class="<?php echo (isset($error_stat['email'])?'error':'else'); ?>" value="<?php echo $data['email'];?>" />\
<!-- and so on ... -->
1 голос
/ 16 июля 2010

Самый простой способ сделать это:

// Start the session
session_start();

// Store the errors in the session
$_SESSION['errors'] = $errors;

// Redirect to correct page
header('HTTP/1.1 303 See Other');
header('Location: http://original/page');
exit;

Затем на странице формы:

// Start the session
session_start();

// extract the errors
$errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : array();

// Display the form with errors
foreach ($errors as $msg) ... ;
0 голосов
/ 16 июля 2010

убедитесь, что ваш сеанс запущен в верхней части вашего приложения

включает этот базовый класс

class FormErrors
{
    var $handler;
    function __construct($fname)
    {
        $this->handler &= isset($_SESSION[$fname]) $_SESSION[$fname] : ($_SESSION[$fname] = array());
    }

    public function add($name, $value)
    {
        $this->handler[$name] = $value;
    }

    public function remove($name)
    {
        unset($this->handler[$name]);
    }

    public function getErrors()
    {
        return $this->handler;
    }
}

, поэтому при обработке ошибок вы можете перейти

if(isset($_POST))
{
    $FormErrors = new FormErrors("registration");

    if(strlen($_POST['username']) == 0)
    {
       $FormErrors->add('Username','Please enter a valid username');
    }

    //And for the rest of your checks
}

, тогда в вашей стороне html do

foreach($FormErrors ->getErrors() as $name => $error)
{
    echo sprintf("<p title=\"%s\">%s</p>",$name,$error);
}

должен работать, и если вы хотите удалить все известные ошибки, сделайте

$FormErrors = new FormErrors("registration");
unset($FormErrors->handler,$FormErrors);
0 голосов
/ 16 июля 2010

Обычно у меня одна и та же страница обрабатывает ввод и отправку. Если данные действительны, письмо будет отправлено, и страница уведомит их об этом (или перенаправит их в другое место) ... если данные будут недействительными, то форма появится снова и ошибки могут отображаться без каких-либо Необычное перенаправление.

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