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); 它向我展示了一切,所以它向我展示的三种产品都有类似的东西

["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

你想要的可能是这样的

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

你需要一个循环来遍历它们,你不能只使用Brand_i

于 2012-06-18T13:12:45.167 回答
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

您需要使用string interpolation或 concatenation 来获得您所追求的。

您可以使用:

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

或者:

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

在 for 循环中遍历每个订单。

您还可以使用 PHP 的内置功能自动创建产品数组。在 PHP 中,当一个表单被提交时,一个名为字段fieldName[]的值会被转换为一个数组。但是,如果您需要跳过一列中的值,以这种方式,它不会这样做。但是,您可以指定一个索引 ,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 回答