2009-07-16 75 views
0

我已經建立了查看頁面輸入一個領域,如如何檢索

<div class="input text"> 
     <label for="2">First Name (required) </label> 
     <input type="text" value="" style="width: 300px;" id="2" class="required" name="First Name"/> 
    </div> 

    <div class="input text"> 
    <label for="5">Emailid</label> 
    <input type="text" value="" style="width: 300px;" id="5" name="Emailid"/>< 
/div> 
<div class="input text"> 
<label for="6">Mobile Number</label> 
<input type="text" value="" style="width: 30px;" id="6" name="Mobile Number"/> 
<input type="text" value="" style="width: 30px;" id="6-1" name="Mobile Number"/> 
<input type="text" value="" style="width: 70px;" id="6-2" name="Mobile Number"/> 
</div> 

這些都在頁面生成的。我是檢索內容價值形成這個頁面在我的CakePHP控制器的手機號碼字段值使用

foreach ($_POST as $key => $value): 
    echo $key;echo $value; 
endforeach; 

對於上述領域中我得到了正確的答案就像 將First_Name = A & [email protected] & MOBILE_NUMBER = 3

我的CakePHP控制器

但是,對於我的移動號碼字段,我得到像6-2的最後一個id的價值。爲什麼?請檢索三個字段中給出的手機號碼的全部值(6,6-1,6-2)??請給我建議。

編輯:

 foreach ($_POST as $key => $value): 
    $mobile_number = implode('', $_POST['number']); 
    echo $mobile_number; 
    $this->data['Result']['form_id']=$formid; 
    $this->data['Result']['label']=Inflector::humanize($key); 
    $this->data['Result']['value']=$value; 
    $this->Form->submitForm($this->data); 
    endforeach; 

我正在保存密鑰,並使用類似上面的值(即..,控制器不知道什麼是所有領域都在填充頁)。填充頁可能/不可能包含電話號碼字段。我如何確保該頁面具有電話號碼字段,並用鑰匙保存其值。

注意:$ key是Fieldname,$ value是我的字段值。只有Phonenumber字段的值是數組,在所有其他情況下,它只是一個值。

+1

首先,您應該使用Cake方法來創建表單和Cake`$ this-> data`變量來處理結果。迄今爲止,沒有關於此代碼的Cake。 – deceze 2009-07-16 04:29:10

回答

2

如果你使用Cake,你應該學習和使用Cake。

只是一個快速流動的蛋糕破敗:

Form page -> Submit 
    ^   | 
    |   v 
    |  Controller // Form data is in $this->data 
    |   | 
    |   v 
    |  $this->Model->save($this->data); -> Model 
    |            | 
    |            v 
    -------- Controller <----------------------- Data validation 
          validation no good | 
                | validation okay 
                v 
      Controller <----------------------- Actually save data 
       | 
       v 
      Go somewhere else 

這對你意味着什麼:

$this->data是中央的形式才能正常工作。 不要觸摸$ _POST!使用Cake methods for creating Forms並使用與數據庫中使用的字段相同的名稱。這有利於很多Cake「automagic」。您不需要手動組裝數組來傳遞數據庫,從頭到尾對所有內容使用相同的名稱,只需傳遞數組即可。 $this->data將自動從Controller返回到視圖(即表單),如果您使用Cake FormHelper,則字段將自動從其中填充。

您應該儘量減少您在提交表單和保存數據之間所做的工作。理想情況下,你的控制器僅是這樣的:

if (!empty($this->data)) { 
    if ($this->Model->save($this->data)) { 
     $this->redirect(array('action' => 'next_step')); 
    } 
} 

這就是你需要的代碼,它會

  • 顯示的頁面
  • 處理表單提交
  • 驗證輸入
  • 如果驗證失敗,請填寫表單字段
  • 如果驗證成功,則保存數據
  • 重定向到下一個步驟,如果數據被成功

保存如果你的表單字段不符合1:1與數據庫中的字段,只調整需要if(!empty($this->data))$this->Model->save($this->data)之間的位:

if (!empty($this->data)) { 
    $this->data['Model']['mobile_number'] = implode('-', $this->data['Model']['mobile_number']); 
    if ($this->Model->save($this->data)) { 
     $this->redirect(array('action' => 'next_step')); 
    } 
} 

如果要驗證提交的表單數據的完整性,您只需要fill in the appropriate rules in the Model。無論何時您發出$this->Model->save(),模型將在保存前自動檢查規則,如果不符合,則會自動檢查return false

+0

其實我在其他功能中也是這麼做的。 但是在這個提交動作中,控制器不知道什麼可能是字段名稱,比如你說的那個mobile_number。 ($ _POST as $ key => $ value): if(is_array($ value)){ $ value = implode('',$ _POST [$ key])僅當我使用$ _POST類似 \t foreach ); $ this-> data ['Result'] ['value'] = $ value; } else { $ this-> data ['Result'] ['value'] = $ value; } $ this-> data ['Result'] ['form_id'] = $ formid; $ this-> data ['Result'] ['label'] = Inflector :: humanize($ key); $ this-> Form-> submitForm($ this-> data); endforeach; – Mercy 2009-07-16 06:52:29