Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Почему выводится одна строка с БД?

Почему выводится одна строка с БД?


     13.02.2019    Общие вопросы по PHP, MySQL    673

вопрос
Доброго времени суток, господа.
Я новичок в работе с php, поэтому извините за мой глупый вопрос.
PHP версии 5.4. Пытаюсь вывести информацию с БД на главную страницу.
Вписываю в main.php код:
$vquery = $db->query( "SELECT * FROM " . PREFIX . "_video_file ORDER BY user_id ASC LIMIT 0, 10" );
while ( $row = $db->get_row($vquery) ) {

$vquery2 = $db->query( "SELECT name FROM " . PREFIX . "_video_category WHERE id='".$row['user_category']."'" );
while ( $vdrow = $db->get_row($vquery2) ) {
$ytcatnamequery = $vdrow['name'];
}
$vquery2->free ();

$ytquery = $row['info']; //Вытаскиваем с базы данных ссылку на видео
$ytrdatequery = $row['reg_date']; //Вытаскиваем с базы данных дату добавления видео
$ytnamequery = $row['name']; //Вытаскиваем с базы данных название видео
$ytcatquery = $row['user_category']; //Вытаскиваем с базы айди категории
$ytidvideo = $row['user_id']; //Вытаскиваем айди поста с видео

preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $row['info'], $out);
$video_id =  $out[1];
}
$vquery->free ();

$db->free ();


Информацию выводит, но почему-то только одну последнюю добавленную запись. А нужно чтобы 5-10 записей с БД.
Заранее благодарен за вашу помощь и уделённое время моей проблеме)

17 комментариев

LazyDev
PHP-developer

LazyDev - 13 февраля 2019 20:47 -

$videoQuery = $db->query("SELECT f.*, c.name as cat_name FROM " . PREFIX . "_video_file f LEFT JOIN " . PREFIX . "_video_category c ON(c.id=f.user_category) ORDER BY user_id ASC LIMIT 0, 10");
while ($row = $db->get_row($videoQuery)) {
    preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $row['info'], $out);
    $VideoId = $out[1];

    echo 'ID видео: ' . $VideoId;
    echo '<br>Ссылка на видео: ' . $row['info'];
    echo '<br>ID поста с видео: ' . $row['user_id'];
    echo '<br>Дата добавления видео: ' . $row['reg_date'];
    echo '<br>Название видео: ' . $row['name'];
    echo '<br>Название категории: ' . $row['cat_name'];
    echo '<br>ID категории: ' . $row['user_category'];
}
$db->free($videoQuery);


На кофе: R118095764291

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

imayday
Юзер

imayday - 13 февраля 2019 22:37 -

Спасибо, конечно. Но так как это в файле main.php и я хочу выводить информацию на главной странице я сделал так исходя с вашего кода:
$videoQuery = $db->query("SELECT f.*, c.name as cat_name FROM " . PREFIX . "_video_file f LEFT JOIN " . PREFIX . "_video_category c ON(c.id=f.user_category) ORDER BY user_id ASC LIMIT 0, 10");
while ($row = $db->get_row($videoQuery)) {
preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $row['info'], $out);
$VideoId = $out[1];

$ytquery = $row['info']; //Вытаскиваем с базы данных ссылку на видео
$ytrdatequery = $row['reg_date']; //Вытаскиваем с базы данных дату добавления видео
$ytnamequery = $row['name']; //Вытаскиваем с базы данных название видео
$ytcatquery = $row['user_category']; //Вытаскиваем с базы айди категории
$ytcatnamequery = $row['cat_name']; // Название категории
$ytidvideo = $row['user_id']; //Вытаскиваем айди поста с видео
}

$db->free($videoQuery);

$tpl->set ( '{video-poster}', "//i.ytimg.com/vi/".$VideoId."/hqdefault.jpg" );
$tpl->set ( '{video-player}', "<iframe width='640' height='360' src='https://www.youtube.com/embed/'.$VdeoId.'' frameborder='0' allow='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture' allowfullscreen></iframe>" );
$tpl->set ( '[video-link]', "<a href='/archiv_video/".$ytidvideo.".html'>" );
$tpl->set ( '[/video-link]', "</a>" );
$tpl->set ( '{video-name}', $ytnamequery );
$tpl->set ( '{video-cat}', $ytcatnamequery );
$tpl->set ( '{video-date}', $ytrdatequery );


дальше кидаю в slider.tpl :
<div class="slide">
	[video-link]
		<img src="{video-poster}" alt="{video-name}">
		<span class="title-bx">{video-name}</span>
		<span class="category-bx">{video-cat}</span>
		<span class="date-bx">{video-date}</span>
	[/video-link]
</div>


а в main.tpl : {include file=slider.tpl}

И вроде бы всё хорошо. Однако, это всё равно не помогло. Отображается одна запись

Pringles
Юзер

Pringles - 14 февраля 2019 10:43 -

Открываем engine/main.php, ищем:
$tpl->load_template ( 'main.tpl' );

Ниже вставляем:
function videoLinks($templateFile = '', $limit = 10) 
{
	$db = new db();
	$tpl = new dle_template();
	$tpl->dir = TEMPLATE_DIR;

	$videoQuery = $db->query("
		SELECT f.*, c.name as cat_name 
		FROM " . PREFIX . "_video_file f 
		LEFT JOIN " . PREFIX . "_video_category c 
		ON (c.id=f.user_category) 
		ORDER BY user_id ASC 
		LIMIT 0, $limit
	");

	$tpl->load_template($templateFile ?: 'video_link.tpl');

	while ($row = $db->get_row($videoQuery)) {
		preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $row['info'], $out);

		$VideoId = $out[1];

		$ytquery = $row['info']; //Вытаскиваем с базы данных ссылку на видео
		$ytrdatequery = $row['reg_date']; //Вытаскиваем с базы данных дату добавления видео
		$ytnamequery = $row['name']; //Вытаскиваем с базы данных название видео
		$ytcatquery = $row['user_category']; //Вытаскиваем с базы айди категории
		$ytcatnamequery = $row['cat_name']; // Название категории
		$ytidvideo = $row['user_id']; //Вытаскиваем айди поста с видео


		$tpl->set ( '{video-poster}', "//i.ytimg.com/vi/".$VideoId."/hqdefault.jpg" );
		$tpl->set ( '{video-player}', "<iframe width='640' height='360' src='https://www.youtube.com/embed/'.$VdeoId.'' frameborder='0' allow='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture' allowfullscreen></iframe>" );
		$tpl->set ( '[video-link]', "<a href='/archiv_video/".$ytidvideo.".html'>" );
		$tpl->set ( '[/video-link]', "</a>" );
		$tpl->set ( '{video-name}', $ytnamequery );
		$tpl->set ( '{video-cat}', $ytcatnamequery );
		$tpl->set ( '{video-date}', $ytrdatequery );

		$tpl->compile('video_links');
	}

	$db->free($videoQuery);
return $tpl->result['video_links'];
}
$videoLinks = videoLinks();
if($videoLinks AND (strpos( $tpl->copy_template, "video-links" ) !== false)) {
	$tpl->set ( '{video-links}', $videoLinks );
	$tpl->set ( '[video-links]', "" );
	$tpl->set ( '[/video-links]', "" );
} else {
	$tpl->set( '{video-links}', "" );
	$tpl->set_block( "'\\[video-links\\](.*?)\\[/video-links\\]'si", "" );
}

Создаем файл: templates/Default/video_link.tpl с содержимым:
[video-link]
		<img src="{video-poster}" alt="{video-name}">
		<span class="title-bx">{video-name}</span>
		<span class="category-bx">{video-cat}</span>
		<span class="date-bx">{video-date}</span>
	[/video-link]

Содержимое файла slider.tpl меняем на:
[video-links]<div class="slide">{video-links}</div>[/video-links]


Вот и все.
Благодарности сюда:
Z226856850554

imayday
Юзер

imayday - 14 февраля 2019 11:15 -

Отлично. Чуть-чуть переделал так как скрипт закреплён за файлом slider.tpl , то есть вместо video_links я прописал slider. и то что в slider.tpl и video_link.tpl я поменял местами содержимое. Заработало.
Сегодня обязательно отблагодарю))

dj-avtosh
PHP-developer

dj-avtosh - 14 февраля 2019 11:58 -

$db = new db();


Это правда сработало?

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Pringles
Юзер

Pringles - 14 февраля 2019 12:09 -

Цитата: dj-avtosh
Это правда сработало?

А с чего вдруг не должно?
Объявить базу можно как глобально так и заново.

dj-avtosh
PHP-developer

dj-avtosh - 14 февраля 2019 12:12 -

а если ресурса нет, то откуда он возьмет данные для коннекта? Я внимательно изучил mysql.php и не нашел объявленных заранее значений $db_user и $db_pass.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

imayday
Юзер

imayday - 14 февраля 2019 12:16 -

Я хоть и новичок, но если я правильно понимаю, main.php подключается в init.php в самом низу
require_once ENGINE_DIR . '/modules/main.php';

в этом же файле вверху подключается и БД и данные для подключения:
require_once ENGINE_DIR . '/classes/mysql.php';
require_once ENGINE_DIR . '/data/dbconfig.php';

Как бы вот от куда данные. Извините, если я сейчас смолол чепуху))

Pringles
Юзер

Pringles - 14 февраля 2019 12:20 -

Да, все верно

Pringles
Юзер

Pringles - 14 февраля 2019 12:20 -

Не встречал еще таких случаев чтобы базу не инклудили при написании своих дополнений. А здесь она уже была вставлена заранее

dj-avtosh
PHP-developer

dj-avtosh - 14 февраля 2019 12:31 -

внутри функции недоступны переменные, которые извне откуда-то. но странно, что работает.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

LazyDev
PHP-developer

LazyDev - 14 февраля 2019 12:35 -

dj-avtosh, так он инициализирует класс, в чем проблема?

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

dj-avtosh
PHP-developer

dj-avtosh - 14 февраля 2019 13:00 -

не понимаю откуда берутся $db_user и прочее, когда new dle_template(); внутри функции.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Pringles
Юзер

Pringles - 14 февраля 2019 13:07 -

Переменные недоступны. А константы ?)

dj-avtosh
PHP-developer

dj-avtosh - 14 февраля 2019 13:08 -

у меня видать дле просто туповатая версия( сорян в любом случае не было предъявой.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Flash
Эксперт

Flash - 14 февраля 2019 13:08 -

Не знаю насчет других версий движка, но в 13.1
	function query($query, $show_error=true) {
		$time_before = $this->get_real_time();

		if(!$this->db_id) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST);


Данные берутся из констант, а конструктора в классе, там и нет.

dj-avtosh
PHP-developer

dj-avtosh - 14 февраля 2019 13:13 -

вижу да, лейзик внизу

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх