Перейти к содержимому

Как вывести информацию из бд в php

  • автор:

Вывод данных из базы данных на страницу сайта. Как сделать?

Спасибо большое! Выглядит очень хорошо. Подскажите, а как это можно вывести списком в HTML документе?

konohovec, каким именно списком?
konohovec @konohovec Автор вопроса

Jonh Doe, решил этот вопрос, спасибо) Подскажите про другой вопрос: как мне по очереди данные из одного массива вписывать, например, в какой-нибудь div

echo '
'; foreach($arrayname as $v=>$k) < echo $k.': '.$v.'
'; > echo '
';

Где arrayname это ваш массив.
v — значение элемента массива
k — ключ элемента массива

konohovec @konohovec Автор вопроса
Jonh Doe, спасибо большое! Сработало

Tokishu

Здравствуйте Jonh Doe Я бы хотел узнать кое что о коде, я вот к примеру получил данные но как мне к примеру вытащить только айди пользователя или никнейм?(буду очень благодарен, и простите если это елементарный вопрос. Я только учусь и хочу попробовать сделать админку. и искал ответ почти 2 дня. Буду благодарен если дадите ответ.)

Код куда хочу распределить данные

 id Что-то еще. Что-то еще. Что-то еще. Что-то еще. 

Tokishu, ну смотри. Надо понимать что за данные у тебя есть.
Предположу, что ты отправил запрос к базе и получил что-то. Запрос при этом был

$result_set = $mysqli->query('SELECT * FROM users');

Тогда в переменной $result_set у тебя будет что-то типа такого:

array( array(1,'admin','password','10-10-2022'), array(2,'user','userpass','11-10-2022'), )

где массивы с данными повторят столбцы базы [id, login, password, last_date]

И мы можем в этом случае перечислить массив через foreach

foreach($result_set as $k=>$v) < // тут будет перечисление пользователей echo ''; foreach($result_set as $kk=>$vv) < echo ''.$vv.''; // тут будет перечисление данных пользователей > echo ''; >

либо можем сделать так:

foreach($result_set as $k=>$v) < // тут будет перечисление пользователей echo ''; echo ''.$v['id'].''; echo ''.$v['login'].''; echo ''; >

Это очень схематичный и простой пример, не факт, что он сработает, но для понимания сути подойдет.

Как вывести информацию из бд в php

На самом деле нет ничего сложного, опять же отправлю вас изучать предыдущую страницу, т.к. на её основе мы будем делать собственно эту страницу!

Здесь я должен предупредить, что возможность программирования не ограничивается одним вариантом решения задач- вывода из таблицы базы данных на экран.

Я же буду делать совсем простым способом, без заморочен, ну по крайней мере мне так кажется, потому, что этот вариант вышел сразу, как я только собрался писать на эту тему!

Что же нужно для того, чтобы вывести всю информацию из базы данных в таблицу!?

Нужно взять работоспособный скрипт, и обернуть его в таблицу – все просто!

С того, что представим таблицу, в каком она будет виде. – это таблица, в которой будет несколько строк! Вспоминаем html…

Давайте приведу код таблицы, которая состоит из двух строк и 8 столбцов.

Столбцы это у нас td(повторяем столько раз, сколько имеется столбцов у базы данных(которые будем показывать…)), структура таблицы:

Схема вывода информации из базы данных в таблицу

В первой строке(первая «tr») у нас будут -название полей базы данных. Другими словами, первая часть таблицы будет статичная(до слов «здесь скрипт с выводом из базы данных»), т.е. нужно её один раз заполнить и сделать вывод например через echo если вы используете php, ну или оставить так. если это html!

name;

hobby;

city;

country;

email;

data;

//здесь скрипт с выводом из базы данных

Далее нам нужны данные для подключения к базе данных и сделаем выборку из нашей базы данных и выведем все это через echo:

\n – перенос строки

$result=mysql_query(«SELECT * FROM `НАЗВАНИЕ ТАБЛИЦЫ`»);

«.»\n».»

«.»».$row[«Nik»].»

«.»\n».»

«.»».$row

Здесь был вариант номер два –пример вывод данных из базы данных в таблицу. Но это был всего лишь вариация на тему первого варианта.

Смотрим результат работы нашей программы:

ID; name; Nik; hobby; city; country; email; data;
5 Марат amrandko Велик Уфа Россия скрыт 2016-06-05 16:02:19
8 EdWilson EdWilson ЗОЖ Архангельск Россия скрыт 2016-06-05 20:36:53
9 Вася шашлык Москва Россия скрыт 2016-07-06 11:33:52
10 Проверка самты Женщины Рим Италия скрыт 2016-07-06 11:34:54
11 Проверка самты Женщины Рим Италия скрыт 2016-07-06 11:34:54
12 Пупкин Лежание на диване Магадан Такой нет скрыт 2016-07-06 16:38:52
13 уу уу уу уу скрыт 2016-10-10 18:08:48
14 еыоее ео оен ео скрыт 2016-11-26 08:13:44
15 2 3 3 4 скрыт 0000-00-00 00:00:00
16 12 12 12 1 скрыт 2016-12-28 01:22:04
17 df dfd f d скрыт 2017-01-17 23:54:03
18 фф ав ав ав скрыт 2017-01-22 18:18:58
19 3 3 3 3 скрыт 2017-01-25 21:44:18
20 в а ы ф скрыт 2017-02-03 12:41:15
21 y ,km lk l скрыт 2017-02-23 03:37:12
22 123 21 лис рос скрыт 2017-02-25 07:29:51
23 6н6не5 4554 6г7 скрыт 2017-03-09 01:42:36
24 jd h h hj скрыт 2017-03-12 13:21:27
25 рпмпр пени орп о скрыт 2017-03-12 15:37:45
26 2 3 4 5 скрыт 2017-03-21 23:54:07
27 ваиываи ваиываи фпывптапт уапп скрыт 2017-04-06 08:01:31
28 1 222 111 233 скрыт 2017-04-23 16:35:02
29 п п пп п скрыт 2017-06-27 16:15:13
30 опропро рпо рпо рпо скрыт 2017-07-18 11:50:39
31 gh h hj hj скрыт 2017-08-04 08:54:37
32 gh bn b y скрыт 2017-08-04 08:55:44
33 gh bn b y скрыт 2017-08-04 08:56:10
34 gh bn b y скрыт 2017-08-04 08:56:19
35 gh bn b y скрыт 2017-08-04 08:56:28
36 gh bn b y скрыт 2017-08-04 08:56:37
37 gqg wgwa grwaeg rge скрыт 2017-08-07 19:43:45
38 vsd wfq fqe eqwv скрыт 2017-08-08 18:39:02
39 P D S A скрыт 2017-08-18 10:36:38
40 a a a a скрыт 2017-08-18 13:12:12
41 123 123 123 123 скрыт 2017-08-28 15:14:12
42 asfdas adfasd asdfas dsf скрыт 2017-09-25 21:36:13
43 asfdas adfasd asdfas dsf скрыт 2017-09-25 21:36:13
44 asfdas adfasd asdfas dsf скрыт 2017-09-25 21:36:13
45 asfdas adfasd asdfas dsf скрыт 2017-09-25 21:36:13
46 пнварпв апрвап рапра прапр скрыт 2017-09-25 21:48:30
47 Это пример Это пример Это пример Это пример скрыт 2017-09-25 21:57:50
48 ав ав ав ав скрыт 2017-10-11 02:15:26
49 1 1 1 1 скрыт 2017-11-12 23:09:24
50 dfgd dghhgh gdyye etytye скрыт 2017-11-19 16:27:09
51 hhsghs dnfggnxf fgncgnc vmvbmchm скрыт 2017-12-10 19:05:13
52 warawr awrawr awrawrwa awfawf скрыт 2017-12-18 18:29:12
53 erwerwer erwerwer werwerwer werwerwer скрыт 2017-12-30 02:13:45
54 dasda sdas dasda sdasda скрыт 2018-01-08 13:10:15
55 аенёё апрапр ккк кк скрыт 2018-02-14 07:01:33
56 ы вывв ывывыв ывывыв скрыт 2018-03-25 15:39:21
57 ука укаукау ука укаука скрыт 2018-03-29 20:52:27
58 2 3 4 5 скрыт 2018-03-30 00:03:53
59 w we we we скрыт 2018-04-05 19:54:53
60 asd asda sda sdasd скрыт 2018-04-10 02:21:39
61 cd cfhj lk lkl скрыт 2018-05-09 13:27:38
62 1 1 1 1 скрыт 2018-05-30 10:18:14
63 2 3 4 5 скрыт 2018-06-10 10:14:07
64 3 4 5 6 скрыт 2018-06-10 10:49:14
65 вфыв фыв вфы выф скрыт 2018-06-28 20:31:26
66 ВЫА ЫВА ЫВА ЫВА скрыт 2018-07-22 03:51:11
67 rgf qwe yuio ghhhj скрыт 2018-07-25 21:51:43
68 аиавпива аиапича мимстси мимтсмтсм скрыт 2018-08-15 16:39:05
69 f f bfgh hfg скрыт 2018-09-13 13:47:31
70 Dokkk hhhhh bbbbb vvvv скрыт 2018-10-01 10:15:11
71 зуек хоккей Омск Россия скрыт 2018-11-30 19:54:41
72 зуек хоккей Омск Россия скрыт 2018-11-30 19:55:33
73 зуек хоккей Омск Россия скрыт 2018-11-30 19:55:39
74 1 1 1 1 скрыт 2018-12-08 02:23:52
75 1 1 1 1 скрыт 2019-03-31 23:12:38

Базы данных: страничный вывод

В некоторых фреймворках страничный вывод может быть большой проблемой. Страничный вывод в Laravel интегрирован с построителем запросов и Eloquent ORM и обеспечивает удобный, простой в использовании вывод результатов БД. Генерируемый HTML-код совместим с CSS-фреймворком Bootstrap.

Основы использования

Страничный вывод выборки из БД

Есть несколько способов разделения данных на страницы. Самый простой — используя метод paginate в конструкторе запросов или в запросе Eloquent. Метод paginate автоматически позаботится о задании верных LIMIT и OFFSET в sql-запросе на основе текущей просматриваемой пользователем страницы. По умолчанию текущая страница определяется по значению аргумента page в HTTP-запросе. Конечно, Laravel и автоматически определяет это значение, и так же автоматически вставляет его в ссылки, генерируемые для страничного вывода.

В этом примере единственный аргумент метода paginate — число элементов на одной странице. Давайте укажем, что мы хотим выводить по 15 элементов на страницу:

 namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Http\Controllers\Controller; class UserController extends Controller < /** * Вывести всех пользователей приложения. * * @return Response */ public function index() < $users = DB::table('users')->paginate(15); return view('user.index', ['users' => $users]); > > 

На данный момент операции страничного вывода, которые используют оператор groupBy , не могут эффективно выполняться в Laravel. Если вам необходимо использовать groupBy для постраничного набора результатов, рекомендуется делать запрос в БД и создавать экземпляр страничного вывода вручную.

«Простой страничный вывод»

Если вам необходимо вывести для страничного шаблона только ссылки «Далее» и «Назад», вы можете использовать метод simplePaginate для более эффективных запросов. Для больших наборов данных очень полезно, когда вам не надо отображать номер каждой страницы в вашем шаблоне:

$users = DB::table('users')->simplePaginate(15); 

Страничный вывод запросов Eloquent

Можно также делать постраничный вывод запросов Eloquent. В этом примере мы разобьём на страницы модель User по 15 элементов на странице. Как видите, синтаксис практически совпадает со страничным выводом выборки из БД:

$users = App\User::paginate(15); 

Разумеется, вы можете вызвать paginate после задания других условий запроса, таких как where :

$users = User::where('votes', '>', 100)->paginate(15); 

Также вы можете использовать метод simplePaginate моделей Eloquent:

$users = User::where('votes', '>', 100)->simplePaginate(15); 

Создание своего класса страничного вывода

Иногда необходимо создать экземпляр страничного вывода вручную, передав ему массив данных. Это можно сделать создав либо экземпляр Illuminate\Pagination\Paginator , либо экземпляр Illuminate\Pagination\LengthAwarePaginator , в зависимости от ситуации.

Классу Paginator не надо знать общее количество элементов в конечном наборе, и поэтому класс не должен иметь методы для получения индекса последней страницы. LengthAwarePaginator принимает почти те же аргументы, как и Paginator ; однако, ему требуется общее количество элементов в конечном наборе.

Другими словами, Paginator соответствует методу simplePaginate в конструкторе запросов и Eloquent, а LengthAwarePaginator соответствует методу paginate .

При ручном создании класса страничного вывода вы должны вручную «поделить» передаваемый в него массив результатов. Если вы не знаете, как это сделать, используйте PHP-функцию array_slice.

Отображение результатов страничного вывода

При вызове метода paginate , вы получите экземпляр Illuminate\Pagination\LengthAwarePaginator . При вызове метода simplePaginate , вы получите экземпляр Illuminate\Pagination\Paginator . Эти объекты предоставляют несколько методов для вывода конечного набора. В дополнение к этим хелперам экземпляры страничного вывода — итераторы, к ним можно обращаться как к массивам. Итак, когда вы получили результаты, вы можете вывести их и создать ссылки на страницы с помощью Blade:

div class="container"> @foreach ($users as $user) name >> @endforeach div> links() >> 

Метод links выведет ссылки на остальные страницы в конечном наборе. Каждая из этих ссылок уже будет содержать правильную переменную строки запроса page . Помните, сгенерированный методом links HTML-код совместим с CSS-фреймворком Bootstrap.

Настройка URI для вывода ссылок

Метод withPath позволяет настроить URI для вывода ссылок. Например, если вы хотите получить ссылки вида http://example.com/custom/url?page=N , вам надо передать custom/url в метод withPath :

Route::get('users', function () < $users = App\User::paginate(15); $users->withPath('custom/url'); // >); 
Параметры в ссылках

Вы можете добавить параметры запросов к ссылкам страниц с помощью метода appends . Например, чтобы добавить sort=votes к каждой страничной ссылке, вам надо вызвать appends вот так:

appends(['sort' => 'votes'])->links() >> 

Если вы хотите добавить «хэш-фрагмент» в URL-адреса страничного вывода, вы можете использовать метод fragment . Например, чтобы добавить #foo to к каждой страничной ссылке, вам надо вызвать метод fragment :

fragment('foo')->links() >> 

Преобразование результатов в JSON

Классы страничного вывода Laravel реализуют контракт интерфейса Illuminate\Contracts\Support\Jsonable и предоставляют метод toJson , поэтому можно очень легко конвертировать ваш страничный вывод в JSON. Вы также можете преобразовать экземпляр страничного вывода в JSON, вернув его из роута или метода контроллера:

Route::get('users', function () < return App\User::paginate(); >); 

JSON будет включать некоторые «мета-данные», такие как total , current_page , last_page и другие. Данные экземпляра будут доступны через ключ data в массиве JSON. Вот пример JSON, созданного при помощи возврата экземпляра страничного вывода из роута:

< "total": 50, "per_page": 15, "current_page": 1, "last_page": 4, "first_page_url": "http://laravel.app?page=1", "last_page_url": "http://laravel.app?page=4", "next_page_url": "http://laravel.app?page=2", "prev_page_url": null, "path": "http://laravel.app", "from": 1, "to": 15, "data":[ < // Объект вывода >, < // Объект вывода > ] > 

Настройка шаблона страничного вывода

По умолчанию отрисованные шаблона для отображения ссылок страничного вывода совместимы с CSS-фреймворком Bootstrap. Но если вы не используете Bootstrap, вы можете определить свои собственные шаблона для отрисовки этих ссылок. При вызове метода links на экземпляре страничного вывода передайте первым аргументом имя шаблона:

links('view.name') >> // Passing data to the view. links('view.name', ['foo' => 'bar']) >> 

Но самый простой способ изменить шаблоны страничного вывода — экспортировать их в ваш каталог resources/views/vendor с помощью команды vendor:publish :

php artisan vendor:publish --tag=laravel-pagination 

Эта команда поместит шалоны в директорию resources/views/vendor/pagination . Файл default.blade.php в этой директории отвечает за шаблон страничного вывода по-умолчанию. Отредактируйте этот файл, чтобы изменить HTML страничного вывода.

Методы экземпляра страничного вывода

Каждый экземпляр страничного вывода предоставляет дополнительную информацию с помощью этих методов:

  • $results->count()
  • $results->currentPage()
  • $results->firstItem()
  • $results->hasMorePages()
  • $results->lastItem()
  • $results->lastPage() (недоступен при использованииsimplePaginate)
  • $results->nextPageUrl()
  • $results->perPage()
  • $results->previousPageUrl()
  • $results->total() (недоступен при использовании simplePaginate)
  • $results->url($page)
Русскоязычное комьюнити
  • Группа в VK
  • Телеграм LaravelRUS
  • Телеграм Laravel для новичков
  • Телеграм LaravelPro
Обучающие ресурсы
  • Laracasts
  • Codecourse
  • Курс Дмитрия Елисеева
  • Adam Wathan
Блоги разработчиков
  • Laravel News
  • Freek Van der Herten
  • Brent Roose
  • Marcel Pociot

Как получить свободные данные из БД и вывести их

На данном примере рассмотрим создание шаблонного тега вывода 5 последних комментариев и аватара пользователя, добавившего комментарий.

Исходные коды всех шаблонных тегов, не относящихся к какому-либо модулю, находятся в папке themes/functions. Добавим наш файл для шаблонного тега. Назовем его show_last_comments.php:

Теперь, если в одном из шаблонов, расположенных в папке themes, написать шаблонный тег , то на сайте мы увидим надпись «DIAFAN.CMS».

Расширим наш метод, а именно – выберем с помощью SQL-запроса последние 5 активных комментариев, а также имена пользователей, их добавивших.

$rows = DB :: query_fetch_all ( «SELECT u.name, c.text FROM AS c LEFT JOIN AS u ON c.user_id=u.id WHERE c.act=’1′ AND c.trash=’0′ ORDER BY c.id DESC LIMIT 5» );

LEFT JOIN в данном случае используем для того, чтобы выбрать все последние комментарии независимо от того, кто их оставил – авторизованный пользователь или гость. Для не авторизованных пользователей поле user_id таблицы имеет значение 0. Для комментариев, оставленных авторизованным пользователем, это поле соответствует id из таблицы .

Теперь файл примет такой вид:

$rows = DB :: query_fetch_all ( «SELECT u.name, c.text FROM AS c
LEFT JOIN AS u ON c.user_id=u.id WHERE c.act=’1′ AND c.trash=’0′
ORDER BY c.id DESC LIMIT 5″ );
$text = » ;
foreach ( $rows as $row )
$text .= $row [ ‘text’ ]. ‘
‘ ;
>
echo $text ;

Но в таком виде он ничего не выводит. Давайте выведем текст комментариев:

$text = » ;
foreach ( $rows as $row )
$text .= $row [ ‘text’ ]. ‘
‘ ;
>
echo $text ;

Исходный код стал выглядеть так:

$rows = DB :: query_fetch_all ( «SELECT u.name, c.text FROM AS c
LEFT JOIN AS u ON c.user_id=u.id WHERE c.act=’1′ AND c.trash=’0′
ORDER BY c.id DESC LIMIT 5″ );
$text = » ;
foreach ( $rows as $row )
$text .= $row [ ‘text’ ]. ‘
‘ ;
>
echo $text ;

Имея в наличии имена пользователей, вывести их аватары не составит труда. Но перед выводом необходимо проверить, включена ли в настройках системы возможность их добавления:

if ( $this -> diafan -> configmodules ( «avatar» , «users» ))
// .
>

Если возможность есть, и существует изображение аватара, то можно выводить:

if ( $this -> diafan -> configmodules ( «avatar» , «users» ) && file_exists ( ABSOLUTE_PATH . USERFILES . ‘/avatar/’ . $row [ ‘name’ ]. ‘.png’ ))
$avatar = BASE_PATH . USERFILES . ‘/avatar/’ . $row [ ‘name’ ]. ‘.png’ ;
$avatar_width = $this -> diafan -> configmodules ( «avatar_width» , «users» );
$avatar_height = $this -> diafan -> configmodules ( «avatar_height» , «users» );
$text .= ‘. $avatar . ‘» width color: #007700″>. $avatar_width . ‘»
height color: #007700″>. $avatar_height . ‘» alt color: #007700″>. $row [ ‘name’ ]. ‘»>
‘ ;
>

$rows = DB :: query_fetch_all ( «SELECT u.name, c.text FROM AS c
LEFT JOIN AS u ON c.user_id=u.id WHERE c.act=’1′ AND c.trash=’0′
ORDER BY c.id DESC LIMIT 5″ );
$text = » ;
foreach ( $rows as $row )
if ( $this -> diafan -> configmodules ( «avatar» , «users» ) && file_exists ( ABSOLUTE_PATH . USERFILES . ‘/avatar/’ . $row [ ‘name’ ]. ‘.png’ ))
$avatar = BASE_PATH . USERFILES . ‘/avatar/’ . $row [ ‘name’ ]. ‘.png’ ;
$avatar_width = $this -> diafan -> configmodules ( «avatar_width» , «users» );
$avatar_height = $this -> diafan -> configmodules ( «avatar_height» , «users» );
$text .= ‘. $avatar . ‘» width color: #007700″>. $avatar_width . ‘»
height color: #007700″>. $avatar_height . ‘» alt color: #007700″>. $row [ ‘name’ ]. ‘»>
‘ ;
>
$text .= $row [ ‘text’ ]. ‘
‘ ;
>
echo $text ;

В начале файла добавим следующий код для исключения прямого доступа к файлу.

if (! defined ( ‘DIAFAN’ ))
$path = __FILE__ ;
while(! file_exists ( $path . ‘/includes/404.php‘ ))
$parent = dirname ( $path );
if( $parent == $path ) exit;
$path = $parent ;
>
include $path . ‘/includes/404.php‘ ;
>

Получаем итоговый код:

if (! defined ( ‘DIAFAN’ ))
$path = __FILE__ ;
while(! file_exists ( $path . ‘/includes/404.php‘ ))
$parent = dirname ( $path );
if( $parent == $path ) exit;
$path = $parent ;
>
include $path . ‘/includes/404.php‘ ;
>

$rows = DB :: query_fetch_all ( «SELECT u.name, c.text FROM AS c
LEFT JOIN AS u ON c.user_id=u.id WHERE c.act=’1′ AND c.trash=’0′
ORDER BY c.id DESC LIMIT 5″ );
$text = » ;
foreach ( $rows as $row )
if ( $this -> diafan -> configmodules ( «avatar» , «users» ) && file_exists ( ABSOLUTE_PATH . USERFILES . ‘/avatar/’ . $row [ ‘name’ ]. ‘.png’ ))
$avatar = BASE_PATH . USERFILES . ‘/avatar/’ . $row [ ‘name’ ]. ‘.png’ ;
$avatar_width = $this -> diafan -> configmodules ( «avatar_width» , «users» );
$avatar_height = $this -> diafan -> configmodules ( «avatar_height» , «users» );
$text .= ‘. $avatar . ‘» width color: #007700″>. $avatar_width . ‘»
height color: #007700″>. $avatar_height . ‘» alt color: #007700″>. $row [ ‘name’ ]. ‘»>
‘ ;
>
$text .= $row [ ‘text’ ]. ‘
‘ ;
>
echo $text ;

Затем в любом основном шаблоне сайта, например в themes/site.php, функцию можно вызвать в любом месте шаблонным тегом .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *