2012-04-06 49 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 2012-04-06 17:15:48

+0

@ryanwachtl - 它甚至沒有使它成爲電子郵件代碼,因爲它沒有通過人爲檢查。 「人類」POST變量是空的。 – Shauna 2012-04-07 11:59:02

+0

我在代碼中看不到任何會阻止表單工作的內容。嘗試使用'doGenericContact()'內的'Debug :: show($ data)'來查看錶單提交的內容。一旦確認'$ data ['HUMAN']'有一個值,請確保您的電子郵件服務器將發送來自非您自己的域的電子郵件。我有一種感覺,這個問題與服務器的電子郵件設置有關,而與SilverStripe沒有任何關係。 – ryanwachtl 2012-04-08 23:18:03

回答

0

事實證明,SilverStripe 2.4模塊的方式與2.3模塊的方式有關。我不是那個解決它的人,所以我沒有關於這個問題的細節,但是讓這些模塊符合2.4期望已經解決的問題。