ФорумПрограммированиеPHP для идиотов → Расстраничить гостевую книгу

Расстраничить гостевую книгу

  • bowser499

    Сообщения: 15 Репутация: N Группа: Кто попало

    Spritz 4 июля 2010 г. 19:27

    У меня есть такой скрипт вывода сообщений гостевой:
    <?php
    	$c=0;
    	$r=mysql_query ("SELECT * FROM gb ORDER BY dt DESC"); // выбор всех записей из БД, отсортированных так, что самая последняя отправленная запись будет всегда первой.
    	while ($row=mysql_fetch_array($r))  // для каждой записи организуем вывод.
    	{
    		if ($c%2)
    			$col="bgcolor='#25383C'";	// цвет для четных записей
    		else
    			$col="bgcolor='#747170'";	// цвет для нечетных записей
    			
    			?>
    			<table border="0" cellspacing="3" cellpadding="0" width="90%" <? echo $col; ?> style="margin: 10px 0px;">
    			<tr>
    				<td width="150" style="color: #FFF8C6;">Имя пользователя:</td>
    				<td><?php echo $row['username']; ?></td>
    			</tr>
    			<tr>
    				<td width="150" style="color: #FFF8C6;">Дата опубликования:</td>
    				<td><?php echo $row['dt']; ?></td>
    			</tr>	
    			<tr>
    				<td colspan="2" style="color: #FFF8C6;">—————————————————————</td>
    			</tr>		
    			<tr>
    				<td colspan="2">
    					<?php echo $row['msg']; ?>
    					<br>
    				</td>
    			</tr>
    			
    			</table>
    			<?php
    		$c++;
    	}
    	
    	if ($c==0) // если ни одной записи не встретилось
    		echo "Вы - первый, кто оставляет сообщение в этой гостевой книге.<br>";
    	
    
    ?>

    Как добавить разграничение постранично? (по 10 записей на страницу, скажем)
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 4 июля 2010 г. 19:28, спустя 53 секунды

    в статьях посмотри
    все умрут, а я изумруд
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 4 июля 2010 г. 19:30, спустя 2 минуты 29 секунд

  • bowser499

    Сообщения: 15 Репутация: N Группа: Кто попало

    Spritz 4 июля 2010 г. 19:49, спустя 18 минут 12 секунд

    Прочитал, вроде бы, всё сделал. Но вот мне теперь написало:
    Table '35693.table' doesn't exist
    Где такое прописало? У меня в той БД таблица gb есть и всё.
    Вот код:
    <?php
            $nums = 10;
    
    if (isset($_GET['page'])) {
        $page = intval($_GET['page']);
    }
    else {
        $page = 1;
    }
    
    $query = "SELECT COUNT(*) AS `counter`
                FROM `table`";
    $sql = mysql_query($query) or die(mysql_error());
    $row = mysql_fetch_assoc($sql);
    
    $elements = $row['counter'];
    
    $pages = ceil($elements/$nums);
    
    
    if ($page < 1) {
        $page = 1;
    }
    elseif ($page > $pages) {
        $page = $pages;
    }
    
    
    $start = ($page-1)*$nums;
    
    // когда у нас в таблице нет записей
    if ($start < 0) $start = 0;
    
    $query = "SELECT *
                FROM `table`
                LIMIT {$start}, {$nums}";
    $sql = mysql_query($query) or die(mysql_error());
    
    while ($row = mysql_fetch_assoc($sql)) {
        	$c=0;
    	$r=mysql_query ("SELECT * FROM gb ORDER BY dt DESC"); // выбор всех записей из БД, отсортированных так, что самая последняя отправленная запись будет всегда первой.
    	while ($row=mysql_fetch_array($r))  // для каждой записи организуем вывод.
    	{
    		if ($c%2)
    			$col="bgcolor='#25383C'";	// цвет для четных записей
    		else
    			$col="bgcolor='#747170'";	// цвет для нечетных записей
    			
    			?>
    			<table border="0" cellspacing="3" cellpadding="0" width="90%" <? echo $col; ?> style="margin: 10px 0px;">
    			<tr>
    				<td width="150" style="color: #FFF8C6;">Имя пользователя:</td>
    				<td><?php echo $row['username']; ?></td>
    			</tr>
    			<tr>
    				<td width="150" style="color: #FFF8C6;">Дата опубликования:</td>
    				<td><?php echo $row['dt']; ?></td>
    			</tr>	
    			<tr>
    				<td colspan="2" style="color: #FFF8C6;">—————————————————————</td>
    			</tr>		
    			<tr>
    				<td colspan="2">
    					<?php echo $row['msg']; ?>
    					<br>
    				</td>
    			</tr>
    			
    			</table>
    			<?php
    		$c++;
    	}
    	
    	if ($c==0) // если ни одной записи не встретилось
    		echo "Вы - первый, кто оставляет сообщение в этой гостевой книге.<br>";
    }
    
    
    
    
    // далее нам надо прицепить листалку
    
    $neighbours = 6;
    $left_neighbour = $page - $neighbours;
    if ($left_neighbour < 1) $left_neighbour = 1;
    
    $right_neighbour = $page + $neighbours;
    if ($right_neighbour > $pages) $right_neighbour = $pages;
    
    if ($page > 1) {
        print ' <a href="?page=1">начало</a> … <a href="?page=' . ($page-1) . '">&#8592;сюда</a> ';
    }
    
    for ($i=$left_neighbour; $i<=$right_neighbour; $i++) {
        if ($i != $page) {
            print ' <a href="?page=' . $i . '">' . $i . '</a> ';
        }
        else {
            // выбранная страница
            print ' <b>' . $i . '</b> ';
        }
    }
    
    if ($page < $pages) {
        print ' <a href="?page=' . ($page+1) . '">туда&#8594;</a> … <a href="?page=' . $pages . '">конец</a> ';
    }
    
    
    	
    
    ?>
    Спустя 234 сек.
    Это я поправил, но у меня теперь куча дублей сообщений в гостевой книге…
    Спустя 202 сек.
    Аргх. Теперь порядок вывода постов не тот, какой положено.
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 4 июля 2010 г. 20:12, спустя 23 минуты 21 секунду

    ORDER BY dt DESC перед LIMIT во втором запросе
  • Signum

    Сообщения: 27 Репутация: N Группа: Кто попало

    Spritz 5 июля 2010 г. 12:07, спустя 15 часов 55 минут 14 секунд

    убери запрос query, а в свой $r после DESC добавь LIMIT {$start}, {$nums}

Пожалуйста, авторизуйтесь, чтобы написать комментарий!