2011-12-07 14 views
3

注文商品を注文し、そのURLを介して一意のIDをprocess.phpページに渡すオンラインショッピングカートを使用しています。だから、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[]" ... /> 
<input type="text" name="code[]" ... /> 
<input type="text" name="code[]" ... /> 

にそれを変更します、$_GET['code']は、テキストボックスからすべての値を含む配列になりますのは、

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

を言わせているたとえば

、その項目として。

更新:

あなたが入ってくるパラメータの名前を制御できない場合は、手動で解析する必要があります。私はそれをどうするのですか?

// 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

@ジョンありがとう、私はポストを更新しました。 –

関連する問題