1

大きな問題があります。誰かが複数の製品を選択すると、たとえば 3 つの製品を選択すると、ショッピング カートに入ります。彼が注文 (チェックアウト) を送信すると、メールには 3 つではなく、最初の製品しか表示されません。

これは、function.js で次のように述べているためです。

function fillInForm(){

    NumberOrdered = 0;
    NumberOrdered = readCookies("NumberOrdered");

    for (i = 1; i <= NumberOrdered; i++){
        NewOrder = "Order" + i;
        thisCookie = "";
        thisCookie = readCookies(NewOrder);;
        fields = new Array();
        fields = thisCookie.split("|");
        document.write("<input type=hidden name=\"Product ID " + i + "\" value=\"" + fields[0] + "\">");
        document.write("<input type=hidden name=\"Brand " + i + "\" value=\"" + fields[1] + "\">");
        document.write("<input type=hidden name=\"Model " + i + "\" value=\"" + fields[2] + "\">");
        document.write("<input type=hidden name=\"Price " + i + "\" value=\"" + fields[3] + "\">");
        document.write("<input type=hidden name=\"Amount products " + i + "\" value=\"" + fields[4] + "\">");
        document.write("<input type=hidden name=\"Total cost " + i + "\" value=\"" + fields[3] * fields[4] + "\">");
        document.write("<input type=hidden name=\" " + "\" value=\"" + "\">");

    }
}

var_dump($_GET); を使用する場合 それは私にすべてを示すので、それが私に示す3つの製品は次のようなものを持っています

["Brand_1"]=>
["Brand_2"]=>
["Brand_3"]=>

情報が送信されるmail.phpには次のものがあります。

$brand = $_GET["Brand_1"]; (<<WITH 1, one) 

なぜなら

$brand = $_GET["Brand_i"]; (<<WITH i) does not work.

しかし、理論的には必要です

$brand = $_GET["Brand_i"] (<<WITH i)to get all the products............

どうすればこれを修正できますか?

メール.php

$productid = $_GET["Product_ID_1"];
$brand = $_GET["Brand_1"];
$model = $_GET["Model_1"];
$price = $_GET["Price_1"];
$amount = $_GET["Amount_products_1"];
$totalcost = $_GET["Total_cost_1"];

$message .= 'Your order information: ' . '<br />';
$message .= 'Product ID: ' . $productid . "<br />" .
            'Brand: '. $brand . "<br />" .
            'Model: ' . $model . "<br />" .
            'Price per item: ' . $price . "<br />" .
            'Amount of item: ' . $amount . "<br />" .
            'Total cost: ' . $totalcost . "<br />" .
            'Order date and time: ' . $date;
$message .= '</body></html>';
4

5 に答える 5

1
$message .= 'Your order information: ' . '<br />';
$i = 1;
while (isset($_GET["Product_ID_".$i])) {
    $productid = $_GET["Product_ID_".$i];
    $brand = $_GET["Brand_".$i];
    $model = $_GET["Model_".$i];
    $price = $_GET["Price_".$i];
    $amount = $_GET["Amount_products_".$i];
    $totalcost = $_GET["Total_cost_".$i];

    $message .= 'Product ID: ' . $productid . "<br />" .
                'Brand: '. $brand . "<br />" .
                'Model: ' . $model . "<br />" .
                'Price per item: ' . $price . "<br />" .
                'Amount of item: ' . $amount . "<br />" .
                'Total cost: ' . $totalcost . "<br />" .
    $i++;
}

$message .= 'Order date and time: ' . $date;
$message .= '</body></html>';
于 2012-06-18T13:14:15.770 に答える
1

明確にするために、スペースとアンダースコアは交換できません。このフィールドがある場合:

<input type="hidden" name="brand 1" />

次に、サーバーでアクセスするには、を使用する必要があり$_GET['brand 1']ます$_GET['brand_1']

@GlitchMr指摘したように、明らかにフィールド名のスペースは PHP によってアンダースコアに変換されます。この機能は知りませんでした。あなたが今持っているものは問題ありませんが、そもそもスペースを使用しないことを強くお勧めします.

また、文字列内で使用することはできませんi.PHPは、複数のものがあることを理解し、 for の数字を置き換える必要があると仮定しますi. 次のように HTML で入力に名前を付けて、フィールドが配列であることを示します。

<input type="hidden" name="brand[]" />

そうすれば、Javascript で番号を付ける必要はありません。PHP は、これが値の配列であることを認識し、次のことを行います。

print_r($_GET['brand[]']);

送信する必要がある電子メールを作成するために foreach で反復処理できる配列になります。

$length = count($_GET['brand']);
$fields = array('product_id[]', 'model[]', 'price[]', 'amount[]', 'total_cost[]');

foreach($fields as $field) {
    if($count($_GET[$field] !== $length) {
        die('Not all product arrays are the same length');
    }
}


for($i = 0; $i < $length; $i++) {
    $message .= 'Your order information: ' . '<br />';
    $message .= 'Product ID: ' . $_GET['product_id[]'][$i] . '<br />' .
                'Brand: '. $_GET['brand[]'][$i] . '<br />' .
                'Model: ' . $_GET['model[]'][$i] . '<br />' .
                'Price per item: ' . $_GET['price[]'][$i] . '<br />' .
                'Amount of item: ' . $_GET['amount[]'][$i] . '<br />' .
                'Total cost: ' . $_GET['total_cost[]'][$i] . '<br />' .
                'Order date and time: ' . $date. '<br />';
}
于 2012-06-18T13:15:13.620 に答える
1

あなたが望むのはおそらく次のようなものです

for ($i = 0; $i < $_GET['numberordered']; $i++)
{
    $brand = $_GET['Brand_'.$i];
    // ... rest of your code ...
}

それらを反復するにはループが必要です。単に使用することはできませんBrand_i

于 2012-06-18T13:12:45.167 に答える
1

あなたが求めているものを得るには、文字列補間または連結を使用する必要があります。

次のいずれかを使用できます。

$brand = $_GET["Brand_{$i}"];

また:

$brand = $_GET['Brand_' . $i];

各注文をウォークスルーする for ループ内。

PHP の組み込み機能を使用して、製品の配列を自動的に作成することもできます。PHP では、名前付きフィールドを含むフォームが送信されるとfieldName[]、値が配列に変換されます。ただし、この方法で 1 つの列の値をスキップする必要がある場合、それはできません。ただし、インデックスを指定できるfieldName[1]ので、その問題を回避できます (ただし、インデックスは 0 から開始してください。そうしないと、代わりに for-each ループが必要になる場合があります)。次のような構文products[0][brand]を使用して配列を取得することもできます。

$_GET['products'] = array(
  0 => array(
    'brand' => 'My Brand',
    'sku' => '0123asd'
  )
);
于 2012-06-18T13:16:12.120 に答える
0

簡単に言うと、同じ入力名で複数のブランドを送信できます。;)

html:

<input name="Brand[]" value="Cat" />
<input name="Brand[]" value="Dog" />
<input name="Brand[]" value="Shuttle" />

php:

foreach($_GET['Brand'] as $brand) {
    echo $brand;
}

結果:

CatDogShuttle
于 2012-06-18T13:17:31.327 に答える