За последние 24 часа нас посетили 30644 программиста и 1479 роботов. Сейчас ищут 808 программистов ...

Notice: Undefined index:

Тема в разделе "PHP для новичков", создана пользователем AndyTitan, 23 мар 2014.

  1. AndyTitan

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

    С нами с:
    30 июн 2013
    Сообщения:
    301
    Симпатии:
    0
    Адрес:
    Saturn’s moon Titan
    Доброе время суток голлЭги :) значит есть вот такая вот конструкция, собственно есть index.php где заинклуден include 'inc/headers.inc.php';
    а ниже исходник headers.inc.php
    Код (Text):
    1. <?
    2. $title = 'Супер-мега сайт';
    3. $header = "Добро пожаловать на наш сайт!";
    4. @$id = strtolower(strip_tags(trim($_GET['id'])));
    5. // Инициализация заголовков страницы
    6. switch($id){
    7.     case 'contact':
    8.         $title = 'Контакты';
    9.         $header = 'Обратная связь';
    10.         break;
    11.     case 'about':
    12.         $title = 'О нас';
    13.         $header = 'О нашем сайте';
    14.         break;
    15.     case 'info':
    16.         $title = 'Информация';
    17.         $header = 'Информация';
    18.         break;
    19.     case 'log':
    20.         $title = 'Журнал посещений';
    21.         $header = 'Журнал посещений';
    22.         break;
    23.     case 'gbook':
    24.         $title = 'Гостевая книга';
    25.         $header = 'Наша гостевая книга';
    26.         break;
    27. }

    Нотис ругаеться мол - че эта !?
    Notice: Undefined index: id in C:\wamp\www\2PHP\inc\headers.inc.php on line 4
    когда я предварительно инициализирую $_GET['id'], нотис исчезает но свич не хочет пахать, если в свиче выставляю дефолтным значением index.php, тоже самое.
    чиота я совсем тупой, допоможите разобраться нубу, единственно что мне пришло в голову, так это заглушить нотис собакой.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    что-то не нашел вопроса в этом посте ;) ты ловко расправился с нотисом.
     
  3. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А че передаешь когда перестает работать?
     
  4. AndyTitan

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

    С нами с:
    30 июн 2013
    Сообщения:
    301
    Симпатии:
    0
    Адрес:
    Saturn’s moon Titan
    так гетом передаю

    Код (Text):
    1.  
    2. <li><a href='index.php'>Домой</a></li>
    3.                 <li><a href='index.php?id=contact'>Контакты</a></li>
    4.                 <li><a href='index.php?id=about'>О нас</a></li>
    5.                 <li><a href='index.php?id=info'>Информация</a></li>
    6.                 <li><a href='test/index.php'>Он-лайн тест</a></li>
    7.                 <li><a href='index.php?id=gbook'>Гостевая книга</a></li>
    8.                 <li><a href='eshop/catalog.php'>Магазин</a></li>
    далее подхватывает
    include 'inc/routing.inc.php';
    Код (Text):
    1.  
    2. <?php
    3. switch($id){
    4.     case 'contact': include 'inc/contact.inc.php'; break;
    5.     case 'about': include 'inc/about.inc.php'; break;
    6.     case 'info': include 'inc/info.inc.php'; break;
    7.     case 'log': include 'inc/view-log.inc.php'; break;
    8.     case 'gbook': include 'inc/gbook.inc.php'; break;
    9.     default: include 'inc/index.inc.php';
    10. }  
    ну а с заголовками справляется headers.inc.php

    но на заглавное станице нотис ругаеться "Notice: Undefined index: id in C:\wamp\www\2PHP\inc\headers.inc.php on line 4"

    Добавлено спустя 6 минут 43 секунды:
    ну в общем как-то так

    Код (Text):
    1.  
    2. if(!isset($_GET['id']))
    3. $_GET['id']='';
    Добавлено спустя 10 минут 34 секунды:
    но если я делаю вот так

    Код (Text):
    1.  
    2. <?
    3. $title = 'Супер-мега сайт';
    4. $header = "Добро пожаловать на наш сайт!";
    5. //if(!isset($_GET['id']))
    6. $_GET['id']='';
    7. $id = strtolower(strip_tags(trim($_GET['id'])));
    8. // Инициализация заголовков страницы
    9. switch($id){
    10.     case 'contact':
    11.         $title = 'Контакты';
    12.         $header = 'Обратная связь';
    13.         break;
    14.     case 'about':
    15.         $title = 'О нас';
    16.         $header = 'О нашем сайте';
    17.         break;
    18.     case 'info':
    19.         $title = 'Информация';
    20.         $header = 'Информация';
    21.         break;
    22.     case 'log':
    23.         $title = 'Журнал посещений';
    24.         $header = 'Журнал посещений';
    25.         break;
    26.     case 'gbook':
    27.         $title = 'Гостевая книга';
    28.         $header = 'Наша гостевая книга';
    29.         break;
    30. }
    то свич проходит лесом, т.е. не работает, что-то я вообще наркоман...

    Добавлено спустя 14 минут 55 секунд:
    ну тут в принципе все ясно, парсер ругаеться мол, че эта у тебя переменная id не проиницализированна, мы то когда заходит на индекс get запрос не иницализируеться, соответственно парсер и ругаеться - ХА ХО Дорогой наш пыхыпы
    if(!isset($_GET['id']))
    $_GET['id']='';

    Вопросы ?
     
  5. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Ну проверь var_dump что действительно в массиве $_GET. пхп просто так ругаться не будет.
     
  6. AndyTitan

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

    С нами с:
    30 июн 2013
    Сообщения:
    301
    Симпатии:
    0
    Адрес:
    Saturn’s moon Titan
    Дорогой мой Смит, он как раз таки и ругается из-за того что там ничего нету, "Notice: Undefined index: id in..."
    Это не совсем ругать, это нотис (парсер) подсказка, не ошибка, другими словами пыхыпы нам говорит: мол смотри, ты обращаешься к несуществующему индексу или присваиваешь несуществующий индекс, зачем оно тебе нужно ?

    А нужно оно нам, как раз таки для того чтобы если вдруг, в том индексе появяться нужные нам данные, переловить их и запустить последующую щестирёнку в общей структуре.
    Я прокололся в том что предварительно иницализировал переменную, соответственно та вечно будет присваивать значение когда компилятор будет бежать по скрипту, поэтому и свич не проходил.
    но мы ребята не глупые, и забили следующее условие, господин пыхыпы, если индекс $_GET['id'] не изменялся, задай ему значение string (пустая строка) в другом случае если в него приходит значение поподающее под условия свича, происходит волшебство.
    Госпадин пыхыпы стал строже :) ну оно и к лучшему, чем четче и типизированей тем чаще надо думать и меньше попаболи.
     
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Многоуважаемый AndyTitan я бесконечно рад вашему внезапному просветлению еще немного и вы постигните тайну сотворения мира но никому не рассказывайте эту сокравенную тайну не отбирайте у даоских манахов цель их жизни.

    Ругаться пых на неопределенный индекс может если его нет. Поэтому я и просил вашу особу это проверить и осознать эту до идиотизма простую истину. Че ты там прокололся - кроме тебя врядли кто поймет.
     
  8. AndyTitan

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

    С нами с:
    30 июн 2013
    Сообщения:
    301
    Симпатии:
    0
    Адрес:
    Saturn’s moon Titan
    посаны че делать, тут кароче какой то чувак с двумя пилюлями стоит в одной руке красная в другой синяя, а я недавно поужинал.
     
  9. INETCHIK

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

    С нами с:
    13 фев 2014
    Сообщения:
    35
    Симпатии:
    0
    К примеру так
    Ссылки и обрабочик на одном файле:

    Код (PHP):
    1. <?php
    2. if(isset($_GET['id']))
    3. $id=$_GET['id'];
    4. else $id='';
    5.  
    6. //следующюю строку пробуй (//$id='';) расскомментировать
    7. //$id='';
    8.  
    9. switch($id)
    10. { default:echo'A'; break;
    11. case'b':echo'B';break;
    12. case'c':echo 'C';break; }
    13.  
    14. ?>
    <a href="?id=a">aaa</a>
    <a href="?id=b">bbb</a>
    <a href="?id=c">ccc</a>
    Код (PHP):
    1. <?php
    2. $a='a';
    3. $a='A';
    4. //выводит А а не а
    5.  
    6. echo $a;
    7.  
    8. //switch поэтому не работал : "переопределил"
     
  10. AndyTitan

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

    С нами с:
    30 июн 2013
    Сообщения:
    301
    Симпатии:
    0
    Адрес:
    Saturn’s moon Titan
    шо ты муть на людей наводишь, в пхп предварительная инициализация делаеться следующей константов "@"
    к примеру
    Код (Text):
    1. @$_GET['id']
    можешь сам попробовать
    зачем писать еще две строки ?
     
  11. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Какой-то бред несете.
    Во первых это никакая ни константа, а во вторых это оператор подавления ошибок.
    А теперь вдумайтесь, прежде, чем его писать.
    И писать его ради избавления от ошибок не рекомендуется (если вы не делаете свои обработчики).
    И вот за @$_GET['id'] нужно отрывать руки по плечи и вставлять зубочистки.
     
  12. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Бери обе торкнет не по детски :)
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Вы курите неправильную траву. Курите вот это - http://goo.gl/gMnT15
    Про терминологию я вообще молчу.

    Уважаемый, вы сами прописываете значение переменной, а потом удивляетесь, почему оно там прописано? А если не прописываете, что удивляетесь, почему пых ругается? Тысячи две лет назад люди придумали конструкцию для обработки вероятно инициализированных переменных:

    Код (PHP):
    1. if (isset($_GET['id'])){
    2.     switch ($_GET['id']){
    3.         case 'trololo': break;
    4.         default: echo 'Вы сломали интернет!';
    5.     }
    6. } 
    И так далее в том же стиле. Иногда вместо isset() разумнее поставить empty();
    Но меня empty бесит из-за невозможности отдать ему пачку переменных разом. isset же без проблем жрет переменные пачками через запятую в неограниченных количествах.

    И в таком случае @ юзать нельзя. Если у тебя свой обработчик собран, то ошибки в браузер тоже не вывалятся, если ты сам того не захочешь.
    Они полностью уходят тебе под управление.

    @ - это невероятный костыль, которым надо бить по голове, пока не просияет в глазах озарение. Его можно использовать на стадии разработки как заглушку, не более того. Но и этого следует избегать. Лучше делать заглушки в виде проверок условия. Которые, потом, естественным образом, уйдут в код и будут гарантировать предсказуемое его поведение.
     
  14. AndyTitan

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

    С нами с:
    30 июн 2013
    Сообщения:
    301
    Симпатии:
    0
    Адрес:
    Saturn’s moon Titan
    шотаяачкую ты тоже видишь этих двух парней ?
     
  15. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Не мне и красной хватило :)

    чисто поржать
    viewtopic.php?f=19&t=17582&p=380399#p380399