我使用一個在線購物這需要訂購的商品,並通過URL到process.php頁面通過其獨特的ID。所以URL看起來像
process.php?code_1=231&code_2=532&code_3=342
另一個code_x=xxx
是爲訂購的每個項目生成的。在process.php頁面上,我將如何創建一個數組以獲取code_x
的值,而無需知道訂購了多少項目?
我使用一個在線購物這需要訂購的商品,並通過URL到process.php頁面通過其獨特的ID。所以URL看起來像
process.php?code_1=231&code_2=532&code_3=342
另一個code_x=xxx
是爲訂購的每個項目生成的。在process.php頁面上,我將如何創建一個數組以獲取code_x
的值,而無需知道訂購了多少項目?
此問題,通過改變元素的名稱在您的形式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);
使用像Jon suggested這樣的數組會更好。
這也將是清潔不使用get
這一點。但寧可post
。
但是,如果你真的想要走這條路線,你可以這樣做:
foreach($_GET as $name=>$value) {
if (strpos($name, 'code_') !== 0) continue;
// here are the names and values of the items
}
但是又說:我不會推薦它。
同意,不建議 –
我同意,我使用jcart而不重修改代碼本身 - 它似乎是得到它去的最快方式。由於該網站僅對內部員工關閉,因此我不需要任何安全措施。我會接受你的建議,並最終重新編碼購物車併發布數據。 – Fleppar
您的代碼也與某些字符匹配,如「code_test」也會匹配。所以最好使用像「^ code_ [1-9] $」這樣的正則表達式來獲得確切的過濾。 –
print_r($_GET);
foreach($_GET as $key=>$val)
{
echo '<br />';
echo $key.' : '.$val;
}
你必須通過$ _GET迭代和尋找的名字。
foreach(!empty($_GET as $name=>$value)) {
// Check for match names for your
if (preg_match('/^code_[1-9]$/', $name)) {
// Do whatever with values
}
}
'ereg'從PHP 5.3.0開始已被棄用。改用'preg_match'。 – Jon
@Jon謝謝,我更新了這篇文章。 –
我同意,如果我自己創建'購物車',這就是我將如何做到這一點。而不是$ _GET ['code']我會公佈這些數據。我只需要快速找到一些東西,然後從那裏改進它。謝謝您的幫助! – Fleppar
@Fleppar:我爲這種情況增加了一種替代方案。 – Jon
更新後,我把你當成了正確的答案,因爲你更好地解釋你應該做什麼和怎麼做,如果你沒有其他選擇。謝謝您的幫助。 – Fleppar