PHP - Как это сделать, если? - PullRequest
0 голосов
/ 10 августа 2011

Я создаю корзину заказов.

На странице, которая отображает корзину, она проверяет, соответствует ли значение, сохраненное в сеансе $order, идентификатору строки в таблице mysql.Если это совпадение существует, то возвращается соответствующая строка.

В этом процессе я пытаюсь получить значение количества, сохраненное в сеансе $quantity, которое соответствует идентификатору строки в таблице.

Каждому значению в $order и $quantity присваивается имя, которое является идентификатором товара, из которого они были добавлены.

Это код, который добавляет заказ в корзину:

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 ]

2 голосов
/ 10 августа 2011

Не могли бы вы попробовать это?

<td>'.($item[$itId] == $amount[$itId] ? $amount : '').'</td>

Это троичный оператор, посмотрите на http://en.wikipedia.org/wiki/Ternary_operation

1 голос
/ 10 августа 2011

Вы не можете просто добавить такие условные операторы во время построения строки.

Вы можете сделать это, однако

<td>' . ($item[$itId] == $amount[$itId]) ? $amount : null . '</td>

но вы должны использовать более разборчивый метод.

Другая проблема, с которой вы можете столкнуться, - если $amount - массив, вы не сможете напечатать его в виде строки. Однако, если $amount является объектом с интерфейсом ArrayAccess, вы можете распечатать его методом __toString(); но это другая история.

0 голосов
/ 10 августа 2011

Код для создания страницы корзины имеет несколько проблем.

  1. Вы просматриваете товары и их количество, что, вероятно, даст вам дубликаты.
  2. $ Элемент простойСтрока, поэтому мне интересно, что $ item [$ itId] должен делать?
  3. Вы просматриваете свой полный набор результатов несколько раз, что на самом деле не нужно.Я действительно надеюсь, что «$ productSql» не является «select * from product», в противном случае это может стать РЕАЛЬНО медленным в рабочем режиме.

Я предлагаю создать хороший 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>
        ";      
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...