За последние 24 часа нас посетили 22187 программистов и 1682 робота. Сейчас ищут 1593 программиста ...

Цикл в цикле

Тема в разделе "PHP и базы данных", создана пользователем lobanov_kirill_, 16 сен 2012.

  1. lobanov_kirill_

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

    С нами с:
    2 сен 2012
    Сообщения:
    3
    Симпатии:
    0
    Друзья, подскажите что тут не так!? Есть примитивный форум (это практическая) который нужно заполнить темами и ответами, причем тем должно быть 160000, а ответов 600000. Вот что у меня получилось

    Код (Text):
    1. $num = 510;
    2. for ($j=1;$j < 10;$j++){
    3. $mess = "Это сообшение сгенерировано циклом for";
    4.  
    5. $cat = $num + $j;
    6. for($i=1; $i < 51; $i++)
    7. {
    8.      
    9. $result = mysql_query("INSERT INTO comments(mess,date,time,cat) VALUE ('$mess','$all','$time','$cat') ",$db);
    10. }
    11.  
    12. }
    $cat -- это номер категории темы (по этому номеру осуществляется привязка ответа)
    $mess -- ответ
    $date и $time -- время
    Как я понимаю скрипт должен сообщение $mess прописать 50 раз в тему с категорией 511, потом к категории прибавляется 1 и опять прописывается 50 сообщений уже в категорию 512 и т.д. покуда категория не станет 520. Но что получается у меня!!!!! 50 сообщений прописывается в категорию 520. Вопрос: почему?
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Попробуй заменить
    Код (PHP):
    1. $result = mysql_query("INSERT INTO comments(mess,date,time,cat) VALUE ('$mess','$all','$time','$cat') ",$db); 
    на
    Код (PHP):
    1. $sql = "INSERT INTO comments(mess, date, time, cat) VALUE ('$mess', '$all', '$time', '$cat')";
    2. $result = mysql_query($sql, $db) or exit($sql . '<br />' . mysql_error($db)); 
    Хотя это и маловероятно в данном случае, но может какие-то запросы не проходят.
    Добавь в начале скрипта
    Код (PHP):
    1. ini_set('display_errors', true);
    2. error_reporting(E_ALL); 
    на случай, если вывод нотисов отключен. Может поможет увидеть косяк какой-нибудь.
    Но вообще, мне кажется, что у тебя второй цикл запускается только после того, как первый полностью отработает. Т.е. выглядит это так, как будто они не вложенные, а последовательно запускаются. Типа такого:
    Код (PHP):
    1. <?php
    2. $num = 510;
    3. for($j = 1; $j < 10; $j++) {
    4.     $mess = "Это сообшение сгенерировано циклом for";
    5.     $cat = $num + $j;
    6. }
    7. for($i = 1; $i < 51; $i++) {
    8.     $sql = "INSERT INTO comments(mess, date, time, cat) VALUE ('$mess', '$all', '$time', '$cat')";
    9.     $result = mysql_query($sql, $db) or exit($sql . '<br />' . mysql_error($db));
    10. }
    11. ?>
    Пересмотри ещё раз повнимательней код, особенно удели внимание расстановке скобочек фигурных, убедись, что действительно все блоки стоят на своих местах. Расставь правильно отступы, это позволит сразу же просто визуально увидеть вложенность циклов, условий...
    Ну и ещё, создаётся впечатление, что здесь показан не тот код, который у тебя работает не так, как надо. Т.е., возможно, ты хотел уменьшить объём кода, подсократил перед выкладыванием на форуме. Возможно, при сокращении изменил что-то. Просто по идее, тот код, который ты запостил - должен работать так, как ты от него ожидаешь.