2013-04-09 2 views
1

У меня возникла странная проблема с моими формами. У меня есть 4 входа в моей форме, и все они проверяются.Вопросы проверки формы в cakephp

Все работает нормально, пока оно не проверит мое последнее поле ввода, которое является полем ввода электронной почты. У меня есть два правила, установленные в поле ввода электронной почты, 'rule' => 'notEmpty', 'rule' => 'email'. Форма проверяет и публикует сообщения только в том случае, когда требуется только проверить правило notEmpty, но если найден недействительный адрес электронной почты, он проверяет его, но он не публикуется даже после ввода действительного сообщения электронной почты.

Вот несколько сценариев:
One: пользователь вводит допустимые значения для всех входов
Все отлично работает, посты формы и данные добавляются в базу данных.

Два: пользователь вводит допустимые значения для всех, кроме ввода электронной почты, но затем вводит действительные электронные письма во всех входах
Если предположить, что пользователь нажимает отправить только после внесения вклада в течение первых трех полей
все работает после ввода правильного адреса электронной почты в первый раз, в базу данных добавляются сообщения и данные формы.

Три: пользователь вводит допустимые значения для всех, кроме электронной почты (обеспечивает недопустимый адрес электронной почты)
Он отображает сообщение об ошибке, но даже после предоставления действительного адреса электронной почты, он не делает ничего. Я замечаю, что страница продолжает перезагрузку с теми же данными, если вы продолжаете нажимать кнопку отправки.
Кроме того, сообщение об ошибке исчезнет, ​​если кнопка отправить нажата снова после первоначального клика

Вот моя модель:

class Member extends AppModel 
{ 
    public $validate = array(
     'id' => array(
      'rule' => 'notEmpty' 
      ), 
     'Student_First_Name' => array(
      'rule' => 'notEmpty' 
      ), 
     'Student_Last_Name' => array(
      'rule' => 'notEmpty' 
      ), 
     'Student_Email' => array(
      'emailRule-1' => array(
       'rule' => 'notEmpty', 
       'last' => false 
       ), 
      'emailRule-2' => array(
       'rule' => 'email', 
       'message' => 'Please enter a valid email address.' 
      )) 
     ); 

} 

Вот контроллер:

class MembersController extends AppController 
{ 
    ... 
    public function add() 
    { 
     if($this->request->is('post')) 
     { 
      $this->Member->create(); 

      if($this->Member->save($this->request->data)) 
      { 
       $this->Session->setFlash('Member has been added!'); 
       $this->redirect(array('action' => 'members')); 
      } 
      else 
      { 
       $this->Session->setFlash('Unable to add member.'); 
      } 
     } 
    } 
    } 

Прошу прощения за такой длинный пост за такую ​​простую/неприятную проблему, но Мне не нравятся такие вещи в моих приложениях/веб-сайтах.

спасибо.

+0

Почему вы используете '' last '=> false'? не имеет никакого смысла для меня .. Если кто-то не вводил никаких сообщений электронной почты, нет необходимости также проверять действительную форму электронной почты ... – mark

+0

Да, это не нужно, я просто просматривал документацию и пробовал разные вещи. – Archon

ответ

0

Ваша форма, скорее всего, будет другой формой сообщения: положить.

Быстрое объяснение:

POST is simulated by FormHelper for 'create' form, or any post form that isn't modifying an existing record. 

PUT is for updating existing records. 

См http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::create

Ваш подсчет добавить действия, как "создать".

К слову: код торта показывает, что на самом деле ДОЛЖЕН быть POST (см. Комментарии ниже). Поэтому где-то в вашем коде вы делаете помощника, чтобы изменить его с POST на PUT. Возможно, вы делаете некоторые нетрадиционные вещи.

Совет: Если вы хотите быть на безопасной стороне, проверьте на обоих:

if ($this->request->is('post') || $this->request->is('put')) {} 

, чтобы убедиться, что оба типа почтовые действительны.

Также старайтесь придерживаться условных обозначений и использовать нижестоящие поля. И последнее, но не менее важное - отбросить проверку «id». Нет смысла проверять первичные ключи.

+0

Удивительный! что сделал трюк .... Я чувствую себя довольно глупым lol. Отработанные часы на этом. Впервые для структуры и веб-разработки в целом, я был знаком с запросами POST и GET. В любом случае, действительно оцените помощь! – Archon

+0

Неверный. Создание новой записи - POST, редактирование записи - PUT. Это указано в [manual] (http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::create) и очевидно с помощью bake [template] (https: // github.com/cakephp/cakephp/blob/master/lib/Cake/Console/Templates/default/actions/controller_actions.ctp#L54). – ADmad

+0

@Archon Почему у вас есть проверка notEmpty для вашего поля id? При создании новой записи она будет пустой. – ADmad

Смежные вопросы