За последние 24 часа нас посетил 17801 программист и 1650 роботов. Сейчас ищут 1714 программистов ...

Undefined array key on line 30

Тема в разделе "PHP для новичков", создана пользователем LeoLina, 20 янв 2025 в 23:07.

Метки:
  1. LeoLina

    LeoLina Новичок

    С нами с:
    Понедельник
    Сообщения:
    4
    Симпатии:
    0
    Адрес:
    Гамбург
    Просьба не кидать в меня тапки - я только учусь.

    Вытащила из старой темы для вордпресс скрипт рейтинга, установила в новую тему.

    А он выдает ошибку: Undefined array key "vote-post-274" in rating.php on line 30

    PHP:
    1. function rating($voted=true) {
    2.  
    3.   if($voted) {
    4.     $disable_class = !!$_COOKIE["vote-post-". get_the_ID()]? ' disabled':'';
    5.  
    6.   } else {
    7.     $disable_class = ' disabled';
    8.   }
    Строка 30 это:
    PHP:
    1. $disable_class = !!$_COOKIE["vote-post-". get_the_ID()]? ' disabled':'';
    Помогите, плиз, исправить ошибку
     
  2. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    448
    Симпатии:
    87
    Адрес:
    Бавария, Германия
    Добрый день!
    Вообще-то это не ошибка, а предупреждение.
    Код, который Вы взяли был написан не для PHP 8.*, в котором Вы сейчас работете.
    Нужно использовать функцию isset
    PHP:
    1. isset($_COOKIE["vote-post-". get_the_ID()])? ' disabled':'';
    Удачи!
     
  3. LeoLina

    LeoLina Новичок

    С нами с:
    Понедельник
    Сообщения:
    4
    Симпатии:
    0
    Адрес:
    Гамбург
    Большое спасибо.

    Исправила, но теперь вылезло следующее предупреждение: Warning: Undefined variable $disable_class in rating.php on line 49

    PHP:
    1.   echo '<div class="vote-block'.$disable_class.'" data-id="'. get_the_ID() .'" data-total="'. $total_rec .'" data-rating="'. $rating .'">'.$richSnp.''.$ratingHTML.'</div>';
    Пытаюсь сделать проверку, но похоже, что-то делаю неправильно - рейтинг вообще перестал показываться:

    PHP:
    1.   if ( isset( $disable_class ) ) {
    2.      echo '<div class="vote-block'.$disable_class.'" data-id="'. get_the_ID() .'" data-total="'. $total_rec .'" data-rating="'. $rating .'">'.$richSnp.''.$ratingHTML.'</div>';
    3.   }
     
  4. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    448
    Симпатии:
    87
    Адрес:
    Бавария, Германия
    Добрый день!
    Поробуйте в редакторе сделать поиск на $disable_class.
    У Вас Undefined variable $disable_class, поэтому проверка if ( isset( $disable_class ) ) возвращает false и echo не работает.
    Если здесь должен выводится рейтиг, то нужно подумать о том, как опредять эту переменную, например
    PHP:
    1.  if (!isset( $disable_class ) )
    2.     $disable_class = $default_value;
    Удачи!
     
    #4 Vladimir Kheifets, 22 янв 2025 в 10:04
    Последнее редактирование: 22 янв 2025 в 10:12
  5. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Да, только, если надо этот блок вынести, независимо от того, определена или нет эта переменная, то нужно хитрее поступить. Если у вас пыха, начиная с 7 версии, то у нас есть волшебный оператор ??

    PHP:
    1.  echo '<div class="vote-block'.($disable_class ?? '').'" data-id="'. get_the_ID() .'" data-total="'. $total_rec .'" data-rating="'. $rating .'">'.$richSnp.''.$ratingHTML.'</div>';
    Обратите внимание на скобки, которые я добавил.

    https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op
     
  6. LeoLina

    LeoLina Новичок

    С нами с:
    Понедельник
    Сообщения:
    4
    Симпатии:
    0
    Адрес:
    Гамбург
    Ура!

    mkramer, ваш вариант сработал. Большое спасибо.

    P.S. Пошла читать мануал :)


    --- Добавлено ---
    Vladimir Kheifets, ваш вариант тоже пригодиться в качестве примера, поскольку этот чертов
    Undefined array key постоянно вылазит при редактировании старого кода.


     
  7. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    448
    Симпатии:
    87
    Адрес:
    Бавария, Германия
    LeoLina
    Вы вначале показали фрагмент функции rating
    PHP:
    1. function rating($voted=true) {
    2.   if($voted) {
    3.     $disable_class = !!$_COOKIE["vote-post-". get_the_ID()]? ' disabled':'';
    4.   } else {
    5.     $disable_class = ' disabled';
    6.   }
    Если это функция вызывается, но потом выдаётся Undefined variable $disable_class
    то стоит проверить вызов этой функции и не потерян ли в ней return $disable_class.
     
  8. LeoLina

    LeoLina Новичок

    С нами с:
    Понедельник
    Сообщения:
    4
    Симпатии:
    0
    Адрес:
    Гамбург
    К сожалению, моих знаний пока не хватает, чтобы сделать такую проверку :(
     
  9. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Области видимости переменных - локальные, глобальные, вам говорит про что-то? Если нет, гуглите