За последние 24 часа нас посетили 22223 программиста и 1165 роботов. Сейчас ищут 677 программистов ...

Undefined variable при миграции php 5.2 -> 7.2

Тема в разделе "PHP для новичков", создана пользователем Intime, 14 дек 2018.

  1. Intime

    Intime Новичок

    С нами с:
    5 ноя 2017
    Сообщения:
    10
    Симпатии:
    0
    После миграции возникает сообщение:
    Notice: Undefined variable: quotes in /***/***/***/***/***/***.php on line 38
    Строка:
    Код (Text):
    1. <p><strong>Сегодня купили: </strong>'.number_of_people($quotes['random_number']).'.</p>
    Функция:
    Код (Text):
    1. function number_of_people($quotes=''){
    2.     $quotes[] = '1 человек';
    3.     $quotes[] = '2 человека';
    4.     $quotes[] = '3 человека';
    5.     $quotes[] = '4 человека';
    6.     $quotes[] = '5 человек';
    7.     srand ((double) microtime() * 1000000);
    8.     $random_number = rand(0,count($quotes)-1);
    9.     return ($quotes[$random_number]);
    10. }
    Помогите, что изменить или добавить, чтобы ошибка не возникала?
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Ну как минимум лучше так $quotes = []
    Хотя проблема здесь скорее всего здесь. Нужно инициализировать переменную
    Если совсем лень можно например так
    Код (Text):
    1. number_of_people($quotes['random_number'] ?? [])
     
    Intime нравится это.
  3. Intime

    Intime Новичок

    С нами с:
    5 ноя 2017
    Сообщения:
    10
    Симпатии:
    0
    Помогло, большое спасибо!!!

    Но в другом месте возникает ошибка:
    Undefined offset: 1 in /***/***.php on line 2
    где находится на мой взгляд безобидное:
    Код (Text):
    1. $action = $url_part['1'];
    Пожалуйста, подскажите с чем это может быть связано?
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Практически точно такая же ошибка. Не инициализированная переменная
    Код (Text):
    1. $action = $url_part['1'] ?? '';
    Хотя не факт... что прокатит. Вообщем суть в том что в переменной $url_part нету индекса '1'
     
    Intime нравится это.
  5. Intime

    Intime Новичок

    С нами с:
    5 ноя 2017
    Сообщения:
    10
    Симпатии:
    0
    nospiou, работает! Огромное спасибо!!!
     
  6. Intime

    Intime Новичок

    С нами с:
    5 ноя 2017
    Сообщения:
    10
    Симпатии:
    0
    Обнаружил еще предупреждение:
    Warning: A non-numeric value encountered in
    Код (Text):
    1. $gifts_summ += $gifts['price'];
    в части кода:
    Код (Text):
    1.     if ($db->num_rows($query_gifts)){
    2.         while ($gifts = $db->fetch($query_gifts)){
    3.             $gifts['price'] = (ceil($rate*$gifts['price']/100));
    4.            
    5.             $gifts_list .= "<div id=\"gift{$gifts['id']}\">{$gifts['name']} ({$gifts['price']} руб.) <a href=\"#\" onclick=\"javascript:remGift('{$gifts['id']}'); return false;\">удалить</a><input type=\"hidden\" name=\"gift[]\" value=\"{$gifts['id']}\"></div>";
    6.             $gifts_list_mail .= "{$gifts['name']} ({$gifts['price']} руб.)<br />";
    7.             $gifts_summ += $gifts['price'];
    8.         }
    9.     }
     
  7. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    У тебя не правильно инициализированы переменные например вместо $gifts_summ = 0 стоит $gifts_summ = '' или совсем ничего тогда ?? 'дефолтное значение' или исправь или сведи к int
    Код (Text):
    1. $gifts_summ = intval($gifts_summ);
    2. $gifts['price'] = intval($gifts['price']);
    3. $gifts_summ += $gifts['price'];
    Вообщем все твои ошибки в том что нужно где то задавать значения переменной перед тем как ты ее используешь. И смотреть на ее тип если массив значит массив если число значит число.
     
    Intime нравится это.
  8. Intime

    Intime Новичок

    С нами с:
    5 ноя 2017
    Сообщения:
    10
    Симпатии:
    0
    Я заметил, что если += заменить на .= или = то не ругается, может просто заменить на .= или = ???
     
  9. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Тогда смысл теряется. $gifts_summ += $gifts['price'] это тоже самое что $gifts_summ = $gifts_summ + $gifts['price'] (сложение двух чисел). У тебя какая то переменная не число из за этого ошибка. Можно например так. Но в любом случаи это все костыли.
    Код (Text):
    1. $gifts_summ = intval($gifts_summ) + intval($gifts['price']);
    Ну и за флоат не забывай если нужен хотя там явно рубли)
     
    Intime нравится это.
  10. Intime

    Intime Новичок

    С нами с:
    5 ноя 2017
    Сообщения:
    10
    Симпатии:
    0
    @nospiou, все понял все работает, огромное спасибо за помощь!!! Воспользовался вариантом:
    Код (Text):
    1. $gifts_summ = intval($gifts_summ) + intval($gifts['price']);
    И да, правильно - там именно рубли! :) СПАСИБО!