while ($ row = mysql_fetch_assoc ($ result)) – Как сделать $ row?

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

я получаю код, на который я застрял:

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> '; } 

Все это, кажется, производит мою корзину таким образом, что при просмотре она отображает список только идентификаторов элементов, например, где должно быть описание и цена, я получаю только идентификатор элементов в обоих полях … I также получить общую стоимость 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> '; }} 

Предположим, что каждая из строк в вашей базе данных выглядит так …

 [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) { } вместо этого.

Ваш блок среднего кода не имеет смысла. Вы зацикливаете на переменные сеанса и каждый раз запускаете запрос … но это ТОЛЬКО запрос и использование неопределенной переменной для загрузки. Зацикливание по строке результата не имеет большого смысла, поскольку вы будете перебирать отдельные поля, возвращаемые вашим запросом для каждой строки.

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

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

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

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