За последние 24 часа нас посетили 18697 программистов и 1605 роботов. Сейчас ищут 956 программистов ...

Цикл зациклился

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

  1. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    PHP:
    1. $uid = $_GET['uid'];
    2.  
    3. $user_list = mysql_query("SELECT tc.ucid, tc.city_name, ts.osid, ts.order_status, ts.order_color, tr.order_status_id, tr.id, tr.user_id, tr.order_date, tu.uid, tu.name, tu.lastname, tu.city, tu.street, tu.building, tu.room, tu.phone, tu.email FROM orders_list tr, users tu, order_status ts, city tc WHERE tr.user_id = tu.uid AND ts.osid = tr.order_status_id AND tu.city = tc.ucid AND tu.uid = '$uid'") or die("Error! ".mysql_error());
    4.  
    5. $user = mysql_fetch_array ($user_list);
    6.  
    7. echo "<p>".$user['lastname']." ".$user['name']."</font></p>
    8. <p>г. ".$user['city_name'].", ул. ".$user['street'].", д. ".$user['building'].", кв. ".$user['room']."<br>
    9. Тел: ".$user['phone']."; Электронная почта: ".$user['email']."</p>";
    10.  
    11. $order_list = mysql_query("SELECT tp.id, tp.model_name, tp.parent_brand, tb.brand_name, tc.synonym,
    12. ts.product, ts.qty, ts.price, ts.type, ts.cart, ts.order_id, ts.user FROM product_info tp, brands tb, categories tc, users tu, shopping_cart ts WHERE tp.parent_brand = tb.id AND tp.parent_categorie = tc.id AND tp.id = ts.product AND ts.user = '$uid'") or die("Error2! ".mysql_error());
    13.  
    14. while ($user)
    15.     {echo "<ol><li>Заказ №".$user['id']." ".$user['order_date']." &mdash; <font color='".$user['order_color']."'>".$user['order_status']."</font>";
    16.     while ($order = mysql_fetch_array ($order_list))
    17.         {
    18.         if ($user['id'] == $order['order_id'])
    19.             {
    20.             echo "<table>";
    21.             $summ = $order['price'] * $order['qty'];
    22.             $sum_sum += $summ;
    23.             echo "<tr>
    24.             <td>".$order['synonym']." ".$order['brand_name']." ".$order['model_name']."</td>
    25.             <td>".$order['type']."</td>
    26.             <td>".$order['qty']."</td>
    27.             <td>".$order['price']."</td>
    28.             <td>".$summ."</td>
    29.             </tr></table>";
    30.             }
    31.         }
    32.     echo $sum_sum."</li></ol>";
    33.     }
    На выходе выдает

    И так все уходит в бесконечность.

    Где я налажал?
     
  2. VItalijs

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

    С нами с:
    17 дек 2008
    Сообщения:
    244
    Симпатии:
    0
    Адрес:
    Рига, Латвия
    вот и вечный цикл.

    надо наверное
    PHP:
    1.  
    2. <?php
    3. if($user)
    4.  
     
  3. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    VItalijs
    неа. у меня в этой переменной
    Код (Text):
    1. $user = mysql_fetch_array ($user_list);
     
  4. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    LAlexS
    во-первых, было бы неплохо, если бы код был оформлен в теги пхп, а не код.
    во-вторых, если ты делаешь цикл по условию, то внутри цикла это условие должно меняться, чтобы цикл когда-нибудь прервался. где у тебя внутри цикла
    происходит назначение переменной $user значения false, чтобы цикл прервался?
     
  5. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    Ответ пожалуйста: правильно ли я понял назначение скрипта и следующие мои предположения
    1) Вывести данные пользователя с переданным $_GET['uid']
    2) Вывести все заказы данного пользователя. При этом заказов может быть несколько
    3) вывести данные заказанного товара. При этом в одном заказе может быть несколько товаров.
    4) Как получить заказанные товары конкретного заказа?
     
  6. LAlexS

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

    С нами с:
    12 авг 2010
    Сообщения:
    179
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Gromo
    Я пробовал mysql_data_seek, но не помогло

    runner
    с 1 по 3 все правильно. Это список всех заказов, как просто информационно-статическая страничка
     
  7. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    Нужно данные для вывода получать отдельно
    1) данные пользователя отдельным запросом
    2) заказы данного пользователя отдельным запросом
    3) товары для каждого заказа тоже отдельным запросом- только непонятно как получить из таблицы shopping_cart товары по конкретному заказу
    PHP:
    1.  
    2. $uid = $_GET['uid'];
    3. //данные пользователя
    4. $user_list = mysql_query("select tu.*,tc.* from users tu,city tc  where tu.uid='$uid' AND tu.city = tc.ucid ") or die("Error! ".mysql_error());
    5. $user = mysql_fetch_array ($user_list);
    6. echo "<p>".$user['lastname']." ".$user['name']."</font></p>
    7. <p>г. ".$user['city_name'].", ул. ".$user['street'].", д. ".$user['building'].", кв. ".$user['room']."<br>
    8. Тел: ".$user['phone']."; Электронная почта: ".$user['email']."</p>";
    9. // список заказов
    10. $order_list =mysql_query("SELECT ts.* tr.*  FROM orders_list tr, order_status ts WHERE tr.user_id = '$uid'  AND ts.osid = tr.order_status_id ")) or die("Error2! ".mysql_error());
    11. while ($order = mysql_fetch_array ($order_list))
    12. {
    13.     echo "<ol><li>Заказ №".$order['id']." ".$order['order_date']." &mdash; <font color='".$order['order_color']."'>".$order['order_status']."</font>";
    14.     // здесь нужно получить  и вывести список заказанных товаров
    15. }
    16.  
     
  8. LAlexS

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

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

    PHP:
    1. $uid = $_GET['uid'];
    2.  
    3. $user_list = mysql_query("SELECT tc.ucid, tc.city_name, tu.uid, tu.name, tu.lastname, tu.city, tu.street, tu.building, tu.room, tu.phone, tu.email FROM users tu, city tc WHERE tu.city = tc.ucid AND tu.uid = '$uid'") or die("Error! ".mysql_error());
    4.  
    5. $user = mysql_fetch_array ($user_list);
    6.  
    7. echo "<p>".$user['lastname']." ".$user['name']."</font></p>
    8. <p>г. ".$user['city_name'].", ул. ".$user['street'].", д. ".$user['building'].", кв. ".$user['room']."<br>
    9. Тел: ".$user['phone']."; Электронная почта: ".$user['email']."</p>";
    10.  
    11. $order_list = mysql_query("SELECT tr.*, ts.* FROM orders_list tr, order_status ts WHERE tr.order_status_id = ts.osid AND user_id = '$uid'") or die("Error2! ".mysql_error());
    12.  
    13. $cart_list = mysql_query("SELECT tp.id, tp.model_name, tp.parent_brand, tb.brand_name, tc.synonym,
    14. ts.product, ts.qty, ts.price, ts.type, ts.cart, ts.order_id, ts.user FROM product_info tp, brands tb, categories tc, shopping_cart ts WHERE tp.parent_brand = tb.id AND tp.parent_categorie = tc.id AND tp.id = ts.product AND ts.user = '$uid' AND ts.cart = '0'") or die("Error3! ".mysql_error());
    15. echo "<ol>";
    16.  
    17. while ($order = mysql_fetch_array ($order_list))
    18.     {echo "<li>Заказ №".$order['id']." ".$order['order_date']." &mdash; <font color='".$order['order_color']."'>".$order['order_status']."</font>";
    19.    
    20.     while ($cart = mysql_fetch_array ($cart_list))
    21.         {
    22.         if ($order['id'] == $cart['order_id'])
    23.             {
    24.             echo "<table>";
    25.             $summ = $cart['price'] * $cart['qty'];
    26.             $sum_sum += $summ;
    27.             echo "<tr>
    28.             <td>".$cart['synonym']." ".$cart['brand_name']." ".$cart['model_name']."</td>
    29.             <td>".$cart['type']."</td>
    30.             <td>".$cart['qty']."</td>
    31.             <td>".$cart['price']."</td>
    32.             <td>".$summ."</td>
    33.             </tr></table>";
    34.             }
    35.         }
    36.     echo $sum_sum."</li>";
    37.     mysql_data_seek($cart_list, 0);}
    38. echo "</ol>";