2011-06-27 74 views
2

我有一個複雜的問題,我認爲這將是很難解釋如此裸露的我。PHP數組和HTML複選框

我保存在MySQL數據庫字符串,字符串如下:

項目:19.99/ITEM2:24.99

我已經成功地分裂陣這個:

Array(
[0] => Array 
    (
     [0] => item 
     [1] => 19.99 
    ) 

[1] => Array 
    (
     [0] => item2 
     [1] => 24.99 
    )) 

我需要循環通過陣列,從所謂的「類別」一個MySQL表顯示的所有項目(其中「項目」是一類),但棘手位使得所述陣列中的複選框來選擇接着由包含價格

一個文本框

我知道這將是很難解釋,我可以使它更容易理解的唯一途徑是通過提供所需的HTML輸出:

<input type="checkbox" value="item" checked="checked" />Item <input type="text" value="19.99"/> 
<input type="checkbox" value="item1" />Item 1 <input type="text"/> 
<input type="checkbox" value="item2" checked="checked" />Item 2 <input type="text" value="24.99"/> 
<input type="checkbox" value="item3" />Item 3 <input type="text"/> 
<input type="checkbox" value="item4" />Item 4 <input type="text"/> 

我希望我已經說明了這不夠好,和我真的希望有人能幫忙!

+0

item3的價格和存儲位置在哪裏?其他項目名稱存儲在哪裏? – hakre

+0

我們可以從你的數據庫中獲得一些格式/數據嗎?類別的東西? –

回答

1

首先,你應該調整你的「選擇項」陣列,使得它更容易的工作。看我的例子。然後,當你遍歷所有的項目,只是檢查是否有選擇的陣列中的價格。

例子:

// Updated your array of selected item so that the name is the key and the price the value. 
// 
// For example: 
// 
// Array(
// [item] => 19.99 
// [item2] => 24.99 
//) 
foreach ($selected_items as $key => $selected_item) 
{ 
    $selected_items[$selected_item[0]] = $selected_item[1]; 
    unset($selected_items[$key]); 
} 

// ... 

// While looping through all of the items from your SQL query: 
while ($item = mysql_fetch_assoc($result)) 
{ 
    if (! empty($selected_items[$item])) 
    echo '<input type="checkbox" value="' . $item['key'] . '" selected="selected" />' . $item['name'] . '<input type="text" value="' . $selected_item[$item['key']] . '" />'; 
    else 
    echo '<input type="checkbox" value="' . $item['key'] . '" />' . $item['name'] . '<input type="text"/>'; 
} 

PS:你可能要一個name屬性添加到複選框和輸入字段。

基於以下您的評論:

foreach循環改成這樣:

foreach($b as $c) 
{ 
    list($key, $value) = explode(':', $c); 
    $d[$key] = $value; 
} 
+0

是的,弗朗索瓦所說的(打字速度比我的要快得多)。 +1 :) – baraboom

+0

我知道這是業餘的,但我該如何重組陣列,目前我有這個: $ b = explode(「/」,$ a ['cat']); \t \t foreach($ b as $ c){ \t \t \t $ d [] = explode(「:」,$ c); \t \t} 凡美元[「貓」]是字符串 –

+0

@Lee價格 - 我更新的答案有一個新的'foreach'循環供你使用,這將做什麼在我原來的答覆了'foreach'循環不(即item_name =>價格)。從那裏,當你遍歷其餘的項目時,你可以檢查它是否存在於'$ d'數組中,就像我的例子。 –

0

會是這樣的工作?

<?php 
foreach($array as $values){ 
    echo '<input type="checkbox" value="item" checked="checked" />' . $values[0] . ' <input type="text" value="' . $values[1] . '"/>' 
} 
?> 

我不知道你怎麼知道,如果一個值被檢查或沒有,但一旦你在一個變量或作爲陣列的一部分,只是使用if語句來輸出

checked="checked" 
如果需要的話

1

沒有你的MySQL的單位信息,這是最好的,我可以幫你:

<?php 

    $array = array(array('item', '19.99'), 
      array('item1', NULL), 
      array('item2', '24.99'), 
      array('item3', NULL), 
      array('item4', NULL)); 

    foreach ($array as $item) { 

     echo '<input type="checkbox" value="' . $item[0] . '"' . ($item[1] ? ' checked="checked"' : '') . ' />' . $item[0] . '<input type="text"' . ($item[1] ? ' value="' . $item[1] . '"' : '') . "/><br />\n"; 
    } 

?> 

輸出:

<input type="checkbox" value="item" checked="checked" />item<input type="text" value="19.99"/><br /> 
<input type="checkbox" value="item1" />item1<input type="text"/><br /> 
<input type="checkbox" value="item2" checked="checked" />item2<input type="text" value="24.99"/><br /> 
<input type="checkbox" value="item3" />item3<input type="text"/><br /> 
<input type="checkbox" value="item4" />item4<input type="text"/><br /> 

http://codepad.org/fGpGCXwm

希望你能仔細研究這一點,使之成爲工作您。

+0

感謝您的這一點,但這種方法是不適合我的,因爲這些項目與檢查項目在不同的表中 –

+0

如果您可以提供數據庫的某種結構,那麼我可以進行這些更改。 –

0

我不知道你用什麼樣的後端,而是一種更好的方式將數據存儲在數據庫中是不是多種類型的數據在同一領域結合起來,並轉而使用數字標識的文本的的基於身份的ID。你可以創建一個表如:

id  name   price 
---------------------------------- 
1  Item   19.99 
2  Item 1  0 
3  Item 2  24.99 
4  Item 3  0 
5  Item 4  0 

請注意,我的示例顯示「0」沒有輸入價格。這是因爲您可能希望將價格列存儲爲十進制數(小數點後兩位),這會使空值默認爲「0」。沒關係。您的用戶界面不必顯示「0」。

然後,當你從數據庫中檢索數據,你可能最終得到一個這樣的數組:

<?php 
foreach ($data as $row) { 
    explode($row); 

    if ($price > 0) { 
     $checked = 'checked="checked"'; 
    } else { 
     $checked = ''; 
     $price = ''; 
    } 

    $pattern = '<input type="checkbox" name="categories[%s]" value="1" %s> ' 
     . '%s <input type="text" name="prices[%s]" value="%s">'; 

    echo sprintf($pattern, $id, $checked, $name, $id, $price); 
} 
?> 

Array(
    [0] => Array 
    (
     [id] => 1 
     [name] => Item 
     [price] => 19.99 
    ) 
    [1] => Array 
     [id] => 2 
     [name] => Item 1 
     [price] => 0 
    ) 
) 
and so on... 

,那麼你可以在你的.PHP像下面顯示的值

然後當檢索表單輸入時,你想要的變量是$_POST['categories']$_POST['prices']