Проверка формы PHP и структура - PullRequest
0 голосов
/ 30 марта 2012

Мне нужна небольшая помощь в структурировании веб-формы для включения проверки PHP и сообщений об ошибках, размещенных в правильном месте формы, если отправка не удалась. Я только что собрал простую форму с некоторыми случайными правилами валидации только для подтверждения концепции, прежде чем вводить фактическую информацию о форме и валидацию, которые мне требуются, в структуру.

Вот мой код: -

<?php
if($_POST['name'] && $_POST['email'])   {

    $errors = array();
    $name = $_POST['name'];
    $email = $_POST['email'];

    if (strlen($name) > 10) {
        $errors['name'] = 'Name is too long';
    }

    if(empty($name) || empty($email))   {
        $errors['required'] = 'All fields required';
    }
}

if(empty($errors) && $_POST)    {
    echo 'Your form has been submitted';            

}   elseif ($errors || !$_POST) {
?>  
        <form name="form" action="index.php" method="post">
        <?PHP if (isset($errors['required']))   { echo $errors['required'];} ?>
            Name:<br>
            <input type="text" name="name" value="<?php echo $name ?>"><?PHP if (isset($errors['name'])){ echo $errors['name']; } ?><br>
            Email<br>
            <input type="text" name="email"><br>
            <input type="submit" name="submit" value="submit">
        </form>
<?PHP   }
?>

Результатом чего является то, что моя форма показывает и отправляет, но проверка как бы игнорируется. Если любая из проверок приводит к ошибке, а не к ошибкам, отображаемым в форме, страница просто возвращает пустое, без сообщений об ошибках или формы. Кто-нибудь может посоветовать, пожалуйста, где я ошибаюсь?

Любая помощь будет принята с благодарностью!

Спасибо, Бен (Если вы не догадались, что я новичок в PHP и HTML!)

Ответы [ 4 ]

0 голосов
/ 30 марта 2012

Посмотрите на мое предложение ниже

<?php 
if(isset($_POST['submit']))   { 

$errors = array(); 
$name = $_POST['name']; 
$email = $_POST['email']; 

if (strlen($name) > 10) { 
    $errors['name'] = 'Name is too long'; 
} 

if(empty($name) || empty($email))   { 
    $errors['required'] = 'All fields required'; 
} 

if(empty($errors) && $_POST)    { 
echo 'Your form has been submitted';             

}   elseif ($errors || !$_POST) { 
?>   
    <form name="form" action="" method="post"> 
    <?PHP if (isset($errors['required']))   { echo $errors['required'];} ?> 
        Name:<br> 
        <input type="text" name="name" value="<?php echo $name ?>"><?PHP if (isset($errors    ['name'])){ echo $errors['name']; } ?><br> 
        Email<br> 
        <input type="text" name="email"><br> 
        <input type="submit" name="submit" value="submit"> 
    </form> 
<?PHP   } 



}else{
?>
 <form name="form" action="" method="post"> 

        Name:<br> 
        <input type="text" name="name" value=""><br> 
        Email<br> 
        <input type="text" name="email"><br> 
        <input type="submit" name="submit" value="submit"> 
    </form> 
<?php
}
?> 
0 голосов
/ 30 марта 2012

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

Я немного изменил ваш код, чтобы дать вам представление о проверке и инициализации переменных:)

<?php
$errors = array();
$name='';
$email='';
if(isset($_POST['name']) && isset($_POST['email']))   {


    $name = $_POST['name'];
    $email = $_POST['email'];

    if (strlen($name) > 10) {
        $errors['name'] = 'Name is too long';
    }

    if(empty($name) || empty($email))   {
        $errors['required'] = 'All fields required';
    }
}

if(empty($errors) && $_POST)    {
    echo 'Your form has been submitted';            

}   elseif ($errors || !$_POST) {
?>  
        <form name="form" action="9941580.php" method="post">
        <?PHP if (isset($errors['required']))   { echo $errors['required'];} ?>
            Name:<br>
            <input type="text" name="name" value="<?php echo $name ?>"><?PHP if (isset($errors['name'])){ echo $errors['name']; } ?><br>
            Email<br>
            <input type="text" name="email"><br>
            <input type="submit" name="submit" value="submit">
        </form>
<?php   }
?>
0 голосов
/ 30 марта 2012

if($_POST['name'] && $_POST['email']) { вернет false, если одно или оба поля остаются / остаются пустыми, поэтому проверка (которая происходит внутри условного выражения) никогда не запускается.

Если указан адрес электронной почты и имя длиннее 10 символов, форма отображается с соответствующей ошибкой («Имя слишком длинное»)

0 голосов
/ 30 марта 2012

Я думаю, что ваша проблема может быть в этой строке

}   elseif ($errors || !$_POST) {

попробуйте использовать

}   elseif (!empty($errors) || !$_POST) {
...