За последние 24 часа нас посетили 17754 программиста и 1713 роботов. Сейчас ищут 980 программистов ...

Не могу разобраться с выводом из MySQL (Новичёк)

Тема в разделе "Прочие вопросы по PHP", создана пользователем ceplllaht, 24 май 2015.

  1. ceplllaht

    ceplllaht Новичок

    С нами с:
    24 май 2015
    Сообщения:
    23
    Симпатии:
    0
    1. Народ где ошибка может быть? У меня for( $id=0; $id<=4; $id++); Переменная $id срабатывает сразу с "4" а не с "0"
    2. И как можно доделать скрипты чтоб все выводило по порядку:
    Id "1" Name "Цой" Sub "Рок" URL "http://"
    ...
    Id "4" Name "Шевчук" Sub "Рок" URL "http://"
    Расчитываю на вашь профессиональный опыт)

    db:"Sound" From: "main" || [id] [name] [dis] [code]<?php try { $pdo = new PDO...{ echo "Ничего не найдено."; } }?>[/code]
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты используешь одну переменную (i) и для итерации от нуля до четырех и для итерации полей результата запроса к субд. внимательность.
     
  3. ceplllaht

    ceplllaht Новичок

    С нами с:
    24 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Я тока начал изучать PHP, вообщем я не понимаю тебя) А как должно быть? оО
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а язык тут каким местом? это алгоритмизация. если ты не одупляешь что нужно использовать две разные переменные то тебе лучше пока отложить программирование. мышлялку развивай

    Добавлено спустя 1 минуту 50 секунд:
    ай-ай-ай... прошу прощения)))) привидилось мне что там $i вместо $id. ща секунду ведёрко кофе выпью и вернусь)))

    Добавлено спустя 1 минуту 18 секунд:
    а покажи какая страница у тебя получается. и есть ли у тебя айдишники вообще ниже 4

    Добавлено спустя 1 минуту:
    ну и кстати если первичный ключ с автоинкрементом то нулевого айдишника быть не может. итерируй от 1. и можно 4 запроса к субд не делать а одним обойтись и разом по 4 строкам пройтись.
     
  5. ceplllaht

    ceplllaht Новичок

    С нами с:
    24 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Connect to the database OK!
    5 Мумитроль Rock http://

    Если я поставлю for( $id=1; $id<=4; $id++); Нечего не измениться. :( У него 4 это моя 5я позиция в SQL
    Словно я ему сразу указал что переменная $id=4;



    -----
    Всё брат Разобрался! надо было просто урать ";"
    for( $id=0; $id<=2; $id++); { ... }
    На
    for( $id=0; $id<=2; $id++) { ... }
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    значит нет айдишников ниже 4. попробуй первой строкой в теле цикла выводить текущее значение айдишника и убедись что цикл перебирает все значения от 1 до 4 включительно.
     
  7. ceplllaht

    ceplllaht Новичок

    С нами с:
    24 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Всё брат Разобрался! надо было просто урать ";"
    for( $id=0; $id<=2; $id++); { ... }
    На
    for( $id=0; $id<=2; $id++) { ... }

    Id "1" Name "Цой" Sub "Рок" URL "http://"
    до
    5 Мумитроль Rock http://
    И потом ещё:
    Ничего не найдено.Ничего не найдено.Ничего не найдено.Ничего не найдено.Ничего не найдено.Ничего не найдено.Ничего не найдено.Ничего не найдено.
    Так как:
    for( $id=1; $id<=10; $id++) { ... }
    Как теперь бы сделать так чтоб $id<=10; работал до того момента как таблицы в SQL не закончиться. :)
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    отлично. а теперь попробуй выбирать одним запросом а не сотней.
     
  9. ceplllaht

    ceplllaht Новичок

    С нами с:
    24 май 2015
    Сообщения:
    23
    Симпатии:
    0
    for( $id=1; $id; $id++)
    {
    $data->execute(array('id' => $id));
    $result = $data->fetchAll();

    if ( count($result) ) {
    foreach($result as $row) {
    $i = 0;
    $i < count($row);
    echo($row[$i++] . " ");
    echo($row[$i++] . " ");
    echo($row[$i++] . " ");
    echo($row[$i++] . " </br>");
    }
    } else {
    exit(); // Вместо Ничего не найдено...
    }
    }
    Вот так он выводит до конца. Мне пока так нужно.

    А одним запросом я не понимаю, про что ты и для чего бы это нужно было) Как то так)
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вот я тут уже одному одаренному рассказывал что его мамка послала за десятком яиц, тот пошел оделся, спастился, сел в маршрутку, доехал до ашана, купил яйцо, вернулся домой, выложил яйцо, разделся, оделся, спустился и так далее пока дома не набрался десяток яиц. выборка всех строк это вообще азы работы с рсубд. выборка по условию это уже чуть более частное. если ты вдруг пропустил начало то конечно делай сотню запросов. тебе так удобнее. ты так знаешь.
     
  11. ceplllaht

    ceplllaht Новичок

    С нами с:
    24 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Понял не дурак, блин надо теперь подумать как это сделать)
    else { exit; } Не подходит, php и html перестаёт работать, дальше это команды.
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    не, знаешь, не обижайся но...

    на пальчиках показываем как в детском садике.
    есть у тебя числовой ряд 1-2-3-4-5
    и ты его выбираешь пятью запросами явно указывая за один запрос один идентификатор строки
    можно сделать:
    1) 1 запрос в котором перечислить идентификаторы тех строк которые тебе нужны (один, два, три, четыре, пять) .
    или
    2) 1 запрос в котором ты явно указываешь первый и последний идентификаторы (больше или равно одному и меньше или равно пяти)
    или
    3) 1 запрос в котором явно указать только правую границу диапазона (меньше или равно пяти)

    так или иначе но даже когда ты делаешь один запрос и он тебе возвращает результирующую таблицу - ты перебираешь в ней все строки. но только у тебя по роду запроса получается что там лежит только по одной строке. сделай запрос который вернет пять строк и будешь итерировать через пять строк. магия блин? не думаю. просто мануалы нужно читать.
     
  13. ceplllaht

    ceplllaht Новичок

    С нами с:
    24 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Ganzal, Не знаю, я тебя тяжело понимаю) Если честно я вообще с последнего сообщения не чего не понял) Я PHP изучаю третье сутки. :(
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    проблема не в языке программирования а в умении сформулировать алгоритм. тебе основы программирования в школе классе в 7 должны были объяснить. а потом если ты только третьи сутки изучаешь пхп то почему уже работаешь с субд? ты уже прошел базовые типы данных? функциональные и объектно ориентированное программирование различаешь? уже сделал несколько связанных страниц между которыми ты данные успешно передаешь? база данных это немного следующий уровень. и поскольку ты нулевой программист то хоть трое суток хоть три месяца - результата никакого не будет. собственно то что ты выбираешь пять строк пятью запросами уже говорит о том насколько ты адекватно мыслишь и видишь данные и видишь как с ними можно работать. не важно в базе они лежат, в файле, или прям в скрипте написаны. ты одинаково НЕ умеешь с ними работать.


    $sql = "SELECT * FROM `table` WHERE `id` IN (1,2,3,4)"; - первый вариант запроса - перечисление айдишников
    $sql = "SELECT * FROM `table` WHERE `id` >= 1 AND `id` <= 5"; - второй вариант запроса - указание диапазона айдишников
    $sql = "SELECT * FROM `table` WHERE `id` <= 5"; - третий вариант запроса - указание верхней границы диапазона айдишников

    $result = query($sql); - выполняем запрос записанный в переменную скуэль. не сложно догадаться что раз там трижды шло присвоение текстового значения одной и той же переменной - там будет лежать последний текст - ТРЕТИЙ ВАРИАНТ С УКАЗАНИЕМ ВЕРХНЕЙ ГРАНИЦЫ, ваш кэп
    while($row = fetch($result)) { - итерируем результат пока в нем есть кортежи
    var_dump($row); - просто тупо дампим строку. в конце концов ты обязан уметь отлаживать приложение хотя бы таким способом. ты же уже три дня изучаешь пхп. как ты собираешься программы писать если не знаешь как она должна работать и какое состояние в какой момент иметь?
    } - граница цикла

    и вот представь себе любой из тех трех запросов вернет набор из максимум 5 строк если такие есть в базе. и тело цикла выполнится максимум пять раз и покажет тебе максимум пять строк. почему же у меня не получается для этого делать пять запросов? наверное потому что я на третьем дне изучения пхп не стремился делать то к чему не готов. удачи :D
     
  15. ceplllaht

    ceplllaht Новичок

    С нами с:
    24 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Надо будет попробывать как ты предложил.

    Я тут уже так зделал, понравилось, может ты про это и имел ввиду...

    Код (Text):
    1. $sql = "SELECT id,name,description,url FROM main";
    2. $q = $pdo->prepare($sql);
    3. $q->execute();
    4. $q->bindColumn(1, $id);
    5. $q->bindColumn(2, $name);
    6. $q->bindColumn(3, $description);
    7. $q->bindColumn(4, $url, PDO::PARAM_LOB);
    8. while($q->fetch()) {
    9.         echo("ID: " . "<b>" .  $id . "</b>" . " ");
    10.         echo("Name: " . "<b><a href ='" . $url . "'>" .  $name . "</a></b>" . " "); // NAME + URL
    11.         echo("Description: " . "<b>" .  $description . "</b>" . " " . "<br>");
    Спс тебе за поддержу. Ты мне один здесь обьясняешь по делу. Ты в VK есть? Если не против давай задружим)