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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Не работает операнд в примере с постраничной навигацией(как заменить?)
 
 автор: dimonich2004   (12.01.2010 в 08:45)   письмо автору
 
 

// Находим общее число страниц  
$total = intval(($posts - 1) / $num) + 1;

Строка из примера вот отседа: http://www.softtime.ru/article/index.php?id_article=33
=-=-=-=-=-=
Этот же операнд используется и в книге когорую преобрёл(PHP практика создания web сайта 2е издание(в отличие от первого только коду больше напихано))

  Ответить  
 
 автор: Петр   (12.01.2010 в 09:07)   письмо автору
 
   для: dimonich2004   (12.01.2010 в 08:45)
 

Может intval возвращает 0?
нужно перед каждой операцией выводить все имеющиеся переменные, чтобы отследить их значения в каждый момент

  Ответить  
 
 автор: dimonich2004   (12.01.2010 в 09:08)   письмо автору
 
   для: Петр   (12.01.2010 в 09:07)
 

ВЫДАЁТ ОШИБКУ:
Fatal error: Unsupported operand types

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 09:08)   письмо автору
 
   для: dimonich2004   (12.01.2010 в 08:45)
 

как-то странно, что intval не работает. Впрочем, я всегда пользуюсь (int). В моем варианте строка выглядела бы так:
// Находим общее число страниц   
$total = (int)(($posts - 1) / $num) + 1;

  Ответить  
 
 автор: dimonich2004   (12.01.2010 в 09:10)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 09:08)
 

Пробывал... на это действие тож есть ответ у IE =)
Parse error: syntax error, unexpected T_VARIABLE

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 09:12)   письмо автору
 
   для: dimonich2004   (12.01.2010 в 09:10)
 

так это ужо другая проблема: переменная не определена. Посмотри, что там с переменными. Сделай echo 'posts='.$posts.' num='. $num;
и посмотри, будет ли там что-то

  Ответить  
 
 автор: dimonich2004   (12.01.2010 в 09:21)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 09:12)
 

Прошу прощения ругаеццо на другую строку:
$page = intval($page);

попробывал написать так:
$page = (int)($page);  

Выдаёт Абшибку:
Parse error: syntax error, unexpected T_VARIABLE

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 09:23)   письмо автору
 
   для: dimonich2004   (12.01.2010 в 09:21)
 

ну а echo 'page='.$page; пробовал?

  Ответить  
 
 автор: dimonich2004   (12.01.2010 в 09:27)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 09:23)
 

posts=Array num=3

  Ответить  
 
 автор: dimonich2004   (12.01.2010 в 09:31)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 09:23)
 

Fatal error: Unsupported operand types in

Вид кода сейчас примерно такой:

$result = mysql_query("SELECT COUNT(*) FROM news");  
$posts = mysql_fetch_row($result);  
echo 'posts='.$posts.' num='. $num;

// Находим общее число страниц  
$total = (int)(($posts - 1) / $num) + 1;
echo 'posts='.$posts.' num='. $num;
// Определяем начало сообщений для текущей страницы  
$page = (int)($page);


ругаеццо: Fatal error: Unsupported operand types
на вот эту строку:
$total = (int)(($posts - 1) / $num) + 1;

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 09:50)   письмо автору
 
   для: dimonich2004   (12.01.2010 в 09:31)
 

ну так, если posts=Array, с какого перепуга он превратится в число? Очевидно, брать нужно $posts[0]

  Ответить  
 
 автор: dimonich2004   (12.01.2010 в 10:00)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 09:50)
 

Благодарю...
ВОТ КУСОЧЕГ КОДА ЕСЛИ У КОГО-ТО ВОЗНИКНЕТ ПРОБЛЕМ С ПРИМЕРОМ ПОСТРАНИЧНОЙ НАВИГАЦИИ С ЭТОГО САЙТА
$posts = mysql_fetch_row($result);  

// Находим общее число страниц  
$total = (int)(($posts[0] - 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы  
$page = (int)($page);  

  Ответить  
 
 автор: Trianon   (12.01.2010 в 10:42)   письмо автору
 
   для: dimonich2004   (12.01.2010 в 10:00)
 

это плохой способ округления вверх.
При пустой таблице $total окажется равно 1 , а это не так.

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 11:12)   письмо автору
 
   для: Trianon   (12.01.2010 в 10:42)
 

$total - количество страниц. Хотябы одна страница должна быть при страничной выборке?
На счет округления, можно $total = ceil(($posts - 1) / $num); или floor, или round. Если имеется в виду это. Но у человека в примере было через воттак... Ну вот, как бы вот так и решили :)

  Ответить  
 
 автор: GeorgeIV   (12.01.2010 в 11:14)   письмо автору
 
   для: Trianon   (12.01.2010 в 10:42)
 

При пустой таблице одна страница все равно должна быть

  Ответить  
 
 автор: Рома   (12.01.2010 в 12:17)   письмо автору
 
   для: GeorgeIV   (12.01.2010 в 11:14)
 

>При пустой таблице одна страница все равно должна быть
при пустой таблице должно выводиться соответствуеще собщение.

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 13:18)   письмо автору
 
   для: Рома   (12.01.2010 в 12:17)
 

разве сообщение мешает быть странице? Или оно на пустом экране обязано выводиться? У меня в такой ситуации пишется (к примеру):
Записей 0, страница 1 из 1.
Это неверный подход?

  Ответить  
 
 автор: Trianon   (12.01.2010 в 13:31)   письмо автору
 
   для: GeorgeIV   (12.01.2010 в 11:14)
 

Не надо подменять понятия.
Страницу, как гипертекстовый документ, никто не отменял.
Странице, как контейнеру элементов постраничной навигации, взяться неоткуда.

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 13:38)   письмо автору
 
   для: Trianon   (12.01.2010 в 13:31)
 

Я не знаю, я не вникал в логику всей программы. Просто помог человеку сделать так, чтобы его строка
$total = (int)(($posts[0] - 1) / $num) + 1;
заработала. Но Рома утверждает, что должно выводиться сообщение. У меня оно и выводится. Думаю, и у человека выведится. Если тут виден подвох, поясните, в чем именно.

  Ответить  
 
 автор: Рома   (12.01.2010 в 14:05)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 13:38)
 

нет никакого подвоха, просто нужно грамотно обрабатывать все возможные ситуации.

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 14:13)   письмо автору
 
   для: Рома   (12.01.2010 в 14:05)
 

И какой способ грамотный?

  Ответить  
 
 автор: Trianon   (12.01.2010 в 14:18)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 13:38)
 

Корректное округление вверх идет по схеме $total = (int)(($posts[0] + $num - 1) / $num);

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 14:29)   письмо автору
 
   для: Trianon   (12.01.2010 в 14:18)
 

между прочим, человек взял код отсюда http://www.softtime.ru/article/index.php?id_article=33 ;)

  Ответить  
 
 автор: Trianon   (12.01.2010 в 16:01)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 14:29)
 

А я-то чем могу помочь. the fact does not create in me a sense of obligation.

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 16:37)   письмо автору
 
   для: Trianon   (12.01.2010 в 16:01)
 

просто обратил внимание, что там код не идиален...

  Ответить  
 
 автор: dimonich2004   (12.01.2010 в 23:31)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 13:38)
 

СПАСИБ второй раз... =)
=======
А по поводу пустого сообщения....
-я просто написал условие при котором если в выборка пуста то меню и не выводиццо... а выводиццо просто сообщение типа (извените нечего не найдено =) )
и нечего Димагогить =) [спасиб всем кто помог разобраццо]

  Ответить  
Rambler's Top100
вверх

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