ОБСУЖДЕНИЕ

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

17 сообщений0 просмотровОткрыта
#1
Написал скриптик для постраничного вывода сообщений в чате но столкнулся с такой проблемой. Сделал по 10 сообщений на странице. Через ORDER BY DESC сделал обратный вывод сообщений чтобы последние были первыми, но при превышении максимального количества сообщений появляется вторая страница и новые сообщения(последние) уходят на вторую страницу. Как мне сделать чтобы новые оставались на первой странице а старые уходили на вторую
#2
if (isset($_POST['soob'])) {
$soob = $_POST['soob'];
if ($_POST['soob'] == ''){
unset($soob);
}
}

function clean($value = "") {
$value = trim($value);
$value = stripslashes($value);
$value = htmlspecialchars($value);
return $value;
}

$soob = clean($soob);


$result1 = $mysqli -> query("SELECT * FROM `users` WHERE `login` = '$login'");
$users = $result1->fetch_assoc();


if (!empty($_POST['soob'])) {
$gorod = $users['gorod'];

$mysqli->query("INSERT INTO `chat` (`gorod`, `message`) VALUES ('$gorod', '$soob')");
}

echo '<form method="post">
<p>Написать сообщение<br></p>
<textarea rows= "7" cols= "30" name="soob"></textarea><br>
<input type= "submit" value= "Написать">
</form>';

$result = $mysqli -> query("SELECT * FROM `chat` ORDER BY `id` DESC");
$max_post = 5;
$num_post = mysqli_num_rows($result);
$num_pages = intval(($num_post - 1) / $max_post) + 1;

for ($i = 1; $i <= $num_pages; $i++ )
echo "<a href='/chat/index.php?page=$i'>$i</a>";

if (isset($_GET['page'])) {
$page = $_GET['page'];
if ($page < 1)
$page = 1;
elseif ($page > $num_post)
$page = $max_post;
} else {
$page = 1;
}

$post = $result->fetch_assoc();

do {
if (($post['id'] > ($page * $max_post - $max_post)) and ($post['id'] <= $page * $max_post)) {
printf("
<div class='text'>
<h4>%s</h4>
<p class='zagolovok'>%s</p>
</div>
",$post['gorod'], $post['message']);
}
}
while($post = $result->fetch_assoc());

include '../style/foot.php';

echo '<div class="line"><a href="/index.php">Назад</a></div></div>';
#3
часть кода в котором проблема выше
#4
В место DESC пиши ASC или просто ORDER BY, значение ASC является по умолчанию.
#5
используй LIMIT min, max
#6
тогда сообщения самые первые будут последними. Это не вариант. Есть какой нибудь зеркальный вывод из бд
#7
Вот и я про это думаю но незнаю какие правильные значения подобрать в мин и макс
#8
погоди, что то не так тебя понял

Не стал углубляться в суть вопроса, вот рабочая заготовка вывода + постраничка. Там не сложно думаю переписать на MySqli

PHP
if(empty($_GET['page'])) $page = 0;
else
$page = (int)$_GET['page'];
$num = 12;
$posts = mysql_result(mysql_query("SELECT COUNT(*) FROM `dospehi_us` WHERE `us` = '".(int)$user['id']."' "), 0);
$total = intval(($posts - 1) / $num) + 1;  
if(empty($page) OR $page < 0) $page = 1;  
if($page > $total) $page = $total;
$start = $page * $num - $num;

$print = mysql_query("SELECT * FROM `dospehi_us` WHERE `whom` = '".(int)$_SESSION['id']."' ORDER BY `id` DESC LIMIT ".$start.",".($num)."");
if (mysql_affected_rows() == 0) 
{
echo 'Нет данных для отображения!<br/>';
}
else
{
while($arr = mysql_fetch_array($print)) 
{

}
page_nav($page,$total,$cssClass="phdr",$dopLink);
}

и функция
PHP
function page_nav($page,$total,$cssClass,$dopLink)
{
if ($page != 1) $pervpage = '<a href= ?'.$dopLink.'page=1><button class="button_navig"><<</button></a>  
   <a href= ?'.$dopLink.'page='. ($page - 1) .'><button class="button_navig"><</button></a>';  
// Проверяем нужны ли стрелки вперед  
if ($page != $total) $nextpage = ' <a href= ?'.$dopLink.'page='. ($page + 1) .'><button class="button_navig">></button></a>  
   <a href= ?'.$dopLink.'page=' .$total. '><button class="button_navig">>></button></a>';  

// Находим две ближайшие станицы с обоих краев, если они есть  
if($page - 2 > 0) $page2left = '<a href= ?'.$dopLink.'page='. ($page - 2) .'><button class="button_navig">'. ($page - 2) .'</button></a>';  
if($page - 1 > 0) $page1left = '<a href= ?'.$dopLink.'page='. ($page - 1) .'><button class="button_navig">'. ($page - 1) .'</button></a>';  
if($page + 2 <= $total) $page2right = '<a href= ?'.$dopLink.'page='. ($page + 2) .'><button class="button_navig">'. ($page + 2) .'</button></a>';  
if($page + 1 <= $total) $page1right = '<a href= ?'.$dopLink.'page='. ($page + 1) .'><button class="button_navig">'. ($page + 1) .'</button></a>'; 

// Вывод меню  
if($total > $num-1)
{
echo '<div class="'.$cssClass.'">  
'.$pervpage.$page2left.$page1left.'<button class="button_navig">'.$page.'</button>'.$page1right.$page2right.$nextpage.'
</div>';  
}
}
#9
на mysqli перепишу щас проверим
#10
Блин взялся на свою голову писать на РНР 7.0 и mysqli. Сам не перепишу походу под инкруфт. Первый самый запрос вводит меня в заблуждение
#11
MySql
PHP
$posts = mysql_result(mysql_query("SELECT COUNT(*) FROM `dospehi_us` WHERE `us` = '".(int)$user['id']."' "), 0);


MySqli
PHP
$posts = $mysqli->query("SELECT COUNT(*) FROM `dospehi_us` WHERE `us` = '".(int)$user['id']."'")->fetch_array()[0];
#12
у тебя в таблице 38 записей. допустим нам нужно выбрать с 28 по 38 записи (10 записей). для этого пишем: LIMIT 28, 10;
#13
На каждой странице должны быть разные значения.
#14
элементарно
LIMIT $start, $count
#15
да там выше дал же ему уже рабочий пример, запросы только переписать под MySqli
#16
Короче кто даст полностью рабочий скрипт под php 7 плачу WMR
#17
Пример скрипта вначале темы