2011-12-07 26 views
3

我使用一個在線購物這需要訂購的商品,並通過URL到process.php頁面通過其獨特的ID。所以URL看起來像

process.php?code_1=231&code_2=532&code_3=342 

另一個code_x=xxx是爲訂購的每個項目生成的。在process.php頁面上,我將如何創建一個數組以獲取code_x的值,而無需知道訂購了多少項目?

回答

8

此問題,通過改變元素的名稱在您的形式code[]是更好的解決。

例如,如果你現在已經讓我們說

<input type="text" name="code_1" ... /> 
<input type="text" name="code_2" ... /> 
<input type="text" name="code_3" ... /> 

你會改變,要

<input type="text" name="code[]" ... /> 
<input type="text" name="code[]" ... /> 
<input type="text" name="code[]" ... /> 

這樣做了以後,$_GET['code']將其包含的文本框中的所有值的數組作爲它的項目。

更新:

如果你無法控制輸入參數的名稱,你需要手動解析。下面是我該怎麼做:

// Sample data 
$get = array('code_1' => 'foo', 'code_2' => 'bar', 'code_X' => 'X', 'asdf' => 'X'); 
$codes = array(); 

foreach($get as $k => $v) { 
    // Reject items not starting with prefix 
    if (substr($k, 0, 5) != 'code_') { 
     continue; 
    } 

    // Reject items like code_X where X is not all digits 
    $k = substr($k, 5); 
    if (!ctype_digit($k)) { 
     continue; 
    } 

    $codes[$k] = $v; 
} 

print_r($codes); 
+0

我同意,如果我自己創建'購物車',這就是我將如何做到這一點。而不是$ _GET ['code']我會公佈這些數據。我只需要快速找到一些東西,然後從那裏改進它。謝謝您的幫助! – Fleppar

+0

@Fleppar:我爲這種情況增加了一種替代方案。 – Jon

+0

更新後,我把你當成了正確的答案,因爲你更好地解釋你應該做什麼和怎麼做,如果你沒有其他選擇。謝謝您的幫助。 – Fleppar

4

使用像Jon suggested這樣的數組會更好。

這也將是清潔不使用get這一點。但寧可post

但是,如果你真的想要走這條路線,你可以這樣做:

foreach($_GET as $name=>$value) { 
    if (strpos($name, 'code_') !== 0) continue; 

    // here are the names and values of the items 
} 

但是又說:我不會推薦它。

+0

同意,不建議 –

+0

我同意,我使用jcart而不重修改代碼本身 - 它似乎是得到它去的最快方式。由於該網站僅對內部員工關閉,因此我不需要任何安全措施。我會接受你的建議,並最終重新編碼購物車併發布數據。 – Fleppar

+0

您的代碼也與某些字符匹配,如「code_test」也會匹配。所以最好使用像「^ code_ [1-9] $」這樣的正則表達式來獲得確切的過濾。 –

1
print_r($_GET); 

foreach($_GET as $key=>$val) 
{ 
    echo '<br />'; 
    echo $key.' : '.$val; 

} 
1

你必須通過$ _GET迭代和尋找的名字。

foreach(!empty($_GET as $name=>$value)) { 
    // Check for match names for your 
    if (preg_match('/^code_[1-9]$/', $name)) { 
     // Do whatever with values 
    } 
} 
+1

'ereg'從PHP 5.3.0開始已被棄用。改用'preg_match'。 – Jon

+0

@Jon謝謝,我更新了這篇文章。 –