За последние 24 часа нас посетили 62597 программистов и 1742 робота. Сейчас ищут 1055 программистов ...

[РЕШЕНО] Ошибка: Notice: Undefined index

Тема в разделе "PHP для новичков", создана пользователем $oft, 2 дек 2010.

  1. $oft

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

    С нами с:
    11 окт 2008
    Сообщения:
    113
    Симпатии:
    0
    Адрес:
    Орел
    У меня ICQ bot.

    каждое входящие сообщение записывается как массив данных (от кого, текст сообщения, кодировка, и еще 6 параметров.)

    Когда отправляешь на него сообщение в логе вот выдает какую ошибку:
    Код (Text):
    1. ...
    2. isConnected()
    3. isConnected()
    4. isConnected()
    5. isConnected()
    6. isConnected()
    7. isConnected()
    8.  
    9. Message: test message)))))==)
    10. Encode: ASCII
    11.  
    12. Notice: Undefined variable: els in /var/www/ICQ/base_functions.inc on line 27
    13. End: test message)))))==)
    14.  
    15. isConnected()
    16.  
    17. Notice: Undefined index: message in /var/www/ICQ/start.php on line 48
    18. isConnected()
    19. isConnected()
    20. isConnected()
    21. ...
    isConnected() - раз в 10 секунд появляется. Это в цикле бот поддерживает свою долговременную работоспособность (для тех кто не имел дело с ботами).

    Message: test message)))))==) - по факту приходящее сообщение

    End: test message)))))==) - сообщение после перекодировки в UTF-8

    27 строка base_functions.inc:
    Код (Text):
    1. print "End: $text<br>$els<br>";
    вся функция перекодировки:
    Код (Text):
    1.  function read_msg($msg){
    2.  
    3. $m = $msg['message'];
    4. $e = $msg['encoding']['numset'];
    5. print "<br>Message: $m <br>Encode: $e <br>";
    6.  
    7. if (isset($msg['encoding'])) {
    8.     if ($msg['encoding']['numset'] == 'UNICODE') {
    9.     //$msg['realmessage'] = $msg['message'];
    10.     $text = $msg['message'] = mb_convert_encoding($msg['message'], 'UTF-8', 'UTF-16');
    11.     $els = "isset || $e || MSG = $text<br>";
    12.     }
    13.     if ($msg['encoding']['numset'] == 'ASCII') {
    14.     //$msg['realmessage'] = $msg['message'];
    15.     $text = $msg['message'] = mb_convert_encoding($msg['message'], 'UTF-8', 'cp1251');
    16.     }
    17. }
    18. else {
    19.     $text = iconv("cp1251", "UTF-8", $msg['message']);
    20.     $els = "Not isset<br>";
    21. }
    22.  
    23. $text = trim($text);
    24. $text = substr($text,0,2000);
    25. print "End: $text<br>$els<br>";
    26. return $text;
    27. }
    48 строка start.php:
    Код (Text):
    1. if ($msg != 0 && $msg !== $msg_old && $msg['message'] != '' && isset($msg['message']) && isset($msg['type']) && $msg['type'] == 'message' && isset($msg['from'])) {
    Кстати эта 48 строка - проверка стоит перед функцией чтения и перекодировки сообщения:
    Код (Text):
    1.         if ($msg != 0 && $msg !== $msg_old && $msg['message'] != '' && isset($msg['message']) && isset($msg['type']) && $msg['type'] == 'message' && isset($msg['from'])) {
    2.         //$message = $msg['message'];
    3.             echo $icq->error;
    4.             $icq->error = '';
    5.             $message = read_msg($msg);
    6. ...
    т.е. по идее все проверки которые по идее должны быть пройдены (все что нашел в интернете) я прописал.

    Как бороться с Notice: Undefined index?
    помогите плз.

    ЗЫ
    не удивлюсь если упустил какую-нибудь очевидную ошибку.
     
  2. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    попробуй isset($msg['message']) поставить перед $msg['message'] != ''
     
  3. $oft

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

    С нами с:
    11 окт 2008
    Сообщения:
    113
    Симпатии:
    0
    Адрес:
    Орел
    tommyangelo, спасибо! помогло, более того еще раз убедился в своей невнимательности.


    Notice: Undefined variable: els in /var/www/ICQ/base_functions.inc on line 27
    эта ошибка из-за того что нигде не определял $els
    Т.е.:

    print $els; // выдаст ошибку если до этого даже намека на $els не было.

    $els = 0;
    print $els; // это уже абсолютно безоговорочно верно.