За последние 24 часа нас посетили 51315 программистов и 1758 роботов. Сейчас ищут 1160 программистов ...

Посоветуйте Grid или List

Тема в разделе "PHP для новичков", создана пользователем TrueTrue, 4 сен 2014.

  1. TrueTrue

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

    С нами с:
    1 мар 2012
    Сообщения:
    10
    Симпатии:
    0
    Всем привет, я совсем новичёк, разобрался только немного в сути PHP и делаю самый минимум.

    Прошу у вас помощи или совета.

    Есть база MySQL

    Мне необходимо сделать поиск по базе, по критерию, допустим "пара символов".
    После вывести список найденных вариантов, в несколько колонок и в этом списке выбрать нужный вариант, кликнуть на него и получить уже расширенную версию данных, тоесть информацию со всех колонок в этой строке.

    Я с "горем пополам", подключаюсь к базе, делаю поиск в определённой колонке, вывожу в список. Но незнаю, как вывести в несколько колонок и как сделать возможно выбора в списке. Подскажите или посоветуйте альтернативу.

    Заранее спасибо.
     
  2. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Если вы совсем новичок, то вы не туда лезете, не нужна такая выборка, потому что или все делать самому или же использовать фреймворк, а фреймворк это уже совсем другое и не для новичков.
    Делайте что то попроще, что бы нормально подключаться к БД, а не с горем пополам.
     
  3. dcc0

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

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Переход/выбор можно сделать, если в цикле оформить каждый вывод как ссылку. Допустим:
    Код (Text):
    1.  while ($row = mysql_fetch_array($result)) {
    2. echo  "<a href=somepage.php?$row[id]>   $row[head] </a>";
    3. }
    На страницу поиска выводим из таблицы, допустим, только одну колонку - заголовок, а в тегах ссылка на другую страницу (в ссылке id), нажимаем на ссылку попадем на другую страницу выводим все колонки (выборка по id, который у нас передан как переменная в новый запрос): например head, date, text, text2 etc... и в sql запросе (на новой странице) ставим LIMIT 1, чтобы вывести только одну запись, но целиком.


    А вот с делением на несколько колонок, пока на ум приходит, - наверное, грубый, - вариант проверки количества итераций. Допустим, итераций в цикле для вывода больше 10, тогда вывести еще одну колонку, например. Оформить можно через td.
    Т.е.:

    Код (Text):
    1.  
    2. Цикл вывода из базы {
    3.  Вывести элементы со ссылкой для перехода
    4.   Считать итерации
    5.   Если итераций больше 10,
    6.  Тогда вывести дополнительную колонку,
    7. Если больше 20 тогда еще одну колонку
    8.  
    9. }
    Причем тут подойдет конструкция switch.

    Или изначально поделить документ на три колонки - html, внутри каждой колонки код PHP для вывода из базы, в первой колонке первые 10, потом 20, 30...
    Тут можно воспользоваться тем, что в sql запросе можно выбирать, с какого номера выводить данные.
    Но есть минус, три раза дергаем базу.

    Вариант третий: данные из базы поступают в виде массива, считаем количество данных, делим на количество колонок, округляем до целого, разделяем на три массива, кладем в разные колонки.

    Все варианты, может быть, не очень, но для размышлений могут пригодиться.
     
  4. TrueTrue

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

    С нами с:
    1 мар 2012
    Сообщения:
    10
    Симпатии:
    0
    Уважаемый, "лезут" на дерево, а я изучаю Web программирование. Про то, что я новичок, я написал специально, что бы вот такие как Вы не флудили и не троллили мой пост. В своём понимании я новичок, но как известно всё познаётся в сравнении. К базе подключился и данные с неё выбираю. SQL запросы делаю, что не понимаю, разбираюсь. Совета я попросил, для того, что бы зазря "не ходить ненужным путём" и не тратить время, потому как у меня его немного. Если есть советы по делу, буду благодарен. Если нечего сказать просто пройдите мимо. Хамить пожалуйста ненужно, уважения к Вам, во мне, Ваше хамство никакого не вызывает.

    dcc0 - Спасибо, буду пробовать.
     
  5. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ваша задача делится на две - выборку данных и вывод данных. Вывод данных - смотрите, какие возможности представляет html (поскольку чаще всего на php всё-таки сайты делают). Судя по Grid и List, подозреваю, что вы раньше писали десктопные программы на чём-то типа Visual Basic или Delphi, в вебе напрямую таких элементов нету. Есть <select>, он может быть с мультивыбором. Grid-а дефолтного нету, но можно использовать таблицы и самому написать JavaScript-слой (для обработки поведения пользователя в браузере), либо найти готовый javaScript-плагин, коих великое множество. Тут очень важно так же понять, что веб-приложения - это по сути клиент-серверные системы, часть приложения выполняется в браузере посетителя (javaScript), часть - на сервере (в нашем случае, но не обязательно, php)
     
  6. dcc0

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

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Сходу придумал такой пример. Два раза выбираем из базы, сначала с 0 по 10, потом с 10 и все остальное, выводим
    в два столбика.

    Код (Text):
    1.   $result = mysql_query('select * from  bd order by id desc limit 0, 10' ) or die('error!');
    2.     $result1 = mysql_query('select * from  bd order by id desc limit 10, 10' ) or die('error!');
    3.  
    4. echo '<table>';
    5.   echo  '<td>';
    6.  
    7.  while ($row = mysql_fetch_array($result)) {
    8.     echo$row['date'];
    9.  
    10.   }
    11. echo ' </td> ';  
    12.  
    13.   echo  '<td>';
    14.    while ($row = mysql_fetch_array($result1)) {
    15.     echo $row['date'] ;
    16.  
    17.   }
    18.   echo ' </td> ';  
    19. echo '</table>';  
    20. ?>
     
  7. TrueTrue

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

    С нами с:
    1 мар 2012
    Сообщения:
    10
    Симпатии:
    0
    Спасибо за советы))) Действительно очень помогли. Забрался "глубоко")))

    Сделал Таблицу (<table), вывожу в неё некоторые КОЛОНКИ данных, из базы данных. При помощи JavaScript выбираю нужную строку, кликаю, прорисовываю модальное окно, теперь мне нужно в этом окне вывести данные из базы данных, в более полной(расширенной форме).

    В начале я стал делать так:

    Загружается страница,
    Обращение в БД,
    Вычитываю 5 КОЛОНОК (PHP),
    Вывожу в таблицу,
    При клике по таблице, в модальное окно передаю INDEX строки из базы данных (JavaScript),
    Делаю повторное обращение к БАЗЕ ДАННЫХ!!!
    Но тут у меня возникла проблема, с передачей переменной(INDEX) из JavaScript в PHP, эту проблему пока не смог решить.

    Да и подумал, не разумнее было бы, вместо ДВУХ ОБРАЩЕНИЙ к БД, считывать по запросу, весь кусок в ТАБЛИЦУ, но выводить только нужные колонки?!

    Прошу помощи, совета у знающих людей.

    Как лучше поступить? Делать 2 запроса в БД, или одним запросом считать всю базу в таблицу и скрыть некоторые колонки?
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    AJAX в помощь, если я вас понял правильно.
     
  9. TrueTrue

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

    С нами с:
    1 мар 2012
    Сообщения:
    10
    Симпатии:
    0
    Всмысле вычитывать данные из базы данных Через Ajax, правильнее, чем сделать запрос на PHP в базу данных 1 раз?!
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  11. TrueTrue

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

    С нами с:
    1 мар 2012
    Сообщения:
    10
    Симпатии:
    0
    Ну дак кто-нить может реально дельный совет даст?

    Либо как-то передать значение переменной(INDEX) из JavaScript в Php.
    Либо грузить все колонки из базы данных, согласно выборке, заносить их Таблицу(или массив) и скрывать каким-то образом ячейки.

    А потом, при необходимости подгружать.
     
  12. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Я не до конца врубаюсь, что вы пытаетесь сотворить
     
  13. TrueTrue

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

    С нами с:
    1 мар 2012
    Сообщения:
    10
    Симпатии:
    0
    ок. Тогда так.
    Есть БД MySQL в ней хранится большая база. Следуя вашим советам, я добился того, что бы по определённому критерию отсеивался список НУЖНЫХ СТРОК в этой базе.

    Получилась такая вот таблица.
    [​IMG]

    Всего столбцов около 20 ШТУК. В ЭТУ ТАБЛИЦУ! Выводятся только ВАЖНЫЕ СТОЛБЦЫ!
    В таблице, при помощи JavaScript я выбираю нужную строку. И открывается модальное Окно JQuery:
    [​IMG]

    В это модальное окно, мне нужно вывести все остальные столбцы! Выбранной в таблице строки!

    При клике по таблице, я получаю ИНДЕКС! Порядковый номер СТРОКИ из первой колонки таблицы. Я не знаю, как его передать в СКРИПТ PHP который выполняется в модальном окне, что бы повторно вычитать из базы, данные из оставшихся колонок и вывести в модальное окно. Так вот. Надеюсь более понятно)))
     
  14. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Да, теперь понятно. Классический AJAX-запрос. JavaScript должен обратиться к скрипту на сервере, который у меня обычно генерит как раз всю форму (мне лениво делать разбор ответа javaScript-ом, и подставлять данные в поля). После чего вывести это дело в окошко. А в php-скрипт id передаётся через GET или POST параметр. Для сохранения нужно будет опять ajax дёрнуть, или же отправить форму обычным образом, с перезагрузкой страницы. Читайте про jQuery.get, jQuery.post, jQuery.ajax. И помните, что php рождён, чтобы умирать :)

    Т.е. примерно такая последовательность действий происходит
    1. Браузер запросил страницу с таблицей
    2. Скрипт её сгенерил, отправил браузеру, сдох
    3. JavaScript получил от пользователя приказ модифицировать одну строку (браузер вызвал обработчик события)
    4. Он отправил серверу запрос сгенерировать форму редактирования, id передал через get или post
    5. Уже другой скрипт на сервере считал из базы всё, что надо (по id), сгенерил форму, отправил браузеру, сдох
    6. Браузер передал то, что нагенерил скрипт в функцию JS, которая должна обработать ответ
    7. Эта функция заменила содержимое диалогового окошка, отобразила на экране
    6. Когда пользователь наигрался и нажал сохранить, опять посылается AJAX-запрос с содержимым формы, или же просто форма отправляется на сервер.
     
  15. TrueTrue

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

    С нами с:
    1 мар 2012
    Сообщения:
    10
    Симпатии:
    0
    mkramer - Спасибо, надо переварить))
     
  16. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    У ТС своя терминология, у советчика своя. Ничего им не понятно.

    Типичная datagrid устроена как phpMyAdmin - видели такую? Ну вот и сделайте себе такую же. Там все есть, в принципе, кроме пакетной вставки-копирования строк.