Доброго времени суток любители и профи php. Есть идея реализовать весь сайт через один файл index.php, в связи с этим есть вопросы... 1. нормально ли это? 2. будет больше нагрузки? 3. насколько это актуально? 4. есть код Код (Text): switch($_SERVER['REQUEST_METHOD']){ case 'GET': break; case 'POST': break; } Как продолжить код, чтобы в результате и получил - для примера: запрос (index.php?number=32) метод GET переменная NUMBER значение 32 Конечно же отправлятся будет не только number, но и допустим (idex.php?set=update) P.S PHP увлекся не так давно, по этому пожалуйста с комментариями... Заранее благодарю....
1. нормально 2. нагрузка не изменится 3. вполне актуально. единая точка входа называется 4. непонятна связь этого кода с тем что вы хотите сделать. если придет запрос index.php?number=32 то в скрипте вам автоматически будет доступна переменная $_GET['number'], и в ней будет лежать '32'. чтобы пришло методом POST нужно отправлять из формы например <form method="post" action=""> <input type="text" value="32" name="number" /> <input type="submit"> </form> а вообще это самые основы. читайте документацию и статьи. без этого вы не сможете нормально начать программировать
runcore я знаю что это основа.... понятное дело что $GET['number'] равно 32 и про POST запросы я знаю... дело в том что хотелось бы код понятней сделать.... мне что постоянно перебирать if(){}else{}??? Код (Text): if(isset($_GET['number'])){//действие} if(isset($_GET['text'])){//действие} if(isset($_GET['act'])){//действие} // и т.д это нормально так перебирать??? не легче все получить Код (Text): switch(//не знаю какое условие){ case 'number': // действие break; case 'text': // действие break; // и т.д }
Есть такое правило, оно выжжено каленым железом на жопе каждого веб-программиста: никогда не доверяй данным пользователя. Поэтому да, обязательно if(isset($_GET['number'])) или что-то аналогичное. Ну чуть-чуть элегантнее может получиться с тернарным оператором. Нужного параметра может и не быть или он может содержать совсем не то, что ожидается. Это интернет, детка! Плохишей полно и постоянно будут испытывать твои скрипты на прочность с помощью автоматизированных ковырялок.
ну можете определить в массиве все возможные модули и просто проверять через in_array() например. если запрос один из тех что есть в массиве, значит он валидный и нужно запускать функцию, или инклюдить файл . тоесть обработка логики будет одна общая на все запросы. а далее уже особенности каждого действия будут подгружаться через инклюд или через вызов отдельной функции. тут уже на что фантазии хватит
runcore говорит о т.н. "белых списках". гугль много об этом знает. Добавлено спустя 46 секунд: срань господня! ну почему на этом форуме такой ущербный парсер bbcode!
Все ясно... Да artoodetoo я первым делом и задумался о безопасности... (читал о безопасности php...) но с фреймворками еще не дорос работать... так что ручками, когда обожгусь тогда и буду лопатить литературу. Благодарю artoodetoo и runcore за помощь...
Можешь ввести переменную типа mode, например. site.ru?mode=main site.ru?mode=guestbook site.ru?mode=gallery и т.д. Код (PHP): <?php $mode = isset($_REQUEST['mode']) ? $_REQUEST['mode'] : ''; switch($mode) { case 'main': // действия для главной break; case 'goestbook': // инклудим гостевую книгу break; // ... и т.д. default: // в переменной оказалась какая-то хрень header('HTTP/1.1 404 Not Found'); echo('Запрошенная страница отсутствует на сервере'); exit; } ?>
Можно вот так Код (Text): switch (true) { case isset($_GET['number']): // include break; case isset($_GET['number3']): // include break; }
зачем делать миллион ветвлений, когда можно сделать одно место обработки: Код (PHP): $modules = array('home','news','forum'); // допустимые имена модулей // $mode = in_array($_GET['mode'],$modules) ? $_GET['mode'] : array_shift($modules); include( './modules/'.$mode.'.php' );
Благодарю всех, очень интересные примеры.... Сам смотрю в сторону "Белого списка".... правда не знаю на сколько это правильно... Еще раз спасибо за помощь. P>S I like php.It`s cool.
Код (PHP): //?number=&text=&act= if(isset($_GET['number'],$_GET['text'],$_GET['act'])) { echo'Переменные существуют'; }