2012-04-06 2 views
0

Около двух месяцев назад я обновил веб-сайт SilverStripe с 2.3.5 до 2.4.6. С момента обновления некоторые из форм на моем сайте не отправят все данные в функцию отправки (запись POST пуста), включая «системные» формы, такие как форма забытого пароля для раздела администратора (и я думаю, что даже поле пароля для формы входа администратора). То, что я нахожу странным, состоит в том, что у меня есть почти идентичная (но другая) форма кода с тем же полем, которая работает отлично, но даже копирование поля не работает.Форма SilverStripe не отправляет все данные?

Вот рабочая форма и ее представить код:

function ContactUsForm() { 
     // Create fields 
     $fields = new FieldSet(
         new HeaderField('Send Us a Message:', '2'), 
         new TextField('NAME', 'Full Name:'), 
         new EmailField('EMAIL', 'E-mail Address:'), 
         new TextField('PHONE', 'Phone:'), 
         new TextField('COMPANYNAME', 'Company Name:'), 
         new TextareaField('MESSAGE', 'Message/Note:'), 
         new TextField('HUMAN', '1+1 =') 
     ); 

     // Create actions 
     $actions = new FieldSet(
         new FormAction('doContactUs', 'Submit') 
     ); 

     return new Form($this, 'ContactUsForm', $fields, $actions); 
    } 

    function doContactUs($data, $form) { 

     $human = $data['HUMAN']; 
     if ($human == '2') { 
      $from = '[email protected]'; 
      $to = '[email protected]'; 
      $subject = 'General Contact Submission'; 
      $body = $data['NAME'] . ' has submitted a General Inquiry, their info: ' . $data['NAME'] . ' | ' . $data['EMAIL'] . ' | ' . $data['PHONE'] . ' | ' . $data['COMPANYNAME'] . ' and they have included the following note (if they included a note): ' . $data['MESSAGE']; 
      $email = new Email($from, $to, $subject, $body); 
      $email->send(); 


      Director::redirect('thankyou/'); 
     } else { 
      $form->addErrorMessage('Message', 'Incorrect answer to the human check.','error'); 
      return Director::redirectBack(); 
     } 
    } 

Вот форма, которая не работает, а его представить код:

function GenericContactForm() { 

    global $contactmessage; 

    // Create fields 
    $fields = new FieldSet(
      new TextField('NAME', 'Full Name:'), 
      new EmailField('EMAIL', 'Email:'), 
      new TextField('TELEPHONE', 'Work Phone:'), 
      new ListboxField(
       $name = "TYPEOFCONTACT", 
       $title = "Office Type:", 
       $source = array(
       "Single Person Office" => "Single Person Office", 
       "Team Room" => "Team Room", 
       "Open Plan" => "Open Plan" 
       ), 
       $value = 1 
      ), 
        new TextField('HUMAN', '1+1 =') 
    ); 

    // Create actions 
    $actions = new FieldSet(
      new FormAction('doGenericContact', 'Submit') 
    ); 

    return new Form($this, 'GenericContactForm', $fields, $actions); 
} 

function doGenericContact($data, $form) { 
    $human = $data['HUMAN']; 
    if ($human == '2') { 
     $from = $data['EMAIL']; 
     $to = '[email protected]'; 
     $subject = 'Contact Request'; 
     $body = 'The following individual has requested to be contacted: ' . $data['NAME'] . ' | ' . $data['EMAIL'] . ' | ' . $data['TELEPHONE'] . ' and they have made contact to inquire about the following: ' . $data['TYPEOFCONTACT']; 
     $email = new Email($from, $to, $subject, $body); 
     $email->send(); 

     Director::redirect('/thankyou/'); 
    } else { 
     $form->addErrorMessage('Message', "Incorrect answer to the human check. (Your answer: $human)", 'error'); 
     return Director::redirectBack(); 
    } 
} 

Я попытался удалить ListboxField, так как это единственная реальная разница, которую я нашел. Я также попытался проверить его локально, удалив все внутри «истинной» части оператора if в функции отправки, и он работает локально, но не на сервере, что заставляет меня думать, что это может быть конфликт между чем-то в SilverStripe и настройка сервера (у меня ограниченный доступ к серверу). Кроме того, эти формы работали до обновления.

Любые идеи о том, что вызывает это, и что я могу сделать, чтобы исправить это?

Редактировать - Дальнейшее устранение неполадок обнаружило, что в массиве сообщений нет неработающих форм.

+0

Вы заявляете, что «некоторые из форм на моем сайте не отправят все данные». Просьба уточнить, в чем проблема. Являются ли формы не отправлением электронной почты или они отправляют электронную почту, но с отсутствующими данными поля? – ryanwachtl

+0

@ryanwachtl - Это даже не относится к коду электронной почты, потому что он не проходит мимо проверки человека. «Человеческая» POST-переменная пуста. – Shauna

+0

Я ничего не вижу в вашем коде, чтобы предотвратить работу формы. Попробуйте использовать 'Debug :: show ($ data)' in' doGenericContact() ', чтобы посмотреть, что отправляется из формы. После того, как вы подтвердите, что значение '$ data ['HUMAN']' имеет значение, убедитесь, что ваш почтовый сервер отправит электронные письма как поступающие из домена, отличного от вашего собственного. У меня есть ощущение, что проблема связана с настройкой электронной почты серверов, а не с SilverStripe. – ryanwachtl

ответ

0

Оказалось, что SilverStripe 2.4 делает модули по сравнению с модулями 2.3. Я не был тем, кто ее решил, поэтому у меня нет деталей по этой проблеме, но приведение модулей в соответствие с тем, что 2.4 ожидает исправления.

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