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 :: Замена переменных в url

 PHP.SU

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


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

> Без описания
Dezmonds
Отправлено: 20 Мая, 2011 - 11:59:34
Post Id



Новичок


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


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




Многоуважаемые, помогите разобраться... абсолютно не знаю как это называется и как с этим бороться...

есть ссылка
PHP:
скопировать код в буфер обмена
  1. <a href='./articles-item.php?id=%s&table=recipes_japan'>

В url Допустим следующее. articles-item.php?id=1&table=recipes_japan
в articles-item.php

PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['table'])) {$table = $_GET['table'];}
  2. if (!isset($table)){$table = "news_japan";}
  3.  
  4. $id_result = mysql_query("SELECT id FROM $table",$db);


Логика такая, что если есть переменная table тогда вытаскиваем данные с таблицы которая указана в url. Проблема в следующем, как реализовать, чтобы если пользователь ввел неверное значение допустим просто изменил url(пусть будет случайно) и вместо articles-item.php?id=1&table=recipes_japan написал articles-item.php?id=1&table=recipes_japans Если будет ошибка в url тогда и в articles-item.php будет ошибка. Mysql будет выдавать ошибку чтения базы.. Помогите разобраться пожалуйста


-----
Колян! Я надыбал макароны!
 
 Top
EuGen Администратор
Отправлено: 20 Мая, 2011 - 12:02:05
Post Id


Профессионал


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


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




Сделайте обработку приходящих от пользователя данных. Например, создайте массив допустимых значений и проверяйте по нему. Если пользователь предает значение, которого нет в массиве - либо сообщать об ошибке, либо брать значение по-умолчанию.
Пример такой:
PHP:
скопировать код в буфер обмена
  1.  
  2. //имена таблиц заменить на свои
  3. $rgTables=array('table0', 'table1');
  4. $sDefault='table0';
  5. $sTable=(isset($_GET['table'])&&in_array($_GET['table'], $rgTables))?$_GET['table']:$sDefault;
  6. //далее Ваши запросы с использованием в качестве имени таблицы уже $sTable
  7.  


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Viper
Отправлено: 20 Мая, 2011 - 12:19:35
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




Все же проверка входных данных тут уместнее чем замена.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Dezmonds
Отправлено: 20 Мая, 2011 - 12:22:54
Post Id



Новичок


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


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




Спасибо большое, смысл понятен, только почему то если скажем пользователь напишет вместо
PHP:
скопировать код в буфер обмена
  1. http://.../articles-item.php?id=1&table=recipes_japan

http://.../articles-item.php?id=1&table= Тогда выдает ошибку чтения БД, Недовольство, огорчение

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include("admin/db.php");
  3. if (isset($_GET['table'])) {$table = $_GET['table'];}
  4. if (!isset($table)){$table = "news_japan";}
  5.  
  6. $id_result = mysql_query("SELECT id FROM $table",$db);
  7.  
  8. //имена таблиц заменить на свои
  9. $rgTables=array('news_japan', 'articles_japan', 'blogs_users', 'recipes_japan', 'recipes_world');
  10. $sDefault='news_japan';
  11. $table=(isset($_GET['table'])&&in_array($_GET['table'], $rgTables))?$_GET['table']:$sDefault;
  12. //далее Ваши запросы с использованием в качестве имени таблицы уже $sTable
  13.  
  14. if (!$id_result)
  15. {
  16.         echo "<p> Запрос на выборку данных из базы не прошел.Пожалуйста сообщение администратору: ";
  17.         exit(mysql_error());
  18. }
  19. if (mysql_num_rows($id_result) > 0)
  20. {
  21. $id_myrow = mysql_fetch_array($id_result);
  22. }
  23. else {echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.Пожалуйста сообщение администратору: </p>";
  24. exit();}
  25.  
  26. if (isset($_GET['id'])) {$id = $_GET['id'];}
  27. if (!isset($id)){$id = $id_myrow['id'];}
  28.  
  29.  
  30.  
  31. if (isset($_GET['page_name'])) {$page_name = $_GET['page_name'];}
  32. if (!isset($page_name)){$page_name = "Новости Японии";}
  33.  
  34.  
  35. $result = mysql_query("SELECT * FROM $table where id = '$id'",$db);
  36.  
  37. if (!$result)
  38. {
  39.         echo "<p> Запрос на выборку данных из базы не прошел.Пожалуйста сообщение администратору: ";
  40.         exit(mysql_error());
  41. }
  42. if (mysql_num_rows($result) > 0)
  43. {
  44. $myrow = mysql_fetch_array($result);
  45.  
  46. $new_view = $myrow["view"] + 1;
  47. $update_view = mysql_query("UPDATE $table SET view = '$new_view' WHERE id = '$id'",$db);
  48.  
  49.  
  50. }
  51. else
  52. {
  53.         echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.Пожалуйста сообщение администратору: </p>";
  54.         exit();
  55. }
  56.  
  57.  
  58. ?>
  59.  
  60.  
  61.  
  62.  

(Отредактировано автором: 20 Мая, 2011 - 12:24:17)



-----
Колян! Я надыбал макароны!
 
 Top
EuGen Администратор
Отправлено: 20 Мая, 2011 - 12:25:17
Post Id


Профессионал


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


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




Потому что проверку имени таблицы нужно помещать до запроса, в этом её смысл.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Dezmonds
Отправлено: 20 Мая, 2011 - 12:28:01
Post Id



Новичок


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


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




EuGen Cпасибо большое Вам!!!! Что то я устал Улыбка такую глупость сморозил Улыбка) Спасибо!
(Добавление)
Еще один вопрос. Почему все отлично работает если я захожу с url
/articles-item.php?id=10&table=news_japan (спокойно меняю значение table и все ок)
А вот если захожу допустим с
articles-item.php?id=1&table=articles_japan
и пробую меня значение, тогда выдает опять же ошибку чтения бд (А ТОЧНЕЕ! Выдает ошибку : якобы в таблице нет записей!)

Вообще очень странно! Помогите разобраться. есть таблички "news_japan", "articles_japan", "blogs_users", "recipes_japan", "recipes_world"

с
articles-item.php?id=10&table=news_japan
articles-item.php?id=7&table=recipes_world
articles-item.php?id=7&table=blogs_users



все работает. в плане сам массив.
А почему, то с articles_japan и recipes_japan не работает. Например перехожу на страничку articles-item.php?id=7&table=recipes_japan пишет ошибку. Хотя табличка есть и записи в ней тоже.

(Отредактировано автором: 20 Мая, 2011 - 13:13:08)



-----
Колян! Я надыбал макароны!
 
 Top
Alex_pac
Отправлено: 20 Мая, 2011 - 15:15:56
Post Id



Новичок


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


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




 
 Top
EuGen Администратор
Отправлено: 20 Мая, 2011 - 15:18:26
Post Id


Профессионал


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


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




Dezmonds пишет:
Хотя табличка есть и записи в ней тоже.

Но, быть может, в ней нет поля id ?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Dezmonds
Отправлено: 20 Мая, 2011 - 15:41:46
Post Id



Новичок


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


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




проблема в том, что поле есть...
(Добавление)
Alex_pac пишет:
жесть какая.
любой хакер сможет Ниндзя получить доступ к вашей базе через sql инъекции

Подскажите как сделать иначе ? более правильнее


-----
Колян! Я надыбал макароны!
 
 Top
EuGen Администратор
Отправлено: 20 Мая, 2011 - 15:56:31
Post Id


Профессионал


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


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




Почитайте лучше вот http://phpfaq[dot]ru/debug


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Dezmonds
Отправлено: 20 Мая, 2011 - 17:09:14
Post Id



Новичок


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


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




Почитал, попробовал. ничего из этого не вынес для данной ситуации..

Есть база, есть 5 таблиц, в которых есть поля. В чем проблема я так и не понял. почему 3 поля работаю, а 2 нет... не знаю Недовольство, огорчение


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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB