while ($ row = mysql_fetch_assoc ($ result)) - Как использовать $ row? - PullRequest
4 голосов
/ 06 августа 2011

Я работаю в простой системе заказов.

Кусок кода, на котором я застрял, следующий:

if (isset($_GET['cart']))
{
$cart = array();
$total = 0;
foreach ($_SESSION['cart'] as $id)
{
    foreach ($items as $product)
    {
        if ($product['id'] == $id)
        {
            $cart[] = $product;
            $total += $product['price'];
            break;
        }
    }
}

include 'cart.html.php';
exit();
}

Этот код построен на предустановленном массиве.Я работаю с таблицей с несколькими столбцами в MySQL.

Я выбрал следующее:

if (isset($_GET['cart']))
{
$cart = array();
$total = 0;
foreach ($_SESSION['cart'] as $id)
{
            while($row = mysql_fetch_assoc($productsSql)) {
    foreach ($row as $product)
    {
        if ($product['id'] == $id)
        {
            $cart[] = $product;
            $total += $product['price'];
            break;
        }
    }
}
    include 'cart.html.php';
exit();
}}

Чтобы отобразить эту "корзину", я решил это:

foreach ($cart as $item) {
        $pageContent .= '
                <tr>
                    <td>'.$item['desc'].'</td>
                    <td>
                        R'.number_format($item['price'], 2).'
                    </td>
                </tr>
';

    }

Все, что, кажется, делает, это создает мою корзину таким образом, чтобы при просмотре отображался список только идентификаторов предметов, например, там, где должно быть описание и цена, я получаю только идентификатор предметов воба поля ... Я также получаю общую цену 0.

Может кто-нибудь определить, где я ошибаюсь здесь?

Или, по крайней мере, попытаться дать мне некоторую информацию, чтобы я мог войтиправильное направление!

Спасибо !!

$productsQuery = 'SELECT `id`, `refCode`, `desc`, `pack`, `measure`, `quantity`, `deptCode`, `taxable`, `price1`, `price2`, `crdCode`, `cost1`, `cost2` FROM `products` ORDER BY `desc` ';
$productsSql = mysql_query($productsQuery) or die(mysql_error());
if (mysql_num_rows($productsSql) == 0) {
die('No results.');
} else {
$orderContent = '';
while($row = mysql_fetch_assoc($productsSql)) {
$prId = $row['id'];
$prRefCode = $row['refCode'];
$prDesc = $row['desc'];
$prPack = $row['pack'];
$prMeasure = $row['measure'];
$prQuantity = $row['quantity'];
$prDeptCode = $row['deptCode'];
$prTaxable = $row['taxable'];
$prPrice1 = $row['price1'];
$prPrice2 = $row['price2'];
$prCrdCode = $row['crdCode'];
$prCost1 = $row['cost1'];
$prCost2 = $row['cost2'];
$orderContent .= '
    <tr>
        <td>'.$prId.'</td>
        <td>'.$prDesc.'</td>
        <td>'.$prPack.'x'.$prSize.' '.$prMeasure.'</td>
        <td>R'.$prPrice1.'</td>
        <td>
            <form action="" method="post">
                <div>
                    <input type="text" size="3" name="quantity" /> 
                </div>
            </form>
        </td>
        <td>
            <form action="" method="post">
                <div>
                    <input type="hidden" name="id" value="'.$prId.'" />
                    <input type="submit" name="action" value="Order" />
                </div>
            </form>
        </td>           
   </tr>
';
}}

Ответы [ 2 ]

14 голосов
/ 06 августа 2011

Допустим, каждая из строк в вашей базе данных выглядит следующим образом ...

[product_id][product_name][product_description][product_price]

Когда вы присваиваете свой запрос возврата переменной, переданной через mysql_fetch_assoc() с помощью цикла while, каждый проход будет изолировать целую строку. Из которых вы можете разбить их вручную, используя ссылку на массив ($array['product_id']) или используя цикл foreach. Я думаю, проблема в том, что ты все это путаешь. Помня приведенный выше пример таблицы, вы можете сделать что-то вроде следующего:

while ($tableRow = mysql_fetch_assoc($query)) { // Loops 3 times if there are 3 returned rows... etc

    foreach ($tableRow as $key => $value) { // Loops 4 times because there are 4 columns
        echo $value;
        echo $tableRow[$key]; // Same output as previous line
    }
    echo $tableRow['product_id']; // Echos 3 times each row's product_id value
}

Посмотрите на эту строку в вашем коде: if ($product['id'] == $id) { }

Я думаю, что вы, вероятно, имеете в виду if ($row['id'] == $id) { }.

4 голосов
/ 06 августа 2011

Ваш средний кодовый блок не имеет смысла.Вы перебираете переменные сеанса и запускаете запрос каждый раз ... но это тот же запрос, и для загрузки используется неопределенная переменная.Циклическая обработка строки результата не имеет большого смысла, так как вы будете циклически повторять отдельные поля, которые ваш запрос возвращает для каждой строки.

Например, если ваша таблица продуктов имеет только (id, name, description) в качестве полей, тогда $row будет массивом, который выглядит следующим образом:

$row = array('id' => xxx, 'name' => yyy, 'description' => zzz);

Когда вы foreach() в $row(),вы не получили бы отдельные продукты, вы бы получили эти поля в строке.$ product будет xxx, затем yyy, затем zzz.

Я не знаю, что ваш код пытается достичь - я думаю, вы пытаетесь получить цены на продуктыкоторый пользователь добавляет в свою корзину, но вы делаете это очень странным и крайне неэффективным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...