Как получить заголовок и ссылку на предыдущий и следующий пост в php

Я новичок в PHP и учусь, разрабатывая небольшой блог CRUD. Теперь моя задача состоит в том, как получить заголовок и ссылку на предыдущий и следующий пост в блоге после того, как пользователь откроет статью. Это сделано для того, чтобы обеспечить легкий переход к следующему и предыдущему сообщению, не нажимая кнопку «Назад» для выбора следующей статьи.

Изображение ниже объясняет мою запись. введите описание изображения здесь

Я пытался запросить базу данных и использовать > чем id или меньше id для ссылки на следующую и предыдущую статьи, которые не работали.

 <?php
    $previous = "SELECT * FROM posts WHERE `posts`.`id` < $id";
    $next = "SELECT * FROM posts WHERE `posts`.`id` > $id";                      
    echo "<li><a href='{{url('post.php/' . $previous)}}'> Previous</a></li>";
    echo "<li><a href='{{url('post.php/' . $next)}}'> Next</a></li>";
?>    

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

«выше, чем» $currentId приведет ко всем статьям. Я уверен, что вы имеете в виду только ближайшую следующую опубликованную статью.

paskl 18.02.2019 22:54

Точно. Следующий по возрастанию и предыдущий по убыванию

Amasiatu Valentine 18.02.2019 22:56

Поэтому, если вы уверены, что следующий идентификатор всегда является следующим, а предыдущий идентификатор всегда является предыдущим, вы можете вычислить «where id = $thisID-1» для предыдущего и «$thisID+1» для следующего.

paskl 18.02.2019 23:01

Ошибка броска.

Amasiatu Valentine 18.02.2019 23:03

Добавьте ORDER BY, чтобы убедиться, что они в правильном порядке, и LIMIT, чтобы отображать только следующий по величине идентификатор сообщения: "SELECT `id` FROM posts WHERE `id` < $id ORDER BY `id` DESC LIMIT 1";

tshimkus 18.02.2019 23:05

Кроме того, где вы выполняете запрос?

tshimkus 18.02.2019 23:08

Это то, что он отображает Предыдущий 99 ORDER BY posts.id DESC LIMIT 1)}}'> Следующий

Amasiatu Valentine 18.02.2019 23:11

@tshimkus в post.php

Amasiatu Valentine 18.02.2019 23:11

Я имею в виду, как это не показывает ссылку просто как <a href='post.php/"SELECT `id` FROM posts WHERE `id` < {id} ORDER BY `id` DESC LIMIT 1";'> Previous</a>? Разве вам не нужно сначала выполнить запрос SQL, чтобы получить предыдущий идентификатор, а затем ссылку на <a href = "post.php/123456"> Previous</a>?

tshimkus 18.02.2019 23:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
529
2

Ответы 2

/**
 * Rows per page
 */
$limit = 1;

// Find out how many items are in the table
$total = $db->get_total_count('cat_id', 'category', array('show_home_page' => 1, 'type_id' => 5, 'status' => 1));


// How many pages will there be
$pages = ceil($total / $limit);

// What page are we currently on?
$page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
    'options' => array(
        'default'   => 1,
        'min_range' => 1,
    ),
)));

// Calculate the offset for the query
$offset = ($page - 1)  * $limit;

// Some information to display to the user
$start = $offset + 1;
$end = min(($offset + $limit), $total);

// The "back" link
$prevlink = ($page > 1) ? '<a href = "#prev" class = "program_nav" data-id = "'.($page - 1).'" title = "Back"><i class = "fa fa-chevron-left"></i></a>' : '<a href = "#prev" class = "disabled" title = "Back"><i class = "fa fa-chevron-left"></i></a>';

// The "forward" link
$nextlink = ($page < $pages) ? '<a href = "#next" class = "program_nav" data-id = "'.($page + 1).'" title = "Next"><i class = "fa fa-chevron-right"></i></a>' : '<a href = "#next" class = "disabled" title = "Next"><i class = "fa fa-chevron-right"></i></a>';


$total_query = 'SELECT COUNT(cat_id) FROM category WHERE show_home_page = 1 AND type_id = 5 AND status = 1';

$query = 'SELECT c.name, c.url FROM category as c WHERE c.show_home_page = 1 AND c.type_id = 5 AND c.status = 1 ORDER BY c.order ASC';

$programs = $db->get_table_custom($total_query, $query, true, $limit, $page);

Неустранимая ошибка: необработанная ошибка: вызов функции-члена get_total_count() для массива в C:\xampp\htdocs\cms\post.php:133 Трассировка стека: #0 {main} брошено в C:\xampp\htdocs\cms\ post.php в строке 133

Amasiatu Valentine 18.02.2019 23:20

Это то, что я получил

Amasiatu Valentine 18.02.2019 23:20

Это образец. Вам нужно адаптироваться к вашему собственному проекту.

Onur KAYA 18.02.2019 23:23

Дамп кода без объяснений не совсем полезен для ответа. Можете ли вы объяснить, как это отвечает на вопрос?

tshimkus 18.02.2019 23:25
#current blog post

$blog_id = 5;
$b_query=$conn->prepare("SELECT * FROM blogs WHERE blog_id=:id AND blog_status=:status");
$b_query->execute(array(
    'id' => $blog_id,
    'status' => 1
));
$b_query_get=$b_query->fetch(PDO::FETCH_ASSOC);

/* We check the existence of such data from the database. */
$single_post_control=$b_query->rowCount();
if ($single_post_control == 0   ){
    echo "error";
    exit;
}

/* next post - previous post*/
$b_pre_nex=$conn->prepare("SELECT * FROM blogs WHERE   blog_id = (SELECT MIN(blog_id)  FROM blogs WHERE blog_id > :pre_nex_id AND blog_status=:pre_nex_status )  OR blog_id = (SELECT MAX(blog_id) FROM blogs WHERE blog_id < :pre_nex_id AND blog_status=:pre_nex_status) ");
$b_pre_nex->execute(array(
    'pre_nex_id' => $blog_id_get,
    'pre_nex_status' => 1
));

$control=$b_pre_nex->rowCount();
if ($control == 0 || $control  > 3  ){
    echo "error";
    exit;
}

/* Here, we are splitting our previous and next posts separately.*/
$prev_post = $b_pre_nex->fetch(PDO::FETCH_ASSOC);
$next_post = NULL;
while ( $rows = $b_pre_nex->fetch(PDO::FETCH_ASSOC) ) {
    $next_post = $rows;
}
if (!isset($next_post)) {
    $next_post = null;
}


echo '<a href = "#" style = "float:left">'.$prev_post['blog_name'].'</a>';

echo '<a href = "#" style = "float:right">'.$next_post['blog_name'].'</a>';

может быть, это может пригодиться.

Другие вопросы по теме