Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проверка номера страницы, когда ?page=0 выдает ошибку

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
kappa
Отправлено: 30 Апреля, 2011 - 09:17:03
Post Id



Посетитель


Покинул форум
Сообщений всего: 349
Дата рег-ции: Апр. 2011  


Помог: 3 раз(а)




Вот у меня есть такая проверка в начале скрипта постраничной навигации,
вроде и модуль числа взял и округлил а вот как пишу ?page=0 или ?page=-0 выдает ошибку
на выборку с БД , вот часть кода:
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_GET['page']))
  3. {
  4.   $page = abs(ceil($_GET['page']))-1; // текущая страница
  5.  
  6. }
  7. else
  8. {
  9.   $page = 0;
  10. }
  11.  
 
 Top
SAD
Отправлено: 30 Апреля, 2011 - 09:20:03
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




какую ошибку? мы не экстарсенсы.
приведите подробный код
 
 Top
kappa
Отправлено: 30 Апреля, 2011 - 09:35:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 349
Дата рег-ции: Апр. 2011  


Помог: 3 раз(а)




Выдает такую ошибку:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in D:\USBWebserver v8_en\root\Site html\pages.php on line 26

А вот весь код полностью:
PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_connect($dblocation,$dbuser,$dbpasswd);  
  3. mysql_select_db($dbname);
  4.  
  5.  
  6. echo "<center>"; //Делаем вывод по центру
  7.  
  8. $link_sc = 'pages.php'; // путь
  9. if (isset($_GET['page']))
  10. {
  11.   $page = abs(ceil($_GET['page']))-1; // текущая страница
  12. }
  13. else
  14. {
  15.   $page = 0;
  16. }
  17.  
  18.  
  19.  
  20. $rpp = 5; //Сколько выводит на страницу
  21. $form = $page * $rpp; //Вычисляем по формуле (Тек. страницу * на количество выводимых строк на страницу) получаем число для запроса к БД
  22.  
  23.  
  24.  
  25. $result = mysql_query("SELECT * FROM pages ORDER BY id  LIMIT $form,$rpp"); //Запрашиваем результат в обратном порядке (начиная со старшего id
  26. while($row= mysql_fetch_row($result))  
  27.     {
  28.     echo "[".$row[0]."] ".$row[1]."<br>";  
  29.     }
  30.  
  31.        
  32. $res = mysql_query("SELECT count(id) FROM pages"); //определяем количество записей в таблице для составления ссылок
  33. $cnt = mysql_fetch_row($res); //общее количество записей во всём выводе
  34.  
  35.  
  36.  
  37.  
  38. $rad=1; // сколько ссылок показывать рядом с номером текущей страницы (2 слева + 2 справа + активная страница = всего 5)
  39.  
  40.  
  41.  
  42. $links=$rad*2+1;
  43. $pages=ceil($cnt[0]/$rpp);
  44. if ($page>0) { echo "<a href=\"$link_sc?page=1\">First</a> | <a href=\"$link_sc?page=".($page)."\">Previous</a> |"; }
  45. $start=$page-$rad;
  46. if ($start>$pages-$links) { $start=$pages-$links; }
  47. if ($start<0) { $start=0; }
  48. $end=$start+$links;
  49. if ($end>$pages) { $end=$pages; }
  50. for ($i=$start; $i<$end; $i++) {
  51.  echo " ";
  52.  
  53.  if ($i==$page) {
  54.   echo "<b>";
  55.  } else {
  56.   echo "<a href=\"$link_sc?page=".($i+1)."\">";
  57.  }
  58. // echo ($i*$rpp+1)."-";
  59. // if ($i!=($pages-1)) { echo $i*$rpp+$rpp; } else { echo $cnt; }
  60.  echo ($i+1);
  61.  if ($i==$page) {
  62.   echo "</b>";
  63.  } else {
  64.   echo "</a>";
  65.  }
  66.  if ($i!=($end-1)) { echo "&nbsp;|"; }
  67. }
  68. if ($pages>$links&&$page<($pages-$rad-1)) { echo " ... <a href=\"$link_sc?page=".($pages)."\">".($pages)."</a>"; }
  69. if ($page<$pages-1) { echo " <a href=\"$link_sc?page=".($page+2)."\">Next</a> | <a href=\"$link_sc?page=".($pages)."\">Last</a>";
  70.  

(Отредактировано автором: 30 Апреля, 2011 - 11:05:38)

 
 Top
vsll
Отправлено: 30 Апреля, 2011 - 10:05:36
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




попробуйте в косые кавычки поля заключить и ...LIMIT ".$form.",".$rpp."')
 
 Top
OrmaJever Модератор
Отправлено: 30 Апреля, 2011 - 10:35:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




выведите mysql_erorr() после запроса и увидите ошибку


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
kappa
Отправлено: 30 Апреля, 2011 - 11:09:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 349
Дата рег-ции: Апр. 2011  


Помог: 3 раз(а)




Vasiliya не помогает

OrmaJever
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-5, 5' at line 1

Получается что при нуле попадает каким то образом -5 вместо 0
 
 Top
vsll
Отправлено: 30 Апреля, 2011 - 11:23:10
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['page'])) {
  2.         if (!empty($_GET['page'])) {
  3.                 $page = abs(ceil($_GET['page']))-1; // текущая страница
  4.         } else {
  5.                       $page = 0;
  6.         }
  7. }
  8.  
 
 Top
Uchkuma
Отправлено: 30 Апреля, 2011 - 11:27:48
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




kappa пишет:
$page = abs(ceil($_GET['page']))-1;

0 - 1 = сколько? правильно, -1
kappa пишет:
$form = $page * $rpp;

-1 * 5 = сколько? правильно, -5.

Чему вы удивляетесь?
 
 Top
Haron
Отправлено: 30 Апреля, 2011 - 11:56:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




Проверяйте данные на ожидаемое значение (В данном случае unsigned int (беззнаковое целое)) ПЕРЕД передачей в MySQL. Не доверяйте тому, что передают на сервер пользователи.

Правильнее всего приводить данные к необходимому виду.

Пример:

PHP:
скопировать код в буфер обмена
  1. function check_page($value)
  2. {
  3.     // Проверяем значение, а число ли это?
  4.     if (filter_var($value, FILTER_VALIDATE_INT))
  5.     {
  6.           // Если число, то выводим (с дополнительным приведением к unsigned если оно отрицательно)
  7.           return abs($value);
  8.     }
  9.     else
  10.     {
  11.           // Здесь я вывел 1, (Если это было не число, то отправим на первую страницу)
  12.           return 1;
  13.     }
  14. }


Такде добавлю...
ТВЁРДО помните:
- НИКОГДА не доверяйте тому что вводят пользователи, что они отправляют на сервер. ВСЕ кто не следовал этому правилу - БЫЛИ УНИЧТОЖЕНЫ.

(Отредактировано автором: 30 Апреля, 2011 - 12:03:27)



-----
И чё?
 
 Top
OrmaJever Модератор
Отправлено: 30 Апреля, 2011 - 12:16:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Да просто вначале скрипта добавить условие
PHP:
скопировать код в буфер обмена
  1. $page = (isset($_GET['page']) ? abs((int)$_GET['page']) : 1;


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Haron
Отправлено: 30 Апреля, 2011 - 12:22:54
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




OrmaJever пишет:
Да просто вначале скрипта добавить условие
PHP:
скопировать код в буфер обмена
  1. $page = (isset($_GET['page']) ? abs((int)$_GET['page']) : 1;


При ?page=<>'`'` или типа того - вернёт ноль Улыбка.


-----
И чё?
 
 Top
OrmaJever Модератор
Отправлено: 30 Апреля, 2011 - 12:30:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




ок
PHP:
скопировать код в буфер обмена
  1. $page = (isset($_GET['page']) && (int)$_GET['page'] > 0) ? (int)$_GET['page'] : 1;

(Отредактировано автором: 30 Апреля, 2011 - 12:30:51)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
vsll
Отправлено: 30 Апреля, 2011 - 12:34:13
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




А так?
PHP:
скопировать код в буфер обмена
  1. $page = (isset($_GET['page']) && isnum($_GET['page']) && !empty($_GET['page'])) ? $_GET['page'] : 1;
  2. function isnum($value) {
  3.         if (!is_array($value)) {
  4.                 return (preg_match("/^[0-9]+$/", $value));
  5.         } else {
  6.                 return false;
  7.         }
  8. }

(Отредактировано автором: 30 Апреля, 2011 - 12:39:17)

 
 Top
Haron
Отправлено: 30 Апреля, 2011 - 12:49:48
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




Vasiliya пишет:
...preg_match...

О-о-о...

Тогда уж можно и так...:
PHP:
скопировать код в буфер обмена
  1.  
  2. while($i < 100500)
  3. {
  4.         $array[] = $i;
  5.         $i++;
  6. }
  7.  
  8. if(isset($_GET('page')))
  9. {
  10.         if(array_search($_GET['page'], $array))
  11.         {
  12.                 return array_search($_GET['page'], $array);
  13.         }
  14.         else
  15.         {
  16.                         return 1;
  17.         }
  18. }
  19. else
  20. {
  21.         return 1;
  22. }


-----
И чё?
 
 Top
kappa
Отправлено: 30 Апреля, 2011 - 12:53:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 349
Дата рег-ции: Апр. 2011  


Помог: 3 раз(а)




Большое спасибо всем за помощь, я нашел самое оптимальное решение (или может мне так кажется)
PHP:
скопировать код в буфер обмена
  1. function check_page($value)
  2. {
  3.     // Проверяем значение, а число ли это?
  4.     if (filter_var($value, FILTER_VALIDATE_INT))
  5.     {
  6.           // Если число, то выводим (с дополнительным приведением к unsigned если оно отрицательно)
  7.           return abs($value);
  8.     }
  9.     else
  10.     {
  11.           // Здесь я вывел 1, (Если это было не число, то отправим на первую страницу)
  12.           return 1;
  13.     }
  14. }
  15.  
  16. if (isset($_GET['page'])){
  17. $page = check_page($_GET['page'])-1; // текущая страница
  18. }
  19. else
  20. {
  21.   $page = 0;
  22. }  
  23.  


Фильтрует и отрицательные и дробные числа и при вводе ?page= или ?pae=
выводит первую страницу.,
p.s. много интересных решений для себя увидел Подмигивание

(Отредактировано автором: 30 Апреля, 2011 - 13:27:15)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB