Как бы я сделал, чтобы это сообщение об ошибке появлялось, когда поле формы не правильно? - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть оператор if, и он уже работает, поэтому, если некоторые поля не заполнены, он не будет отправлен.Затем у меня есть else, и я выражаю его так:

if(isset($_POST['submit'])) {
    if (!empty($name) && (!empty($email) || !empty($phone))) {
    mail( "EMAIL@hotmail.com", "Monthly Specials Email",
    "Name: $name 
     Email: $email 
     Phone Number: $phone
     Comment: $comment", "From: $email" );

    $error = "";

   } else {
    $error = "Please fill in the required fields.";
   }
}

В форме у меня есть класс span примерно так:форма пуста, поэтому при отправке она останется на той же странице, и все функции будут на той же странице, что и форма.Как бы я обновить обновления диапазона ошибок?

Большое спасибо за любую помощь или советы!

Ответы [ 7 ]

1 голос
/ 14 декабря 2010

Когда я обрабатываю проверки формы, я склонен создавать массив для хранения сообщений об ошибках, например:

<?php

$error = array();
if( $POST ){
 # Form is Submitted
  if( /* TRUE if "email" is empty */ ){
    $error['email'] = 'Please provide an Email Address';
  }elseif( /* TRUE if "email" is not a valid address */ ){
    $error['email'] = 'Please provide a Valid Email Address';
  }elseif( /* TRUE if "email" is already associated with a User */ ){
    $error['email'] = 'The Provided Email Address is Already Taken';
  }

...

  if( count( $error )==0 ){
   # No Error has been Recorded
   # Do Successful Things
  }
} /* Closing if( $_POST ){ */

Тогда в разделе презентации / отображения у меня есть что-то вроде:

<?php if( count( $error )>0 ){ ?>
<div id="error">
  The following Errors have occurred:
  <ul>
<?php foreach( $error as $k => $v ){ ?>
    <li><?php echo $k; ?>: <?php echo $v; ?></li>
<?php } ?>
  </ul>
</div>
<?php } ?>

А внутри формы что-то вроде:

<input name="email"<?php echo ( $error['email'] ? ' class="error"' : '' ); ?> />

Это означает, что:

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

Так хорошо сработало в моем опыте.

1 голос
/ 14 декабря 2010

Да, я думаю, у вас есть два способа сделать это, как уже объяснено выше ...

  1. Когда форма отправляется на одну и ту же страницу (сама) с помощью * $ _ SERVER ['PHP_SELF'] *, вы можете проверить, является ли каждое опубликованное поле пустым, используя функцию empty () . Затем, если они не заполнены, установите переменную $ error , а затем используйте echo $ error; в диапазоне ошибок ... Если нет ошибок, вы можете назначить сообщение по умолчанию в ошибка $ вместо ошибки ... Она должна делать то, что вам нужно ...

  2. Вы можете использовать AJAX и отправить запрос на страницу и установить сообщение об ошибке. Тогда страница обновляется не полностью, как это было раньше, а только элемент, который вы хотите обновить. Это быстро, но в большинстве случаев предпочтителен первый метод, если только AJAX не нужен.

Что именно вы хотите сделать? Если вы укажете, в чем именно вы нуждаетесь, можно предоставить пример кода ... (Первый метод уже обсуждался)

Спасибо. Адинамическая

1 голос
/ 14 декабря 2010

Вам не нужен AJAX.

$error = '';
if (isset($_POST['submit'])) {
    if ( <<< insert check for required fields >>> ) {
        // handle form, send mail, etc
        // you may want to redirect on success to prevent double posting
    } else {
        $error = "Please fill in the required fields.";
    }
}
1 голос
/ 14 декабря 2010

Следуя вашей текущей модели, я предполагаю, что вы не имеете в виду AJAX, и что вы просто имеете в виду код на стороне сервера и совместное использование в одном и том же сценарии. Вы можете сначала установить действие формы в $ _SERVER ['PHP_SELF'], чтобы убедиться, что установлен правильный атрибут действия.

Вы выводите сообщение об ошибке в пределах диапазона или все эти выходные данные помещаются после оператора echo?

echo '<span class="error">'.$error.'</span>'

Или, если не в контексте PHP вне скрипта

<span class="error"><? echo $error; ?></span>

Кроме того, вы можете рассмотреть возможность использования зрелого почтового решения php, такого как PHP Mailer , чтобы помочь установить заголовки и обеспечить более эффективную доставку.

1 голос
/ 14 декабря 2010

Чтобы обработать форму, оставаясь на странице, вам нужно будет включить немного AJAX.Самый простой способ сделать это - использовать какой-то фреймворк (рекомендуем jQuery).Это должно дать вам некоторое представление о том, как разработать такую ​​функциональность.Если вы застряли, мы здесь, чтобы помочь.http://api.jquery.com/jQuery.post/

1 голос
/ 14 декабря 2010

Ну, без остальной части страницы, я не уверен, почему это уже не работает, но вы должны отправлять обратно на ту же страницу, а не просто пустое действие. Я бы сделал это так.

<?php 
$error = $name = $email = $phone = $comment = "";
if(isset($_POST['submit'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $comment = $_POST['comment'];
    if (!empty($name) && (!empty($email) || !empty($phone))) {
    mail( "EMAIL@hotmail.com", "Monthly Specials Email",
    "Name: $name 
    Email: $email 
    Phone Number: $phone
    Comment: $comment", "From: $email" );
    } else {
        $error = "Please fill in the required fields.";
    }
}else{ ?>

<div id="specialsForm"><h3>Interested in this coupon? Email us! </h3>           
<form method="post" action="emailMonthlySpecials.php">    
    <span class="error><?php echo $error; ?></span>
    Name: <input name="name" type="text" value="<?php echo $name;?>"/><br />
    Email: <input name="email" type="text" value="<?php echo $email;?>"/><br />
    Phone Number: <input name="phone" type="text" <?php echo $phone;?>"/><br /><br /> 
    Comment: <br/>
    <textarea name="comment" rows="5" cols="30"><?php echo $comment;?></textarea><br /><br />
    <input type="submit" value="Submit Email"/>
</form></div>

<?php } ?>
0 голосов
/ 14 декабря 2010

Я предлагаю использовать ajax call при отправке,

в соответствии с ответом вернитесь, вы обновите диапазон ошибок.

вы можете найти множество примеров в сети, например

http://jqueryfordesigners.com/using-ajax-to-validate-forms/

http://www.the -art-of-web.com / javascript / ajax-validate /

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