Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Постраничная навигация

Сообщения:  [1-10]   [11-13] 

 
 автор: TanTaL91   (04.11.2008 в 22:14)   письмо автору
 
   для: sl1p   (30.10.2008 в 17:13)
 

В чем беда... Все работает на ура (накоец то...)

Но в чем сама беда, что если сообщений меньше половины, то цифра не ставиться.
А нужно что бы если было хоть 1 лишнее сообщение оно выдавало под него отдельную цифру...

<?
$server 
'localhost'// ИМЯ СЕРВЕРА
$user 'root'// ПОЛЬЗОВАТЕЛЬ - НЕ ИСПОЛЬЗУЙТЕ ROOT ДЛЯ ВАШЕЙ ЖЕ БЕЗОПАСНОСТИ
$pass ''// ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ

$db 'primer'// БАЗА ДАННЫХ
$table 'primer'// НАЗВАНИЕ ТАБЛИЦЫ

$chislo 5// ЧИСЛО СООБЩЕНИЙ НА СТРАНИЦЕ


// СОЕДЕНИМСЯ С MySQL
$connect mysql_connect ($server$user$pass);

// СОЕДЕНИЯЕМСЯ С БАЗОЙ ДАННЫХ
$select mysql_select_db($db);


// делаем запрос, сколько всего записей
$result mysql_query("SELECT * from $table ORDER by id_com desc");
if (!
$result) {
echo 
$text_error;
exit;
}
$num_rows mysql_num_rows($result);
// end 


$num_rows round($num_rows/$chislo); // 20 ДЕЛИМ НА $chislo. СКОЛЬКО? :)



// ЗДЕСЬ МЫ ПРОВЕРЯЕМ НА КАКОЙ СТРАНИЦЕ СЕЙЧАС ПОЛЬЗОВАТЕЛЬ 
if (isset($_GET['page'])) {
$nav $_GET['page'];
}
else {
$nav 1;
}
$nav intval($nav); // ДЛЯ ЗАЩИТЫ ОТ НЕХОРОШИХ ДЯДЕНЕК МЫ ВЫДЕЛИМ ЦЕЛУЮ ЧАСТЬ $GET['str']



echo 'Навигация: ';

// выводим саму навигацию
$num_rows++;

for (
$i=1$i<$num_rows$i++)
{
if (
$i != $nav)
{
echo 
"<a href='?page=$i'>$i</a>";
}
else
{
echo 
"<span> $i </span>";
}
}

// end 
echo '<hr />';


if (!isset(
$_GET['page'])) {
$page 0;
}
else { 
$page $_GET['page']*$chislo $chislo;
}

$nomer $page+$chislo;

$res mysql_query("SELECT * from $table ORDER by id_com limit $page$chislo");
if (!
$result) {
echo 
$text_error;
exit;
}

// выводим саму информацию 
while ($row mysql_fetch_array($res)) 
{
$name $row['name'];
$date $row['date'];
$com $row['com'];

echo 
"<table border=0 cellspacing=0 cellpadding=5 width=100%>
<tr bgcolor=#eeeeee><td class=td>
$name ($date)</td></tr>
<tr bgcolor=#d2e8ff><td class=td>
$com</td></tr>
</table> <br>"
;
 
}


?>

  Ответить  
 
 автор: sl1p   (30.10.2008 в 17:13)   письмо автору
 
   для: spider-x   (30.10.2008 в 16:59)
 

а не легче использовать ceil() вместо round()?:D

  Ответить  
 
 автор: spider-x   (30.10.2008 в 17:09)   письмо автору
 
   для: Trianon   (30.10.2008 в 16:45)
 

Да у них ща бум какойто... все начинают глупости творить... в соседнем посте человек считал количество строк следующим способом :

       $query=@mysql_query("SELECT id FROM counter_log");     
            $rows_col=0;             
            while($data=mysql_fetch_array($query, MYSQL_ASSOC)) 
            { 
                $rows_col++; 
            }

Хотя может это я чего-то не понимаю... и это такой писк моды?

Но такие конструкции меня убивают )))

  Ответить  
 
 автор: spider-x   (30.10.2008 в 16:59)   письмо автору
 
   для: TanTaL91   (29.10.2008 в 14:12)
 

и ещё
// А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО 
$num_rows = round($num_rows/$chislo); // 20 ДЕЛИМ НА 5. СКОЛЬКО? :)


замените на

// А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО 
if(round($num_rows/$chislo)==($num_rows/$chislo))
$num_rows = round($num_rows/$chislo); // 20 ДЕЛИМ НА 5. СКОЛЬКО? :) 
else
$num_rows = round($num_rows/$chislo)+1;

ибо раунд округляет в меньшую сторону...

Хотя может вы специально хотите скрывать последние фотки а потом с каждым выкладыванием будут отображаться новые?? O_O

  Ответить  
 
 автор: lorenberg   (30.10.2008 в 16:57)   письмо автору
 
   для: Trianon   (30.10.2008 в 16:43)
 

хахаха

  Ответить  
 
 автор: Trianon   (30.10.2008 в 16:45)   письмо автору
 
   для: spider-x   (30.10.2008 в 16:21)
 

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

Работать со всем рядом значений может и не получиться, если их слишком много. А постраничка подразумевает, что их слишком много.

Есть еще в местном диалекте вариант SQL_CALC_FOUND_ROWS .
Впрочем LIMIT - тоже ж диалект, так что...

  Ответить  
 
 автор: Trianon   (30.10.2008 в 16:43)   письмо автору
 
   для: TanTaL91   (29.10.2008 в 14:12)
 

конструкция LIMIT работает совсем не так, как Вы считаете.
Её вторым аргуметном является число записей ( в Вашем случае - пятерка) , а не то, что Вы написали.

Будете кричать - вообще отвечать не стану .

  Ответить  
 
 автор: spider-x   (30.10.2008 в 16:21)   письмо автору
 
   для: TanTaL91   (29.10.2008 в 14:12)
 

Может быть я не по теме скажу... но зачем в этом скрипте 2 зароса на выборку... сначала считаем количество затронутых строк а потом ещё раз выдераем маленький участок из базы... куда проще бло бы сделать только первый запрос а потом работать с матрицей значений?

Я не прав?

  Ответить  
 
 автор: TanTaL91   (29.10.2008 в 14:12)   письмо автору
 
   для: Trianon   (28.10.2008 в 23:54)
 

Потому что ЛИМИТ!!!

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=--=-=-=-=-=--=-=-=-=-=-=-=-=--=-




<?


$server 
'localhost'// ИМЯ СЕРВЕРА
$user 'root'// ПОЛЬЗОВАТЕЛЬ - НЕ ИСПОЛЬЗУЙТЕ ROOT ДЛЯ ВАШЕЙ ЖЕ БЕЗОПАСНОСТИ
$pass ''// ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ

$db 'primer'// БАЗА ДАННЫХ
$table 'primer'// НАЗВАНИЕ ТАБЛИЦЫ

$chislo 5// ЧИСЛО СООБЩЕНИЙ НА СТРАНИЦЕ

// ДЛЯ УДОБСТВА ОБОЗНАЧИМ ПЕРЕМЕННУЮ С ТЕКСТОМ ОШИБКИ
$text_error '<br />Ошибочка вышла!'

// СОЕДЕНИМСЯ С MySQL
$connect mysql_connect ($server$user$pass);
if (!
$connect) {
echo 
$text_error;
exit;
}

// СОЕДЕНИЯЕМСЯ С БАЗОЙ ДАННЫХ
$select mysql_select_db($db);
if (!
$select) {
echo 
$text_error;
exit;
}


// СОЗДАЁМ ЗАПРОС
$result mysql_query("SELECT * from $table ORDER by id desc");
// СЧИТАЕМ КОЛЛИЧЕСТВО ЗАПИСЕЙ В ТАБЛИЦЕ - У МЕНЯ ИХ 20
$num_rows mysql_num_rows($result);

// А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО
$num_rows round($num_rows/$chislo); // 20 ДЕЛИМ НА 5. СКОЛЬКО? :)


// ЗДЕСЬ МЫ ПРОВЕРЯЕМ НА КАКОЙ СТРАНИЦЕ СЕЙЧАС ПОЛЬЗОВАТЕЛЬ 
if (isset($_GET['str'])) {
$nav $_GET['str'];
}
else {
$nav 0;
}
$nav intval($nav); // ДЛЯ ЗАЩИТЫ ОТ НЕХОРОШИХ ДЯДЕНЕК МЫ ВЫДЕЛИМ ЦЕЛУЮ ЧАСТЬ $GET['str']
echo 'Навигация: '

// А ТЕПЕРЬ ВЫВОДИМ НОМЕРА СТРАНЦ 
for ($i=1$i<$num_rows$i++) {
if (
$i != $nav) {
echo 
'<a href="'.$PHP_SELF.'?str='.$i.'">'.$i.'</a> ';
}
else {
// АКТИВНУЮ СТРАНИЦУ ДЕЛАЕМ НЕ ГИПЕРССЫЛКОЙ
echo '<span>'.$i.'</span> ';
}
}

echo 
'<hr />'// ОТДЕЛИМ НАВИГАЦЮ ОТ КОНТЕНТА ДЛЯ НАГЛЯДНОСТИ

// НАЧИНАЕМ ВЫВОДИТЬ САМУ ИНФОРМАЦИЮ ПОСТРАНИЧНО :)
if (!isset($_GET['str'])) {
$str 0;
}
else { 
$str $_GET['str']*$chislo $chislo;
}
$nomer $str 5;
// ФОРМИРУЕМ ЗАПРОС НУЖНОЙ НАМ ЧАСТИ ИНФОРМАЦИИ 
$result mysql_query("SELECT * from $table ORDER by id asc limit $str$nomer");
// ИНАЧЕ ВЫВОДИМ ОШИБКУ
if (!$result) {
echo 
$text_error;
exit;
}

echo 
'<div style="width: 40%;">';
while (
$row mysql_fetch_array($result)) {
echo 
'<p>'.$row['id'].' - <strong>'.$row['name'].'</strong>
<br />
'
.substr($row['text'],0,100).'.. <a href="text.php?nomer='.$row['id'].'">>></a></p>';
}
echo 
'</div>';

mysql_close($connect);

?>


Почему он лимит не учитывает???

$result = mysql_query("SELECT * from $table ORDER by id asc limit $str, $nomer");

Он его просто ингнорирует... Кто-нибудь подключите его к базе попробуйте... Пожалуйста

  Ответить  
 
 автор: Trianon   (28.10.2008 в 23:54)   письмо автору
 
   для: TanTaL91   (28.10.2008 в 23:00)
 

$nomer = $str + 5;

почему?

  Ответить  

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования