如何遍历$ _GET以获取所有数据

时间:2012-06-18 13:07:05

标签: php javascript html email

我有一个大问题: 当有人选择多个产品时,例如他选择了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............

我该如何解决这个问题?

mail.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>';

5 个答案:

答案 0 :(得分:1)

你想要的可能是

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

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

答案 1 :(得分: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>';

答案 2 :(得分:1)

为了澄清,空格和下划线不可互换。如果您有此字段:

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

然后要在服务器上访问它,您必须使用$_GET['brand 1']而不是$_GET['brand_1']

正如 @GlitchMr 指出的那样,显然字段名称中的空格被PHP转换为下划线。我不知道这个功能。你现在拥有的很好,但我强烈建议不要首先使用空格。

你也不能在字符串中使用i,假设PHP会理解有很多东西,它应该替换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 />';
}

答案 3 :(得分:1)

您需要使用string interpolation或连接来获取您所追求的内容。

您可以使用:

$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'
  )
);

答案 4 :(得分: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