2012-04-25 2 views
1

Мне нужно сделать фото-страницу.Pagination - проверка наличия следующей/предыдущей записи

< < Предыдущие [ФОТО] Следующая >>

Suposs, что текущая страница что-то подобное: www.myWebSite.com/photo.php?id=12

И если я нажимаю Next, то я перенаправлен на www.myWebsite.com/photo.php?id=13, но если фотография с id=13 была исключена из базы данных, что я могу сделать?

Например:

<?php 

require_once '../classes/dataBaseManager/ImageDataBaseManagr.php'; 

if (isset ($_GET ['id'])) { 
    $id = $_GET ['id']; 
    /** 
    * Initialize my data base class. 
    */ 
    try { 
    $dataBase = ImageDataBaseManager::connect(); 
    $select = $dataBase->select(array ('id' => $id); 
    $previous = (int)($select ['id'] - 1); 
    $next = (int)($select ['id'] + 1); 
    $photo = $select ['path']; 
    echo '<a href="http://www.myWebSite.com/photo.php?id='.$previous.'">Previous</a>'; 
    echo '<img src="'.$path.'" />'; 
    echo '<a href="http://www.myWebSite.com/photo.php?id='.$next.'">Previous</a>'; 
    } 
    catch (PDOException $e) { 
    error_log($e->getMessage); 
    return; 
    } 
} 
?> 

Спасибо :)

+0

Я не вижу вашего запроса здесь, но в вашем запросе вы помещаете '... WHERE photo_id> = 13 ORDER BY photo_id LIMIT 12'. Таким образом, он начинается с 13, если он есть, иначе он начинается с самого следующего уровня и захватывает следующие 12 записей. –

+0

Единственный возможный заказ - по убыванию? –

ответ

0

У вас есть текущий идентификатор страницы, и вы хотите, чтобы получить следующий существующий идентификатор. Так построить запрос типа:

SELECT id FROM `table` WHERE `id` > \"$current_id\" ORDER BY `id` ASC LIMIT 1 

Это должно решить вашу проблему.

При поиске предыдущего использования фото этого запроса:

SELECT id FROM `table` WHERE `id` < \"$current_id\" ORDER BY `id` DESC LIMIT 1 

Кроме того, необходимо проверить, является ли mysql_num_rows() больше, чем 0. Если да, то у вас есть следующая запись. Если нет, вы достигли последнего.

+0

Я попробую в минуту, спасибо друг. –

+0

обновленный ответ :-) проблем нет. логика в порядке. – castor

0

Чтобы увидеть максимальное количество фотографий в вашей базе данных и достигнуть максимума, не нужно указывать ссылку next. Кроме того, вы не должны делать разбивку на страницы с идентификатором фотографии. Проверьте параметр LIMIT для MySQL.

1

По-моему, это недостаток реализации. Я буду рекомендовать следующие строки запроса (для следующего)

photo.php?currentid=1&action=next 

Таким образом, ваш выбор звонок станет то, как упомянуто касторового

0

Это зависит от того, как работает ваш сайт. Вы хотите, чтобы люди знали, что изображение было удалено? Или тихо пропустить его? Если вы хотите пропустить его, просто измените свой запрос, чтобы получить либо запрошенный идентификатор, либо следующий самый высокий. В самом деле, если вы передаете направление в качестве переменной, а также, вы можете сохранить этот один запрос:

Предположим, вы просили ?ID=13&next, делая это наш запрос:

SELECT foo, bar FROM images WHERE id >= 13 ORDER BY id ASC LIMIT 1 

Направление < будет определяться наличие &next или &back в URL:

$direction = isset($_GET['back']) ? '<' : '>' ; 

Мы определение поиска по умолчанию направления вперед к нашему переменному направлению. Если в URL-адресе присутствует &back, мы будем уважать это и отменить направление запроса. В противном случае мы всегда будем смотреть на изображение, равное или превышающее запрошенный идентификатор.

И как всегда, проверьте возвращаемое значение mysql_num_rows() на наличие данных в вашем результате. Если ваш запрос искал следующее изображение, но ничего не нашел, вы хотели бы сообщить пользователю, что они находятся в конце/начале галереи.

Смежные вопросы