Я в душе не ебу что ты делаешь не так, но проверять в таком случае надо на массивность для прохода в цикле (а еще лучше один раз и навсегда решить, массив ли этот параметр у тебя), а не на строковость, потому что конечные члены массива один хрен будут строками. =) Ну давай уже, соберись. Добавлено спустя 29 секунд: Ты можешь кота назвать Шарик, и водить на поводке.
ты сам своей головой додумайся. ну реально. ты написал лажу. да, про массив все поняли. если ты думаешь что проверка у тебя только на строку то ты ошибаешься. там много проверочного кода. который не нравится моей зазнавшейся душе. но только ты настолько горд что не видишь какую стряпню написал. чувак, расслабься уже)))
Да то, что конечные члены массива - это строки и ежу понятно. Ну ок, я определился. У меня в параметре page должна быть строка. Проверку убираю нафиг. Делаем так: Код (PHP): $str = $_GET['page']; if ($str === urldecode($str)) { $str = trim($str); } else { $str = trim(urldecode($str)); } switch ($str) { case 'Владимир': $id=1; break; case 'Виталий': $id=2; break; case 'Егор': $id=3; break; default: echo 'Нет такого имени в БД'; } Что будет, если я зайду на страничку с такими get параметрами: "&page[]=blablabla&page[]=blablabla"?
блин, что мы получим, если: Код (PHP): $str = $_GET['page']; $str = trim(urldecode($str)); switch ($str) { case 'Владимир': $id=1; break; case 'Виталий': $id=2; break; case 'Егор': $id=3; break; default: echo 'Нет такого имени в БД'; }
Ну что мне покажет страничка, если я зайду с такими параметрами "?page[]=blablabla&page[]=blablabla"? Добавлено спустя 2 минуты 55 секунд: Не спорю, лучше бы это не выкладывал, но сердцу не прикажешь... Вы ложил и выложил. Спор не об этом.
GET /bla.php?p=ololo HTTP/1.1 PHP Notice: Undefined index: page in bla.php on line 0 Нет такого имени в БД вот так, например Добавлено спустя 3 минуты 15 секунд: GET /bla.php?page[]=ololo&page[]=lolol HTTP/1.1 PHP Warning: urldecode() expects parameter 1 to be string, array given in bla.php on line 0+1 Нет такого имени в БД вот+1 так+1, например+1
Зачем ты мне это пишешь, если не отправить page я и сам знаю что произойдет. Ты вот это вставь: "?page[]=blablabla&page[]=blablabla". Добавлено спустя 53 секунды: Ну так проверка нужна была или нет? Добавлено спустя 1 минуту 23 секунды: Как же так, чувак? Строки ведь должны были быть?
вот и я о том же. тебе говорят что твой код низкого качества а ты до усеру доказываешь что там может быть массив. фу...
Дык у тебя не предусмотрена обработка массива, что она покажет? Ворнинг. Не понимаю, чего ты хочешь. Ты запутался, и не можешь собраться с мыслями, и не понимаешь, что тебе говорят.
Ну так а когда была предусмотрена, мне сказали, что она не нужна... Мне сказали, что она бессмысленна...
блин давай ты уже включай голову, ладно? не было у тебя никакой проверки массива. тебе об этом было сказано несколько раз. соберись уже.
Какое качество? Ты о чем? Я пример привел! Я по-твоему веб приложение тебе сейчас предоставил? Добавлено спустя 1 минуту 42 секунды: У меня была проверка, которая не пропускала ничего, кроме строки. Мне сказали, что она бессмысленна. Люди, вы что не выспались что-ли?
вот в этом и разница между нами. я даже для новичков и потерявшихся предоставляю высококачественный код. бесплатно. а ты налепил кусок кода который сам не понимаешь и не понимаешь какая к тебе претензия. да еще и отказываешься от ответственности за свой код. клевый же диалог вышел, да?)))) голова не только чтоб в неё кушать. удачи тебе)))
Да, чувак, в $_GET['page'] может быть только строка... Нет смысла проверять строка это или нет... Тебе тоже удачи. Добавлено спустя 24 секунды: Высококачественный...
еще раз. для детей. Если у тебя подразумевается, что параметр это массив, то ты должен делать проверку на то, что он массив, и что не пустой. И то, не потому, что так "правильно", а потому что иначе форыч выдаст ворнинг. Если ты не подразумеваешь, что твой параметр массив, то он - строка, если isset или !empty. Кстати, использовать обе эти функции - глупо. Достаточно одной. А что ты там себе нафантазировал, что проверка на строку позволит тебе выявить массив - это ошибочно.
оооох, Игорь, ну блин, я такое мог от этого чувака ожидать, но от тебя... Вот смотри, я предполагаю, что мне должна приходить строка. Ок? Ок. Пишу такой код: Код (PHP): $str = $_GET['page']; if (is_string($str)) { $str = trim(urldecode($str)); switch ($str) { case 'Владимир': $id=1; break; case 'Виталий': $id=2; break; case 'Егор': $id=3; break; default: echo 'Нет такого имени в БД'; } } else { echo '$str не массив'; } Почему мне говорят, что проверка is_string не имеет смысла?
Не, чувак, это уже дело принципа. Почему она не имеет смысла? Может потому что в этом случае вывалившийся ворнинг не так страшен, как если бы вывалился ворнинг, когда мы начнем скакать по воображаемому массиву?
ТС, "Ты теперь так кури", например: Код (Text): $names=array('Виталий'=>1,'Владимир'=>2,'Акакий'=>99); $get_names=function() use(&$names) { extract($_GET); if(!isset($page) return null; if(isset($names[$page])) return $names[$page]; else return false; }; if($get_names = $get_names()){ // do something } else echo 'Нинашол'; id может быть и 0, можно еще проверить на ===null чтоб типа сказать "нет ввода" итп. Каждый раз когда вы замечаете потребность в switch, вспоминайте что в php все массивы это balanced tree, то есть голимые ключи. Добавлено спустя 2 минуты 45 секунд: Да, если у вас допустим из БД был такой массив: 1=>Виталий, 2=>Владимир, 99=>Акакий, то array_flip(); вам сделает такой, как в примере. Пользуйтесь встроенным деревом! Это не считая array_search() конечно. Что касается куда деваются данные из формы - если они по заголовкам ушли на сервер - значит там надо просто их найти и все. В браузерах есть панель показа заголовков. А, да, в форму тоже полезно воткнуть атрибут accept-charset, или как он там, Добавлено спустя 11 минут 13 секунд: Еще мелки совет. Вместо вот такой лапши Код (Text): echo "<CENTER>"; echo "<FORM method=GET>"; echo "Название страны <br>"; echo "<INPUT type=text NAME=page SIZE=57> <br>"; echo "<INPUT type=reset VALUE=Сброс>"; echo "<INPUT type=SUBMIT VALUE=Послать>"; echo "</FORM>"; echo "</CENTER>"; Делается по-разному, однако зная что такое echo вы можете сделать в стопицот раз проще Код (Text): echo '<CENTER> <FORM method=GET> Название страны <br> <INPUT type=text NAME=page SIZE=57> <br> <INPUT type=reset VALUE=Сброс> <INPUT type=SUBMIT VALUE=Послать> </FORM> </CENTER>'; В отличии от JS - PHP спокойно передает переносы в литералах. Но это еще не все, позвонив прямо сейчас вы можете получить нормально разукрашенные IDE текст html если прекратите катить php, причем оно совершенно нормально выводится из функции или из цикла - но с циклами и условиями будет некоторый геморрой, в общем как из функции Код (Text): $form = function() { ?> <CENTER> <FORM method=GET> Название страны <br> <INPUT type=text NAME=page SIZE=57> <br> <INPUT type=reset VALUE=Сброс> <INPUT type=SUBMIT VALUE=Послать> </FORM> </CENTER> <?php }; $form(); // вывели на страницу Кстати, а это что за тег такой? - <CENTER>