PHP $_GET['ХЕЛП'] @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 26 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
leo45 Муж.
новый человек
0
Сообщения: 250
Зарегистрирован: 22.12.02
Откуда: Тбилиси, Грузия
Заголовок сообщения: PHP $_GET['ХЕЛП']
Сообщение Добавлено: 20 Февраль 2004, 21:29:29 
Народ, у меня код типа
$order=$_GET['order']
$query="select * from mydb order by $order";

но, если РНР не находит этот order, вообще остановливается :-(
Так. вот как ему объяснить, что если $_GET['order'] пуст, то присвоить $order-у значение по дефолту (на пример id)?

_________________
The truth is out there...
@TSV
постоянный участник
11
Сообщения: 4736
Зарегистрирован: 08.05.03
Сообщение Добавлено: 20 Февраль 2004, 21:38:08 
leo45, вопрос на пять баллов. :laugh: :gent:
$order=$_GET['order']
if (empty($order)) $order = 'id';
$query="select * from mydb order by $order";
leo45 Муж.
новый человек
0
Сообщения: 250
Зарегистрирован: 22.12.02
Откуда: Тбилиси, Грузия
Сообщение Добавлено: 20 Февраль 2004, 21:49:15 
Мдаа,
ответ тоже не-тупой...
Не помогает!

_________________
The truth is out there...
@TSV
постоянный участник
11
Сообщения: 4736
Зарегистрирован: 08.05.03
Сообщение Добавлено: 20 Февраль 2004, 21:55:00 
leo45,
print $query;
что пишет? :laugh: :gent:
leo45 Муж.
новый человек
0
Сообщения: 250
Зарегистрирован: 22.12.02
Откуда: Тбилиси, Грузия
Сообщение Добавлено: 21 Февраль 2004, 15:44:52 
@TSV,
до этого дело не доходит, пишет:


Код:
Notice: Undefined index: order in C:\Inetpub\wwwroot\tel.php on line 12

_________________
The truth is out there...
Exil Муж.
соучастник
0
Сообщения: 396
Зарегистрирован: 17.01.04
Сообщение Добавлено: 21 Февраль 2004, 18:46:56 
точказапятая пропущена в первой строке. извини, но ИМХО сам найти мог.

_________________
Точки зрения ограничены, и поэтому всегда ведут к конфликту. © Джидду Кришнамурти
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 21 Февраль 2004, 19:10:40 

Exil писал(а):
точказапятая пропущена в первой строке. извини, но ИМХО сам найти мог.



Дружище, я вижу ты уже вовсю празднуешь... НА САМОМ ДЕЛЕ проблема в том, что $order=$_GET['order'] вызывает ошибку, когда не задан параметр order. Соответственно:

Код:
if (isset($_GET['order']) && !empty($_GET['order']))
  $order = $_GET['order'];
else
  $order = 'id';


Для извращенцев:

Код:
$order = (isset($_GET['order']) && !empty($_GET['order']))?$_GET['order']:'id';
leo45 Муж.
новый человек
0
Сообщения: 250
Зарегистрирован: 22.12.02
Откуда: Тбилиси, Грузия
Сообщение Добавлено: 21 Февраль 2004, 19:23:56 
Crazy,
thanx!

_________________
The truth is out there...
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 21 Февраль 2004, 20:32:16 
Спасибо говорить рано, ибо делать '$query="select * from mydb order by $order";' все равно нельзя. Хороший вариант -- завести список допустимых полей и проверять не empty, а принадлежность к списку. Т.е. типа такого:

Код:
$validColumns = array('id','title','phone');
if (isset($_GET['order']) && array_search($_GET['order'],$validColumns)!==false)
  $order = $_GET['order'];
else
  $order = 'id';
$query="select * from mydb order by $order";


Причина понятна?

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
leo45 Муж.
новый человек
0
Сообщения: 250
Зарегистрирован: 22.12.02
Откуда: Тбилиси, Грузия
Сообщение Добавлено: 22 Февраль 2004, 15:25:29 
Причина вполне понятна, но возникает такой вопрос:

Зачем проверять $_GET['order'] ведь линк генерит скрипт, написанный мною, а до тех извращенцев,
которые любят изменять значения в аддрес-баре, мне дел нет?!

_________________
The truth is out there...
Acid~Jazz Муж.
соучастник
1
Сообщения: 740
Зарегистрирован: 12.04.03
Откуда: Зеленоград
Сообщение Добавлено: 22 Февраль 2004, 15:41:39 
они тебя похачат через эту дырку :)

_________________
начинающий менеджер . http://acidjazz.photosight.ru/
leo45 Муж.
новый человек
0
Сообщения: 250
Зарегистрирован: 22.12.02
Откуда: Тбилиси, Грузия
Сообщение Добавлено: 22 Февраль 2004, 16:45:33 
А можно по-подробнее (я начинающий)?

_________________
The truth is out there...
Acid~Jazz Муж.
соучастник
1
Сообщения: 740
Зарегистрирован: 12.04.03
Откуда: Зеленоград
Сообщение Добавлено: 22 Февраль 2004, 17:05:56 
ну нельзя тупо вставлять в запрос то, что тебе приходит в параметрах

большинство хакерских методов основано на том, что ленивые программисты не проверяют входящие параметры

_________________
начинающий менеджер . http://acidjazz.photosight.ru/
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 22 Февраль 2004, 19:10:18 

leo45 писал(а):
Зачем проверять $_GET['order'] ведь линк генерит скрипт, написанный мною, а до тех извращенцев,
которые любят изменять значения в аддрес-баре, мне дел нет?!



Чтобы тебе было проще, я дам аналогию твоей позиции: зачем запирать дом, если я никого в гости не приглашал? А до извращенцев, которые ходят в гости без приглашения и выносят ценные вещи, мне дела нет.

Бесспорно, ты имеешь право на такое мнение. И я даже не буду убеждать тебя в неверности твоей позиции. Твоя безопасность -- ни в коем случае не моя проблема. :) Пару раз унесут телевизор и стереосистему -- может и появится дело до безопасности. :)
Exil Муж.
соучастник
0
Сообщения: 396
Зарегистрирован: 17.01.04
Сообщение Добавлено: 22 Февраль 2004, 19:23:01 
кстати, этим страдает половина сайтов типа 3dcenter.ru(подствавив коегде значение можно спокойно гулять по всему серваку и смотреть любый файлы), dlight.ru.. хе.. :)

_________________
Точки зрения ограничены, и поэтому всегда ведут к конфликту. © Джидду Кришнамурти
@TSV
постоянный участник
11
Сообщения: 4736
Зарегистрирован: 08.05.03
Сообщение Добавлено: 23 Февраль 2004, 00:11:52 
Crazy, ИМХО не совсем верно. Конструкции, использующие ассоциативные массивы вроде:
Код:
 a["key1"] = "value1";
a["key2"] = "value2";

a["keyN"] = "valueN";
$value = a[ $param ];
if (empty($value)) $value = $defaultvalue;
return $value;

- это нормально, хорошо, и удобно. Видимо, проблема действительно в другом. ;)
Эта конструкция также вполне применима в данном случае, и вызов isset() - лишний. Проверка параметров, конечно, дело другое, и не является обсуждаемым вопросом. Проверять - НАДО. :)
jettero
новый человек
0
Сообщения: 230
Зарегистрирован: 14.09.03
Сообщение Добавлено: 23 Февраль 2004, 09:13:22 
@TSV, как isset не нужен? Если ты будешь обращаться по несуществующему индексу к массиву, это вызовет ошибку. В данном случае это имя переменной, значение которой не задали в запросе. Предварительная проверка на isset, как раз покажет есть такой индекс или нет.
@TSV
постоянный участник
11
Сообщения: 4736
Зарегистрирован: 08.05.03
Сообщение Добавлено: 23 Февраль 2004, 09:32:28 
jettero, будет, но не всегда. Я имею в виду, что логически конструкция верна, а ошибку генерирует не всякий PHP. Как соберешь. :) И вообще
Код:
function isempty($a)
{
return !isset($a) || empty($a);
}

и можно больше об этом вообще не думать. :glasses:


Последний раз редактировалось @TSV 23 Февраль 2004, 10:51:38, всего редактировалось 1 раз.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 23 Февраль 2004, 10:42:00 
Код:
<?php

function isempty($a)
{
  return !isset(a) || empty(a);
}

$foo = isempty($bar);

?>


Ответ PHP:

Код:
PHP Parse error:  parse error, unexpected T_STRING, expecting T_VARIABLE or '$' in test.php on line 5


Пятая строка: return !isset(a) || empty(a);

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 23 Февраль 2004, 10:43:58 

@TSV писал(а):
Эта конструкция также вполне применима в данном случае, и вызов isset() - лишний.



Еще раз: Undefined index. Это сообщение, с твоей точки зрения, откуда берется?
@TSV
постоянный участник
11
Сообщения: 4736
Зарегистрирован: 08.05.03
Сообщение Добавлено: 23 Февраль 2004, 10:51:55 
Crazy, :dont: Не вредничай. Блоху нашел, понимашь. Там доллары нужно поставить. Уже поставил.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 23 Февраль 2004, 10:59:27 
@TSV, ставлю '$' на место. Ответ PHP:

Код:
PHP Notice:  Undefined variable:  bar in test.php on line 8


Что-то особо легче не стало. :)

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
@TSV
постоянный участник
11
Сообщения: 4736
Зарегистрирован: 08.05.03
Сообщение Добавлено: 23 Февраль 2004, 11:02:12 
Crazy, PHP Notice. А мне - стало. ;)
<sergio.ga>
новый человек
0
Сообщения: 102
Зарегистрирован: 13.06.03
Откуда: Харьков, Украина
Сообщение Добавлено: 23 Февраль 2004, 11:09:37 

Crazy писал(а):

@TSV писал(а):
Эта конструкция также вполне применима в данном случае, и вызов isset() - лишний.



Еще раз: Undefined index. Это сообщение, с твоей точки зрения, откуда берется?



PHP manual писал(а):
boolean empty ( mixed var )
This is the opposite of (boolean) var, except that no warning is generated when the variable is not set


Таки isset лишний.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 23 Февраль 2004, 11:15:03 
<sergio.ga>, все равно еще и trim придется вызывать. А он warning даст по полной программе. :)

Контрольный пример: script.php?order=+++

Хотя, если пользоваться массивом эталонных значений, то действительно без isset обойдемся.

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
@TSV
постоянный участник
11
Сообщения: 4736
Зарегистрирован: 08.05.03
Сообщение Добавлено: 23 Февраль 2004, 11:22:23 
Crazy, конечно, именно про массив эталонных значений речь и идет. Кулхацкер но пасаран. :beer: :laugh: :laugh: :laugh:
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 26 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100