|
Страница 1 из 1 [ Сообщений: 26 ] |
Автор |
Сообщение |
leo45
новый человек
|
|
Народ, у меня код типа
$order=$_GET['order']
$query="select * from mydb order by $order";
но, если РНР не находит этот order, вообще остановливается
Так. вот как ему объяснить, что если $_GET['order'] пуст, то присвоить $order-у значение по дефолту (на пример id)?
_________________ The truth is out there...
|
|
 |
|
 |
@TSV
постоянный участник
|
|
leo45, вопрос на пять баллов.
$order=$_GET['order']
if (empty($order)) $order = 'id';
$query="select * from mydb order by $order";
|
|
 |
|
 |
leo45
новый человек
|
|
Мдаа,
ответ тоже не-тупой...
Не помогает!
_________________ The truth is out there...
|
|
 |
|
 |
@TSV
постоянный участник
|
|
leo45,
print $query;
что пишет? 
|
|
 |
|
 |
leo45
новый человек
|
|
@TSV,
до этого дело не доходит, пишет:
Код: Notice: Undefined index: order in C:\Inetpub\wwwroot\tel.php on line 12
_________________ The truth is out there...
|
|
 |
|
 |
Exil
соучастник
|
|
точказапятая пропущена в первой строке. извини, но ИМХО сам найти мог.
_________________ Точки зрения ограничены, и поэтому всегда ведут к конфликту. © Джидду Кришнамурти
|
|
 |
|
 |
Crazy
Модератор
|
|
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
новый человек
|
|
Crazy,
thanx!
_________________ The truth is out there...
|
|
 |
|
 |
Crazy
Модератор
|
|
Спасибо говорить рано, ибо делать '$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
новый человек
|
|
Причина вполне понятна, но возникает такой вопрос:
Зачем проверять $_GET['order'] ведь линк генерит скрипт, написанный мною, а до тех извращенцев,
которые любят изменять значения в аддрес-баре, мне дел нет?!
_________________ The truth is out there...
|
|
 |
|
 |
leo45
новый человек
|
|
А можно по-подробнее (я начинающий)?
_________________ The truth is out there...
|
|
 |
|
 |
Crazy
Модератор
|
|
leo45 писал(а): | Зачем проверять $_GET['order'] ведь линк генерит скрипт, написанный мною, а до тех извращенцев, которые любят изменять значения в аддрес-баре, мне дел нет?! |
Чтобы тебе было проще, я дам аналогию твоей позиции: зачем запирать дом, если я никого в гости не приглашал? А до извращенцев, которые ходят в гости без приглашения и выносят ценные вещи, мне дела нет.
Бесспорно, ты имеешь право на такое мнение. И я даже не буду убеждать тебя в неверности твоей позиции. Твоя безопасность -- ни в коем случае не моя проблема.  Пару раз унесут телевизор и стереосистему -- может и появится дело до безопасности. 
|
|
 |
|
 |
@TSV
постоянный участник
|
|
Crazy, ИМХО не совсем верно. Конструкции, использующие ассоциативные массивы вроде:
Код: a["key1"] = "value1"; a["key2"] = "value2"; … a["keyN"] = "valueN"; $value = a[ $param ]; if (empty($value)) $value = $defaultvalue; return $value;
- это нормально, хорошо, и удобно. Видимо, проблема действительно в другом.
Эта конструкция также вполне применима в данном случае, и вызов isset() - лишний. Проверка параметров, конечно, дело другое, и не является обсуждаемым вопросом. Проверять - НАДО. 
|
|
 |
|
 |
jettero
новый человек
|
|
@TSV, как isset не нужен? Если ты будешь обращаться по несуществующему индексу к массиву, это вызовет ошибку. В данном случае это имя переменной, значение которой не задали в запросе. Предварительная проверка на isset, как раз покажет есть такой индекс или нет.
|
|
 |
|
 |
@TSV
постоянный участник
|
|
jettero, будет, но не всегда. Я имею в виду, что логически конструкция верна, а ошибку генерирует не всякий PHP. Как соберешь.  И вообще Код: function isempty($a) { return !isset($a) || empty($a); }
и можно больше об этом вообще не думать. 
Последний раз редактировалось @TSV 23 Февраль 2004, 10:51:38, всего редактировалось 1 раз.
|
|
 |
|
 |
Crazy
Модератор
|
|
Код: <?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
Модератор
|
|
@TSV писал(а): | Эта конструкция также вполне применима в данном случае, и вызов isset() - лишний. |
Еще раз: Undefined index. Это сообщение, с твоей точки зрения, откуда берется?
|
|
 |
|
 |
@TSV
постоянный участник
|
|
Crazy,  Не вредничай. Блоху нашел, понимашь. Там доллары нужно поставить. Уже поставил.
|
|
 |
|
 |
Crazy
Модератор
|
|
@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
постоянный участник
|
|
Crazy, PHP Notice. А мне - стало. 
|
|
 |
|
 |
<sergio.ga>
новый человек
|
|
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
Модератор
|
|
<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
постоянный участник
|
|
|
 |
|
 |
|
Страница 1 из 1 [ Сообщений: 26 ] |
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
|
|