За последние 24 часа нас посетили 26730 программистов и 1482 робота. Сейчас ищут 935 программистов ...

Nead help wize "FOR"

Тема в разделе "PHP для новичков", создана пользователем Alexsyal, 16 фев 2010.

  1. Alexsyal

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

    С нами с:
    16 фев 2010
    Сообщения:
    23
    Симпатии:
    0
    Значит трабла следуйщеё делаю расписание для группы.
    У меня выходит масивчик дней, фором делаю что бы их было имено 7 и в каждом делаю выборку по расписанию. Но проблема в том, что в цыкле оно начинает считать со второй цыфры, то есть во вторник данные с понедельника и т.д. проверял если ставить проверки до цыкла то даные коректны, если после то липовые :(
    PHP:
    1.  
    2. $day = array( 1 => 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Субота', 'Воскресенье'); //Масив дней
    3. for( $i = 0; $i <= 7; ++$i )
    4. {
    5.     echo '<b>'.$day[ $i ].'</b><br /><br />
    6.        Здесь табличка';
    7.     $p_row = mysql_query("SELECT p_day, p_number, p_name FROM `pair` WHERE p_day = '".$i."'");
    8.     while( $row = mysql_fetch_assoc( $p_row ) )
    9.     {   echo $i;
    10.         echo 'здесь данные';
    11.     }
     
  2. Alexsyal

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

    С нами с:
    16 фев 2010
    Сообщения:
    23
    Симпатии:
    0
    Никто не знает как решить проблему?
     
  3. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    You never should have any queries in a loop.

    We can do that like this:
    PHP:
    1. <?php
    2.  
    3. // Query
    4. $p_row = mysql_query("SELECT p_day, p_number, p_name FROM `pair`");
    5.  
    6. // Fetching data
    7. while($row = mysql_fetch_array($p_row)) {
    8.    //TODO: printing ....
    9. }
    10.  
    11. ?>
     
  4. Alexsyal

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

    С нами с:
    16 фев 2010
    Сообщения:
    23
    Симпатии:
    0
    http://uni.h16.ru/uni.php
    nothing changed
    ничего не изменилось

    and $p_row = mysql_query("SELECT p_day, p_number, p_name FROM `pair`");
    And I can not choose such a request the day
    И я не могу выбрать в таком запросе день
     
  5. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    в массиве дней первый индекс — 1, в цике — 0
    С чего бы это?

    PHP:
    1. <?php
    2. $where = ' WHERE p_day = 2';
    3. $sql = 'SELECT p_day, p_number, p_name FROM pair'.$where;
    4. ?>
    Сова была очень умная, она даже умела писать слово «суббота»
     
  6. Alexsyal

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

    С нами с:
    16 фев 2010
    Сообщения:
    23
    Симпатии:
    0
    Luge
    Я немного вас не понял, как мне сделать что бы в цыкле первый индекс был 1?
    # for( $i = 1; $i <= 7; ++$i )
    # {
    # }

    i принимает значение от 1 до 7 последовательно, дальше идет while в котором в день идет выборка по $i, и все что происходит в нутри for работает нормально, но вот в нутри while начинается ошибка.
    Как вы видете во вторник переносит 1111, в среду 222 и т.д. а должно было быть в понедельник 1111 и т.д. и в конце рисуется одна лишняя таблица.
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ай, лень
    Как-нибудь так. В первом приближении. Допилите там напильником где надо

    [sql]CREATE TABLE IF NOT EXISTS `shedule` (
    `sde_id` int(10) unsigned NOT NULL auto_increment,
    `sde_day_id` tinyint(1) NOT NULL,
    `sde_name` varchar(15) NOT NULL,
    PRIMARY KEY (`sde_id`),
    KEY `sde_day_id` (`sde_day_id`)
    ) ENGINE=InnoDB;[/sql]

    PHP:
    1. <?php
    2. $db = new mysqli('localhost','Luge','password','test');
    3. // ...
    4.  
    5. $day = array( 1 => 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье');
    6. $where = '';
    7.  
    8. if (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST') {
    9.     if (isset($_POST['day']) && !empty($_POST['day'])) {
    10.         $where = ' WHERE sde_day_id = '.(int)$_POST['day'];
    11.     }
    12. }
    13.  
    14. $sql = 'SELECT sde_day_id, sde_name FROM shedule';
    15. $order = ' ORDER BY sde_day_id ASC';
    16.  
    17. echo $sql .= empty($where)?$order:$where;
    18.  
    19. $res = $db->query($sql);
    20. $rows = array();
    21. if ($res) {
    22.     while($row = $res->fetch_assoc()) {
    23.         $rows[$row['sde_day_id']][] = $row;
    24.     }
    25. }
    26.  
    27. echo '<pre>'.print_r($rows,1).'</pre>';
    28. ?>
    29. <form method="post">
    30.     <select name = "day">
    31.         <?php foreach($day as $k => $v):?>
    32.             <option value = "<?php echo (int)$k?>"><?php echo htmlspecialchars($v)?></option>
    33.         <?php endforeach?>
    34.     </select>
    35.     <input type="submit" name="go" value="go" />
    36. </form>
     
  8. Alexsyal

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

    С нами с:
    16 фев 2010
    Сообщения:
    23
    Симпатии:
    0
    Несовсем то. Мне просто нужно сделать вот такую такбличку как в html http://uni.h16.ru/ но через бд, в бд я данные загнал. Теперь пытаюсь что бы не 7 отдельных делать цыклов, а 1 цыкл, который выбирает дни и в нем еще 1 цыкл который выбирает расписания в нутри себя.
    А то что вы предлагаете эт совсем другое :)

    у меня идет:
    PHP:
    1. Масив (ПН-ВС)
    2. Фор и=1, до и меньше равно 7, И++
    3. {
    4.           Пишем название дня
    5.           Выборка по конкретному дню = равен текущему
    6.           Запускаем цыкл
    7.           {
    8.                    выводим расписание на этот день
    9.           }
    10. }
    11.  
    12.  
    В итоге мы получаем 7 дней и расписание по каждому, в одной таблице.
     
  9. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Угу, причем явно недоступное для понимания.

    А предлагал он всего лишь выбрать данные по всем дням в одном единственном цикле.
     
  10. Alexsyal

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

    С нами с:
    16 фев 2010
    Сообщения:
    23
    Симпатии:
    0
    Simpliest
    угу, а я этого делать не хочу. Так как такой результат я получить не смогу http://uni.h16.ru/ ведь данные заполняются в таблицу цыклом, а на каждый день своя таблица. А 7 цыклов просто делать не хочу, по этому у меня и выходит выборка в цыкле.
     
  11. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А что мешает делать выборку со всех таблиц с объединением?
    Смотри доку по юнионам.
     
  12. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Выбрал все занятия для всех дней одним запросом
    в одном цикле вывел данные. Хотя не, вру, в одном день, а во втором, вложенном, занятия для конкретного дня

    или обязательно делать один и тот же запрос для каждого дня недели?
     
  13. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    И кто придумал этот идиотизм?

    А на каждый день в году тоже своя таблица? И так на каждый год?
     
  14. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Apple
    он про таблицы в html, а не в БД

    Тут в базе от силы две. Дни недели (а оно нужно вообще?) и занятия
     
  15. Alexsyal

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

    С нами с:
    16 фев 2010
    Сообщения:
    23
    Симпатии:
    0
    Luge
    тут ваще 1 таблица :)
    Угу расписание на неделю со своими плюсами и минусами. 1 оно может менятся, дополнятся изменятся. В университетах часто нужно расписание на всю неделю, а не выбор по конкретному дню, при выборе было бы намного проще.
    Мы делаем просто автономную таблицу для потока, это 5 групп, у каждой группы свое расписание и своя жизнь. Здесь в конце каждой недели данные помеченые буквой П, переносятся за счет крона на след неделю, те которые буквой В, запрашиваются в админке на перенос, и если потверждения либо отмены такого в конце недели небыло переносятся на след. Это некий планировщик для группы, так как по мимо обычного расписания мы можем добавлять свои мероприятия и т.д. А согласитесь проще просмотреть сразу расписание на всю неделю, чем искать на каждый день, а в друг группой собрались пойти в Кино, и я считал что это будет самый просто момент с масивом в масиве, а оказалось что в бивание даных через админку по типу чч:мм начала пары и чч:мм конец пары по принцыпу inplode : оказалось гораздо легче, чем эта не понятная проблема :(
     
  16. Alexsyal

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

    С нами с:
    16 фев 2010
    Сообщения:
    23
    Симпатии:
    0
    еще актуально
     
  17. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Уже давно ответили.
    http://www.php.ru/forum/viewtopic.php?p=201204#201204

    А проблема еще в том, что Вы не знаете где проблема.

    Посмотрите данные в базе. И как туда их заносили.
     
  18. Alexsyal

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

    С нами с:
    16 фев 2010
    Сообщения:
    23
    Симпатии:
    0
    Simpliest
    В базе правельные данные, занасил инсертами через sql

    Проблема у меня в том, что расписание идет сдвинуто на 1 день. В примере на который вы дали ссылку не выходит такой список.

    Понедельник
    1. пара и инфо
    2. пара
    3. пара
    4. пара

    Вторник
    1. пара
    2. пара
    3. пара

    Четверг
    1. пара
    2. пара

    Пятница


    Субота

    Воскресенье


    Интересует что в бд, пожалусто:

    [sql]--
    -- Структура таблицы `pair`
    --

    CREATE TABLE `pair` (
    `p_id` int(11) NOT NULL auto_increment, // айдишник
    `p_day` smallint(1) unsigned NOT NULL default '0', // день(пн-вс 1-7)
    `p_number` tinyint(3) unsigned NOT NULL default '0', // номер пары
    `p_name` varchar(70) NOT NULL default '', // название
    `p_start` varchar(5) NOT NULL default '', // начало
    `p_end` varchar(5) NOT NULL default '', // конец
    `p_tagging` char(2) NOT NULL default '', // статус
    `p_place` varchar(70) NOT NULL default '', // местонахождения
    `p_lecturer` varchar(70) NOT NULL default '', // инфа о преподаватели\организаторе
    `p_info` varchar(168) NOT NULL default '', // инфа о паре\мероприятии
    `p_categories` varchar(70) NOT NULL default '', // категория
    PRIMARY KEY (`p_id`)
    ) TYPE=MyISAM AUTO_INCREMENT=11 ;

    --
    -- Дамп данных таблицы `pair`
    --

    INSERT INTO `pair` (`p_id`, `p_day`, `p_number`, `p_name`, `p_start`, `p_end`, `p_tagging`, `p_place`, `p_lecturer`, `p_info`, `p_categories`) VALUES
    (1, 1, 1, 'Математика', '8:00', '9:20', '1', 'Корпус: 1 Кабинет: 22', 'Василий И. В.', 'ЯЯ', '2'),
    (2, 1, 2, 'Биология', '9:40', '11:00', '1', 'Корпус: 1 Кабинет: 22', 'Василий И. В.', 'ЯЯ', '2'),
    (3, 1, 3, 'Физика', '11:20', '12:40', '1', 'Корпус: 1 Кабинет: 22', 'Василий И. В.', 'ЯЯ', '2'),
    (4, 1, 4, 'Химия', '13:00', '14:20', '1', 'Корпус: 1 Кабинет: 22', 'Василий И. В.', 'ЯЯ', '2'),
    (5, 2, 1, 'Математика', '8:00', '9:20', '1', 'Корпус: 1 Кабинет: 22', 'Василий И. В.', 'ЯЯ', '2'),
    (6, 2, 2, 'Физ. Культура', '9:40', '11:00', '1', 'Корпус: 1 Кабинет: 22', 'Василий И. В.', 'ЯЯ', '2'),
    (7, 2, 3, 'Труд', '11:20', '12:40', '1', 'Корпус: 1 Кабинет: 22', 'Василий И. В.', 'ЯЯ', '2'),
    (8, 3, 1, 'Крим. Право', '8:00', '9:20', '1', 'Корпус: 1 Кабинет: 22', 'Василий И. В.', 'ЯЯ', '2'),
    (9, 3, 2, 'Микроекономика', '9:40', '11:00', '1', 'Корпус: 1 Кабинет: 22', 'Василий И. В.', 'ЯЯ', '2'),
    (10, 4, 1, 'Начерталка', '8:00', '9:20', '1', 'Корпус: 1 Кабинет: 22', 'Василий И. В.', 'ЯЯ', '2');
    [/sql]
     
  19. VItalijs

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

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

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

    С нами с:
    16 фев 2010
    Сообщения:
    23
    Симпатии:
    0
    VItalijs
    я не изобретаю велосипед, я с талкнулся с проблемой здвика на 1 при цыкле и решил узнать может на неё есть нормальное решение дебы не делать несколько по цыклу на каждый день.
     
  21. VItalijs

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

    С нами с:
    17 дек 2008
    Сообщения:
    244
    Симпатии:
    0
    Адрес:
    Рига, Латвия
    зачем вы в цикле делаете запросы к базе? http://www.php.ru/forum/viewtopic.php?p=201204#201204 чем вас не устраивает это решение, если оно выведет всю информацию как вам надо?
     
  22. Alexsyal

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

    С нами с:
    16 фев 2010
    Сообщения:
    23
    Симпатии:
    0
    VItalijs
    потому что это решение отображается по другому. Я уже об этом писал. А мне нужно что бы я вот так мог вывести http://uni.h16.ru/ названия дня и все занятия которые внем есть.

    Понедельник
    1. пара и инфо
    2. пара
    3. пара
    4. пара

    Вторник
    1. пара
    2. пара
    3. пара

    Четверг
    1. пара
    2. пара

    Пятница


    Субота

    Воскресенье



    А не отдельно Понедельник = такието пары, выбираю вторник, такие то пары :)
    Короче ясно, пока нету решения придется тупо 7 цыклов одинаковых использовать.
     
  23. VItalijs

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

    С нами с:
    17 дек 2008
    Сообщения:
    244
    Симпатии:
    0
    Адрес:
    Рига, Латвия
    объясните что вам мешает показывать информацию так как вам надо?
     
  24. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    руки мешают
     
  25. Alexsyal

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

    С нами с:
    16 фев 2010
    Сообщения:
    23
    Симпатии:
    0
    Simpliest
    а без оскорблений просто помочь решить, так как код у меня хоть и корявый но рабочий, я не прогил года 3 сейчас в споминаю, хочу сначала сделать что бы работало потом на классы перевести и шаблоны. Но для начала нужно понимание вернуть, в моем коде проблема в том что даные идут с сдвигом на день. А в примере который вы все так расхваляете сделана выборка конкретно на 1 день который выбрать. А помочь я так понимаю вы сами не можете.