PHP - 如何完成此操作?

时间:2011-08-09 22:35:10

标签: syntax if-statement php

我正在创建一个订单购物车。

在显示购物车的页面上,它会检查存储在会话$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>

初学者有什么问题?

其次,我如何才能完成我所面临的任务?

对此的任何意见都将不胜感激!

3 个答案:

答案 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)

创建购物车页面的代码有几个问题。

  1. 你走过物品和数量,这可能会给你重复的输出。
  2. $ item是一个普通的字符串,所以我想知道$ item [$ itId]应该做什么?
  3. 您多次遍历完整的结果集,这实际上是不必要的。我真的希望“$ productSql”不是“select * from product”,否则这可能会在生产模式下变得很慢。
  4. 我建议创建一个好的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>
            ";      
    }