2012-08-14 29 views
1

我有一個PHP表單,它從數據庫中提取數據,將其打印出來,然後允許用戶檢查他們需要的項目。在保存時,只有最後一個選項被髮送到$ _POST。這裏是我的代碼:

global $dbc; 

$afQuery = "SELECT fid, facility_name, city, state, country, phone from facilities 
      WHERE uid = '123' 
      AND fid != '456' 
      GROUP BY fid;"; 
     $afResult = $dbc->query($afQuery,__FILE__,__LINE__); 
     $i = 0; 
     while ($affiliated = $dbc->fetch($afResult)) {  
      ++$i; 
      echo '<div class="action" style="float:left;">'; 
       echo '<input type="checkbox" name="affiliated[afid]" id="afid" value="'.$affiliated->fid.'">'; 
      echo '</div>'; 
      echo '<div class="facility-name">'; 
       echo '<input type="hidden" id="facility-name '.$i.'" name="affiliated[facility_name]" value="'.$affiliated->facility_name.'" />'; 
       echo $affiliated->facility_name; 
      echo '</div>'; 
      echo '<div class="facility-location">'; 
       echo '<input type="hidden" id="facility-location '.$i.'" name="affiliated[facility_location]" value="'.$affiliates->city. ', ' . $affiliated->state . ' ' . $affiliated->country.'" />'; 
       echo $affiliated->city. ', ' . $affiliated->state . ' ' . $affiliated->country; 
      echo '</div>'; 
      echo '<div class="facility-phone">'; 
       echo '<input type="hidden" id="facility-phone '.$i.'" name="affiliated[facility_phone]" value="'.$affiliated->phone.'" />'; 
       echo $affiliated->phone; 
      echo '</div>'; 
      echo '<div class="clear"></div>'; 
      echo '<input type="hidden" id="update" name="update" value="' . $affiliated->fid . '" />'; 
     } 

$dbc->fetch相當於mysql_fetch_assoc

我試圖將這些值保存到$affiliated數組,但它應該有每個選定項目的子數組,因此我可以將每個值存儲在數據庫中的一個單獨的行上。我在哪裏錯過了?我在while循環中嘗試了一個foreach,但是我沒有得到任何答案。

感謝您的幫助!

* UPDATE *

我跟隨@青松的建議,並加入$i像這樣:

<input type="checkbox" name="affiliated[afid]['.$i.']" id="afid" value="'.$affiliated->fid.'">

不過,現在我收到以下輸出:

Array 
(
    [afid] => Array 
     (
      [1] => 5289 
      [2] => 5290 
      [3] => 5291 
      [4] => 5292 
     ) 

    [facility_name] => Array 
     (
      [1] => Test Company 
      [2] => Test Company 2 
      [3] => Test Company 3 
      [4] => Test Company 4 
     ) 

    [facility_location] => Array 
     (
      [1] => Address, State US 
      [2] => Address, State US 
      [3] => Address, State US 
      [4] => Address, State US 
     ) 

    [facility_phone] => Array 
     (
      [1] => 555-555-5555 
      [2] => 555-555-5555 
      [3] => 555-555-5555 
      [4] => 555-555-555 
     ) 

) 

我需要這個看起來像這樣,所以我可以插入每個補全te排入數據庫表中:

Array 
    (
     [0] => Array 
      (
       [afid] => 5289 
       [facility_name] => Test Company 
       [facility_location] => Address, ST USA 
       [facility_phone] => 555-555-5555 
      ) 

    [1] => Array 
     (
      [afid] => 5290 
      [facility_name] => Test Company 1 
      [facility_location] => Address, ST USA 
      [facility_phone] => 555-555-5555 
     ) 
) 

建議?

+0

Oi,我建議您在回顯HTML大塊時考慮'heredoc'語法: http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc – Madbreaks 2012-08-14 21:25:56

+0

有趣 - 感謝您的鏈接! – deewilcox 2012-08-15 19:00:03

+0

我認爲你應該接受Pinetree的答案,然後問一個關於如何創建一個數組的單獨問題 - 他很清楚地解決了你最初的問題。 – Madbreaks 2012-08-15 22:32:03

回答

3

如果我理解正確,你回聲多行輸入。 如果是這種情況,則對每行的輸入使用相同的名稱。 當帖子發生時,它只會取最後一個值。 您可以添加另一個 「[]」 給每個輸入名稱:

'<input name="affiliated[afid][]"/>' 

甚至把$ i的它:

'<input name="affiliated[afid]['.$i.']"/>' 

在後,那麼你就必須:

affiliated 
    afid 
     1: val 
     2: val 
     3: val 
     ... 
    facility_name 
     1: val 
     2: val 
     3: val 
     ... 
    ... 

整數對應於原始格式中的行。所以AFID [1]和facility_name [1]是從形式在同一行(並表)

編輯: 爲了讓陣列回到它們的形式有以下格式:

$affiliated = array(); 
foreach($_POST['affiliated']['afid'] as $k => $v) { 
    $affiliated[] = array(
     'afid' => $v, 
     'facility_name' => $_POST['affiliated']['facility_name'][$k] // same key here 
     // other fields 
    ); 
} 

重要編輯

既然你有複選框,一定要明確設置INT輸入名稱索引:

'<input name="affiliated[afid]['.$i.']"/>' 

如果未選中複選框,並且文本字段和類似項未被髮布,則最終可能出現一種情況,例如,第二個POSTED複選框(索引1,如果從0開始)將映射到$ _POST中的第二行,但該複選框實際上是在表格本身的第三或第四行,並且之前沒有發佈的複選框

+0

我認爲這可以工作。 $ _POST是否仍然只有最後一個值? – deewilcox 2012-08-15 17:45:42

+0

$ _POST確實獲得了所有的值。但是,現在我必須弄清楚如何將這些數據放入正確的數組中。 – deewilcox 2012-08-15 18:58:18

+0

我通常做的是選擇一個值(如afid)和foreach,通過使用鍵和值,然後使用相同的鍵可以獲得其他值。我添加了一個編輯來顯示代碼。 – Pinetree 2012-08-15 22:30:29

1

$affiliated不是一個數組,它是一個對象,你在(再)每段時間設定它通過你的循環:

while ($affiliated = $dbc->fetch($afResult)){...} 

此外,input和一般的DOM元素ID不能包含空格,這你正在生成:

echo '<input type="hidden" id="facility-name '.$i.'" 
+0

感謝您提供這些信息,但不幸的是這並不能幫助解決問題。 – deewilcox 2012-08-15 18:56:54

相關問題