我正在创建一个订单购物车。
在显示购物车的页面上,它会检查存储在会话$order
中的值是否与mysql表中的行ID相对应。如果存在此匹配,则返回相应的行。
在此过程中,我正在尝试检索存储在会话$quantity
中的数量值,该值对应于表格中行的ID。
$order
和$quantity
中的每个值都会分配一个名称,即从中添加项目的ID。
这是将订单添加到购物车的代码:
if (isset($_POST['action']) and $_POST['action'] == 'Order')
{
// Add item to the end of the $_SESSION['order'] array
$_SESSION['order'][$_POST['id']] = $_POST['id'];
$_SESSION['quantity'][$_POST['id']] = $_POST['quantity'];
header('Location: .');
exit();
}
这是购物车页面上的代码:
foreach ($order as $item)
foreach ($quantity as $amount)
{
mysql_data_seek( $productsSql, 0); //<- this line, to reset the pointer for every EACH.
while($row = mysql_fetch_assoc($productsSql))
{
$itId = $row['id'];
$itDesc = $row['desc'];
$itPrice1 = $row['price1'];
if ($item == $itId)
{
$pageContent .= '
<tr>
<td>'.$itDesc.'</td>
<td>'.if ($item[''.$itId.''] == $amount[''.$itId.'']) {echo $amount}.'</td>
<td>R'.number_format($itPrice1*$amount, 2).'</td>
</tr>
';
}
}
}
此行产生语法错误:
<td>'.if ($item[''.$itId.''] == $amount[''.$itId.'']) {echo $amount}.'</td>
初学者有什么问题?
其次,我如何才能完成我所面临的任务?
对此的任何意见都将不胜感激!
答案 0 :(得分:2)
你可以尝试一下吗?
<td>'.($item[$itId] == $amount[$itId] ? $amount : '').'</td>
这是一个三元运算符,请查看http://en.wikipedia.org/wiki/Ternary_operation
答案 1 :(得分:1)
在构建字符串时,不能简单地添加这样的条件语句。
你可以这样做,但是
<td>' . ($item[$itId] == $amount[$itId]) ? $amount : null . '</td>
但你应该使用更清晰的方法。
您可能遇到的另一个问题是如果$amount
是一个数组,您将无法将其打印为字符串。但是,如果$amount
是具有ArrayAccess接口的对象,则可以使用__toString()
方法打印它;但这是另一个故事。
答案 2 :(得分:0)
创建购物车页面的代码有几个问题。
我建议创建一个好的SQL来获取数据并将其作为填充页面的基础:
// note this has SQL-injection issues, so you really need to make sure that $order contains no crap
$productsSql = mysql_query("select * from product where id in (".join($order, ',').")");
// you now have a result set with all products from your order.
while($row = mysql_fetch_assoc($productsSql))
{
$itId = $row['id'];
$itDesc = $row['desc'];
$itPrice1 = $row['price1'];
// session contains the quantity array mapping ID -> Quantity, so grab it from there
$itQuantity = $quantity[$itId];
// finally calculate the price
$itPrice = number_format($itPrice1*$itQuantity, 2);
// now you have all data for your template and can just insert it.
// if you use double quotes you can put the $xyz into the string directly
$pageContent .= "
<tr>
<td>$itDesc</td>
<td>$itQuanty</td>
<td>R $itPrice</td>
</tr>
";
}