За последние 24 часа нас посетили 18559 программистов и 1604 робота. Сейчас ищут 865 программистов ...

Не получается правильно построить цикл

Тема в разделе "PHP для новичков", создана пользователем LAlexS, 23 янв 2012.

  1. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Проблема в том, что к сумме каждого последующего заказа прибавляется сумма от предыдущего. А мне надо, чтобы сумма у каждого заказа была своя. Не понимаю, как построить цикл

    Вот результат:
    Вот код:
    Код (Text):
    1. while ($order = mysql_fetch_array ($order_list))
    2.     {
    3.     echo "<tr><td colspan='6' class='nn_in_order'>Заказ №<big><strong>".$order['id']."</strong></big> ".$order['order_date']." &mdash; <font color='".$order['order_color']."'>".$order['order_status']."</font></td></tr>";
    4.     while ($cart = mysql_fetch_array ($cart_list))
    5.         {
    6.             if ($order['id'] == $cart['order_id'])
    7.             {
    8.            
    9.                 $summ = $cart['price'] * $cart['qty'];
    10.                 $sum_sum += $summ;
    11.                 echo "<tr><td>&nbsp;</td>
    12.                 <td class='name_in_order'>".$cart['synonym']." ".$cart['brand_name']." ".$cart['model_name']."</td>
    13.                 <td class='type_in_order'><nobr>".$cart['type']."</nobr></td>
    14.                 <td class='qty_in_order'>".$cart['qty']."</td>
    15.                 <td class='price_in_order'>".$cart['price'].".00</td>
    16.                 <td class='summ_in_order'>".$summ.".00</td>
    17.                 </tr>";
    18.             }
    19.         }
    20.     echo "<tr><td colspan='4' class='total_in_order'>Итого:</td><td colspan='2' class='total_in_order'>".$sum_sum.".00</td></tr>
    21.     <tr><td colspan='6'>&nbsp;</td></tr>";
    22.     mysql_data_seek($cart_list, 0);
    23.     }
     
  2. asokol

    asokol Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    162
    Симпатии:
    0
    1 вариант: сначала создать массив $carts из результата запроса $cart_list, в котором ключами сделать $cart['order_id'].
    2 вариант: выбирать необходимые данные в запросе, а в цикле их уже выводить.
     
  3. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    У меня как раз второй вариант и реализован. Только это создает вышеописанную проблему

    Весь код:
    Код (Text):
    1. $order_list = mysql_query("SELECT tr.id, tr.order_date, tr.order_status_id, tr.user_id, ts.osid, ts.order_color, ts.order_status FROM orders_list tr, order_status ts WHERE tr.order_status_id = ts.osid AND user_id = '$user_ids' ORDER BY tr.id DESC") or die("Error2! ".mysql_error());
    2.  
    3. $cart_list = mysql_query("SELECT tp.id, tp.model_name, tp.parent_brand, tb.brand_name, tb.bid, tc.synonym, ts.product, ts.qty, ts.price, ts.type, ts.cart, ts.order_id, ts.user, tc.id FROM product_info tp, brands tb, categories tc, shopping_cart ts WHERE tp.parent_brand = tb.bid AND tp.parent_categorie = tc.id AND tp.id = ts.product AND ts.user = '$user_ids' AND ts.cart = '0'") or die("Error3! ".mysql_error());
    4.  
    5. echo "<div align='center' class='title_in_order'><p>Список всех ваших заказов</p></div>";
    6. echo "<table width='100%' cellspacing='0'>";
    7.  
    8. while ($order = mysql_fetch_array ($order_list))
    9.     {
    10.     echo "<tr><td colspan='6' class='nn_in_order'>Заказ №<big><strong>".$order['id']."</strong></big> ".$order['order_date']." &mdash; <font color='".$order['order_color']."'>".$order['order_status']."</font></td></tr>";
    11.     while ($cart = mysql_fetch_array ($cart_list))
    12.         {
    13.             if ($order['id'] == $cart['order_id'])
    14.             {
    15.            
    16.                 $summ = $cart['price'] * $cart['qty'];
    17.                 $sum_sum += $summ;
    18.                 echo "<tr><td>&nbsp;</td>
    19.                 <td class='name_in_order'>".$cart['synonym']." ".$cart['brand_name']." ".$cart['model_name']."</td>
    20.                 <td class='type_in_order'><nobr>".$cart['type']."</nobr></td>
    21.                 <td class='qty_in_order'>".$cart['qty']."</td>
    22.                 <td class='price_in_order'>".$cart['price'].".00</td>
    23.                 <td class='summ_in_order'>".$summ.".00</td>
    24.                 </tr>";
    25.             }
    26.         }
    27.     echo "<tr><td colspan='4' class='total_in_order'>Итого:</td><td colspan='2' class='total_in_order'>".$sum_sum.".00</td></tr>
    28.     <tr><td colspan='6'>&nbsp;</td></tr>";
    29.     mysql_data_seek($cart_list, 0);
    30.     }
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Это можно было сделать и одним запросом.
     
  5. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Сделал так, насколько ума хватило
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    После строки:
    Код (PHP):
    1. while ($order = mysql_fetch_array ($order_list))
    2.    {
    3.  
    добавить строку:
    Код (PHP):
    1. $sum_sum = 0; 
     
  7. LAlexS

    LAlexS Активный пользователь

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Большое спасибо!! Никогда бы не подумал, что надо ставить начальное значение. Мне казалось, что оно и так по умолчанию нулевое.
     
  8. echo2012

    echo2012 Активный пользователь

    С нами с:
    4 янв 2012
    Сообщения:
    12
    Симпатии:
    0
    Здравствуйте! Помогите пожалуйста советом.

    Код (Text):
    1.    <?      
    2. $name = $_GET['name'];
    3. $sql = "SELECT * FROM `tovar_new` WHERE namez='$name'";
    4. $result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);
    5. while ($row = mysql_fetch_assoc($result))
    6. {
    7.     echo "<form method=get>";
    8.    
    9.     echo '<b>Название товара:</b>'.$row['name'].'';
    10.     echo "<br>";
    11.     echo '<b>Название закупки:</b>'.$row['namez'].'';
    12.     echo "<br>";
    13.    
    14.     echo "<a href=http://www.klgforum.ru/sp1/foto/".$row['file']."><img src=http://www.klgforum.ru/sp1/foto/".$row['file']." width=300/></a>";
    15.     echo "<br>";
    16.     echo '<b>Артикул:</b>'.$row['artikul'].'';
    17.     echo "<br>";
    18.     echo '<b>Доступные размеры:</b>'.$row['razmer'].'';
    19.     echo "<br>";
    20.     echo '<b>Цена:</b>'.$row['cena'].'';
    21.     echo "<br>";
    22.     echo '<b>Описание:</b>'.$row['info'].'';
    23.     echo "<br>";
    24.     echo "<br>";echo "<br>";
    25.     echo "Введите информацию для заказа";
    26.     echo "<br>";
    27.     echo "<input type=text name=info maxlength=35>";
    28.    
    29.     //echo "<a href=addzakaz.php?zakupka=".$row['namez']."&tovar=".$row['name']."&artikul=".$row['artikul']."&cena=".$row['cena'].">Записаться</a>";
    30.    
    31.               echo "<input type=text name=info>";
    32.     echo "<input type=submit name=submit value=Записаться>";
    33.     echo "</form>";
    34.     echo "<hr>";
    35. }
    36.     ?>
    Данный отрезок кода отвечает за вывод на страничку данных из БД в циле. С каждым таким выводом данных выводится текстовое поле и кнопка. Как методом POST передать значения переменных именно текущего набора данных. Пробовал реализовать через GET, в табличке строки появляются но все ячейки пустые. =(

    Для того что бы понять что и как вот ссылка: http://klgforum.ru/sp1/index.php => Верхняя одежда => тест

    Прошу направить в нужное русло. Спасибо!
     
  9. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Код (PHP):
    1. $name = $_GET['name'];
    2. $sql = "SELECT * FROM `tovar_new` WHERE namez='$name'"; 
    SQL-инъекция.


    Код (PHP):
    1. $result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql); 
    Эта строчка здорово упростит работу тем, кто будет взламывать сайт, используя SQL-инъекцию.


    Код (PHP):
    1. $result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);
    2. while ($row = mysql_fetch_assoc($result)) 
    Нет проверки на наличие хотя бы одной строки в результате запроса (хотя это не всегда нужно)


    По вопросу - одна общая форма на странице, а не отдельная форма для каждой строки из б.д. Одна общая кнопка для всей страницы, а не отдельный submit для каждой строки из б.д.
    А вот текстовый инпут - отдельный для каждой строки из б.д. Названия у них должны отличаться так, чтобы ты мог потом в принимающем скрипте-обработчике понять, к какой строке какие данные относятся. Например, использовать id строки из б.д. в атрибуте name у инпута. Типа такого

    Код (PHP):
    1. echo '<input type="text" name="info[' . $row['id'] . ']" value="" />';