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