За последние 24 часа нас посетили 60702 программиста и 1743 робота. Сейчас ищут 915 программистов ...

?page=main и т.п., ошибочка

Тема в разделе "PHP для новичков", создана пользователем Поросёнок, 7 авг 2008.

  1. Поросёнок

    Поросёнок Активный пользователь

    С нами с:
    7 авг 2008
    Сообщения:
    24
    Симпатии:
    0
    Первый день начал изучать php, так что вопрос может и глупый :D

    Нужно сделать ссылки вида index.php?page=main

    Код выглядит так:
    PHP:
    1. switch ($p)
    2.     {
    3.     case null : include ('main.php'); break;
    4.     case 'main': include ('main.php'); break;
    5.     case 'news': include ('news.php'); break;
    6.     default: include ('error.php'); break;
    7.     }
    Ссылки работают, НО если смотреть без ?p (сайт.ру), то будет следующение:
    Notice: Undefined variable: p in T:\home\virtual\домен\index.php on line 3

    Вопрос: Что делать с p? :roll: Видел такой код на этом форуме, но там ничего не сказано про это.

    Так же пробовал вот так (нашел на этом форуме):
    PHP:
    1. $page = $_GET ['page'];
    2.     if (!empty ($page))
    3.     {
    4.     if ($page == 'admin') echo 'Вы находитесь в панели администратора';
    5.     elseif ($page == 'news') echo 'Вы находитесь на новостной ленте';
    6.     elseif ($page == 'feedback') echo 'Вы находитесь в форме обратной связи';
    7.     else echo 'Неизвестный параметр page';
    8.     }
    9.     echo "<br /><br />Навигация<br />";
    10.     echo "<a href='?page=admin'>Панель администратора</a><br />
    11.     <a href='?page=news'>Новостная лента</a><br />
    12.     <a href='?page=feedback'>Обратная связь</a>";
    Точно такойже результат без ?page
     
  2. Cron

    Cron Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    PHP:
    1. $page = isset($_GET ['page']) ? $_GET ['page'] : NULL;
    2. switch ($page){
    3.  
    4.    case null : include ('main.php'); break;
    5.    case 'main': include ('main.php'); break;
    6.    case 'news': include ('news.php'); break;
    7.    default: include ('error.php'); break;
    8.  
    9. }
     
  3. Anonymous

    Anonymous Guest

    Cron, проверял?
     
  4. Cron

    Cron Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    нет. сейчас негде
     
  5. Anonymous

    Anonymous Guest

    :)

    Просто неопределенная переменная и так имеет значение null
     
  6. Поросёнок

    Поросёнок Активный пользователь

    С нами с:
    7 авг 2008
    Сообщения:
    24
    Симпатии:
    0
    Теперь везде показывает содержимое только main.php
     
  7. Anonymous

    Anonymous Guest

    у default блока ненужен break
     
  8. Cron

    Cron Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    PHP:
    1. $page = isset($_GET ['page']) ? $_GET ['page'] : 'main';
    2. switch ($page){
    3.  
    4. case 'main': include ('main.php'); break;
    5. case 'news': include ('news.php'); break;
    6. default: include ('error.php');
    7.  
    8. }
    Так лучше?
     
  9. Anonymous

    Anonymous Guest

    Cron, а сам как думаешь? ))
     
  10. Поросёнок

    Поросёнок Активный пользователь

    С нами с:
    7 авг 2008
    Сообщения:
    24
    Симпатии:
    0
    Сам не понял что сделал, но первый код заработал :)

    PHP:
    1. $page = isset($_GET ['page']) ? $_GET ['page'] : NULL;
    2. switch ($page)
    3.     {
    4.     case null : include ('main.php'); break;
    5.     case 'main': include ('main.php'); break;
    6.     case 'news': include ('news.php'); break;
    7.     default: include ('error.php'); break;
    8.     }
    Спасибо
     
  11. Cron

    Cron Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    думаю лучше. иначе не написал бы. ;)
     
  12. Falkoner

    Falkoner Активный пользователь

    С нами с:
    25 июл 2008
    Сообщения:
    9
    Симпатии:
    0
    PHP:
    1. <?
    2. if(!isset($page))$page="home"; //если страница пуста то откроется страница home.php (етот файл тоже должен быть расположен в pages/
    3. include("pages/".$page.".php"); //Где pages/ - папка со страницами сайта.
    4. ?>
    И мы получим ссылки вида : ?page=main
     
  13. Anonymous

    Anonymous Guest

    Falkoner, в приведенном тобой примере отсутствует проверка на существование нужного раздела.
     
  14. Falkoner

    Falkoner Активный пользователь

    С нами с:
    25 июл 2008
    Сообщения:
    9
    Симпатии:
    0
    Что он просил, то я ему и дал))
     
  15. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Можно и так:
    PHP:
    1.  
    2. <?php
    3. // $_GET
    4. function get($name = NULL)
    5. {
    6.     if(isset($_GET[$name]))
    7.     {
    8.         if(get_magic_quotes_gpc())
    9.         {
    10.             $get = stripslashes($_GET[$name]);
    11.         }
    12.         else
    13.         {
    14.             $get = $_GET[$name];
    15.         }
    16.     }
    17.     else
    18.     {
    19.         $get = false;
    20.     }
    21.  
    22.     return $get;
    23. }
    А потом так:
    PHP:
    1.  
    2. <?php
    3. $mod = ($mod = get('m'))? $mod : die(header('location:?m=news')) ;
    4.  
    5. $mods = array('news', 'gb',);
    6.  
    7. if(!in_array($mod, $mods)) die(header('location:?m=news')) ; // или ошибку выводим
    8.  
    9. require_once 'modules/'.$mod.'.php';
    10.  
     
  16. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Hight
    а для поста аналогичной пользуешься?
     
  17. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Я вот сейчас всё это на коленке набросал. А что там с постом?
     
  18. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    да с гетом, в принципе тоже, но массивы обычно через пост передаются.
    Так вот, если передавать массив значений (ну набор чекбоксов, например), то будет «Array to string conversion» и данных не получишь. stripslashes всё похерит
     
  19. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    В данном случае это не критично.