Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2009, 21:11   #1
AgentVlad
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 34
По умолчанию Как бороться со адресной строкой браузера?

Народ, вот такая вот проблема.

Суть в том, что у меня есть строка - например:
Цитата:
мой сайт/others.php?type=type12&car=type4&pa ges=100
Если в неё добавить или убрать какие-то из головы символы, то на сайте появятся ошибки в майэскьюэл, в запросах и т.д.

Как это можно избежать?
AgentVlad вне форума Ответить с цитированием
Старый 15.01.2009, 21:40   #2
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

понизить уровень отображения ошибок

доработать скрипт others.php добавив условия на правильность выполнения запросов и прочего и отладочные сообщения

обрабаоывать входящие значения в массивах get и post для обеспечения правильности формата введенных данных

изменить вид адресной строки с помошью чпу (mod_rewrite) - всеравно придется добавлять скриптам устойчивости

изучить пхп и получить образование чтоб не задавать таких вопросов
свободен...
wall66 вне форума Ответить с цитированием
Старый 16.01.2009, 00:19   #3
AgentVlad
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 34
По умолчанию

//пожалуйста, не надо переходить на личности! Модератор.
Вопрос остается в силе для тех, кто готов помочь:
Поясню немного: запрос посылается не формой, а прямой ссылкой.

Цитата:
<a href =" http://мой сайт/others.php?type=type15&pages=100 "> Внедорожник </a>
Запрос определяет 2 переменные $type and $pages
переменная $type может быть от type1 до type16, а $pages только сто.

Может задать какие-то условия, при которых выполняется запрос, то как бы лучше это сделать, не прописывать же для каждого type1, type2... type999 (:

Спасибо, если есть встречный вопрос задавайте.

Последний раз редактировалось SkyM@n; 16.01.2009 в 12:55.
AgentVlad вне форума Ответить с цитированием
Старый 16.01.2009, 11:27   #4
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Возможно это поможет
Код:
if ($_GET['type']==null) $_GET['type']=type1;
if ($_GET['pages']==null) $_GET['pages']=1;
После того как Вы нагло обращаетесь на ТЫ к незнакомым людям, помогать Вам не будут, да и модератор удалит Ваши истеричные оры
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 16.01.2009, 13:36   #5
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Кроме предложений, изложенных в постах выше, советую использовать ф-цию:
PHP код:
function quote_smart($value){
    
// если magic_quotes_gpc включена - используем stripslashes
    
if (get_magic_quotes_gpc()) {
        
$value stripslashes($value);
    }
    
// Если переменная - число, то экранировать её не нужно
    // если нет - то окружем её кавычками, и экранируем
    
if (!is_numeric($value)) {
        
$value "'" mysql_real_escape_string($value) . "'";
    }
    return 
$value;

или рекурсивную обработку запроса:
сама функция:
PHP код:
function sanitize_input(&$request) {
    
$request mysql_real_escape_string(strip_tags($request));
}
так использовать:
array_walk_recursive($_REQUEST'sanitize_input'); 
Цитата:
Сообщение от wall66 Посмотреть сообщение
понизить уровень отображения ошибок
А вот этого делать не советовал бы. Ошибки отображать по максимуму для обеспечения наименьшей возможности срабатывания человеческого фактора. Но с другой стороны третьи лица, воззрев сообщения об ошибке - может воспользоваться ним не на благо вам. Так что ставить error_reporting исключительно для себя и/или на время дебаггинга/девелопинга.

Последний раз редактировалось SkyM@n; 16.01.2009 в 13:40.
SkyM@n вне форума Ответить с цитированием
Старый 16.01.2009, 14:50   #6
AgentVlad
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 34
По умолчанию

Спасибо, что предложили свои варианты, но я видимо плохо объяснил.

Попробую еще раз, мож что придет на ум:

others.php?type=type15&pages=100

"type=" - она имеет только значения type1 до type15
&pages= - только 100

остальные значения - мимо.

Можно ли:

if ($type == 'type1' and $pages == '100') { Делать это! }
else { Ничего не найдено. }

Но как сделать, чтоб не прописывать для каждого type1 - type990

Сделать типо того, только правильно

if ($type == 'type1-type990' and $pages == '100') { Делать это! }
else { Ничего не найдено. }
(словами: если переменная type равна от тайпу1 до тайпу990(т.е. type1,type2...typeN...type990) и pages равна стам, то делать этот запрос, если нет - писать "ничего не найдено")

Понимаю, что туго объяснено, но мож кто поймет...

Последний раз редактировалось SkyM@n; 16.01.2009 в 15:54.
AgentVlad вне форума Ответить с цитированием
Старый 16.01.2009, 16:04   #7
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
if ($type == 'type1-type990' and $pages == '100') { Делать это! }
else { Ничего не найдено. }
(словами: если переменная type равна от тайпу1 до тайпу990(т.е. type1,type2...typeN...type990) и pages равна стам, то делать этот запрос, если нет - писать "ничего не найдено")
так можно
PHP код:
if($pages == 100 and substr($type,0,4)=='type' and  substr($type,3)>=and substr($type,3)<=990){
  
Tdosomething;
}else{
  echo 
'sorry there is no such item';

Стрелок-охотник

Последний раз редактировалось mv28jam; 16.01.2009 в 16:10.
mv28jam вне форума Ответить с цитированием
Старый 16.01.2009, 16:06   #8
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

А чем приведенный вами код не устраивает? Или вы хотите оптимизации?
Вы мне покажите что должно быть вместо этого:
Цитата:
// Делать это!
PHP код:
if ($type == 'type1' and $pages == '100') {
   
//  Делать это!   
}else {
   
// Ничего не найдено.  

Но я таки настаивал на ЧПУ.
Создаете в корне сайта файл:
.htaccess
Код:
  <IfModule mod_rewrite.c>
       RewriteEngine On
       Options +FollowSymLinks

      RewriteRule ^others/([0-9]+)-([0-9]+)\.html$ others.php?type=type$1&page=$2 [L,NC]
  </IfModule>
И после этого заходите не как others.php?type=type1&pages=100, а как /others/1-100.html
SkyM@n вне форума Ответить с цитированием
Старый 16.01.2009, 16:52   #9
QunneD
C++ &amp;amp; PHP &amp;amp; Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

PHP код:
if (isset($type) and isset($pages))
{
   if ((
$type 15 and $pages 99) or ($type and $pages 1))
   {
      echo 
"Такая страница не найдена!";
   }
   else
   {
      
// Что делать...
   
}

Вот если правильно понял, писал в блокноте. На ошибки не проверял, но должно работать.
QunneD вне форума Ответить с цитированием
Старый 16.01.2009, 18:34   #10
bohdan4ik
Рэдиска
Форумчанин
 
Регистрация: 10.09.2008
Сообщений: 250
По умолчанию

Цитата:
Сообщение от SkyM@n Посмотреть сообщение
Так что ставить error_reporting исключительно для себя и/или на время дебаггинга/девелопинга.
С этим я не соглашусь. error_reporting(E_ALL) - ставить всегда, не забыв, при этом, включить логи, а вот вывод ошибок в броузер (display_errors) - только на время разработки приложения (:
З.Ы.: Советую не подавлять ошибки, используя @ (согласен, может немного сократить размер кода, но так же может и безопасности повредить), а отлавливать их "человечным" способом

Последний раз редактировалось bohdan4ik; 16.01.2009 в 18:36.
bohdan4ik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как бороться с аутизмом циклов? Marc Microsoft Office Excel 4 15.12.2008 23:00
Перехват адресной строки браузера Garacio_cain Работа с сетью в Delphi 4 23.10.2008 13:48
Как перехватить/узнать содержимое адресной сроки? s-force Работа с сетью в Delphi 5 27.08.2007 10:39