Написал скриптик для постраничного вывода сообщений в чате но столкнулся с такой проблемой. Сделал по 10 сообщений на странице. Через ORDER BY DESC сделал обратный вывод сообщений чтобы последние были первыми, но при превышении максимального количества сообщений появляется вторая страница и новые сообщения(последние) уходят на вторую страницу. Как мне сделать чтобы новые оставались на первой странице а старые уходили на вторую
ОБСУЖДЕНИЕ
Постраничный вывод
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>';
$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>';
часть кода в котором проблема выше
В место DESC пиши ASC или просто ORDER BY, значение ASC является по умолчанию.
используй LIMIT min, max
тогда сообщения самые первые будут последними. Это не вариант. Есть какой нибудь зеркальный вывод из бд
Вот и я про это думаю но незнаю какие правильные значения подобрать в мин и макс
погоди, что то не так тебя понял
Не стал углубляться в суть вопроса, вот рабочая заготовка вывода + постраничка. Там не сложно думаю переписать на MySqli
и функция
Не стал углубляться в суть вопроса, вот рабочая заготовка вывода + постраничка. Там не сложно думаю переписать на MySqli
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);
}
и функция
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>';
}
}
на mysqli перепишу щас проверим
Блин взялся на свою голову писать на РНР 7.0 и mysqli. Сам не перепишу походу под инкруфт. Первый самый запрос вводит меня в заблуждение
MySql
MySqli
$posts = mysql_result(mysql_query("SELECT COUNT(*) FROM `dospehi_us` WHERE `us` = '".(int)$user['id']."' "), 0);
MySqli
$posts = $mysqli->query("SELECT COUNT(*) FROM `dospehi_us` WHERE `us` = '".(int)$user['id']."'")->fetch_array()[0];
у тебя в таблице 38 записей. допустим нам нужно выбрать с 28 по 38 записи (10 записей). для этого пишем: LIMIT 28, 10;
На каждой странице должны быть разные значения.
элементарно
LIMIT $start, $count
LIMIT $start, $count
да там выше дал же ему уже рабочий пример, запросы только переписать под MySqli
Короче кто даст полностью рабочий скрипт под php 7 плачу WMR
Пример скрипта вначале темы