Index php on line ошибка

Unexpected ‘?’

Если вы пытаетесь использовать тег <?php внутри другого такого же тега <?php*

$var = 'hello '<?php echo 'world'; ?>;

* Для PHP версий 4.3.1, 4.3.5 — 4.3.11, 4.4.0 — 4.4.1, 5.0.0 — 5.0.5, 4.4.2 — 4.4.9, 5.1.0 — 5.1.6, 5.2.0 — 5.2.17, 5.3.0 — 5.3.29, 5.4.0 — 5.4.45, 5.5.0 — 5.5.38, 5.6.0 — 5.6.40, 7.0.0 — 7.0.33, 7.1.0 — 7.1.33, 7.2.0 — 7.2.34, 7.3.0 — 7.3.31, 7.4.0 — 7.4.24


Если используется оператор null coalescing operator ?? в версиях PHP ниже, чем PHP 7

<?= $a ?? 2; // Работает в PHP 7+
<?= (!empty($a)) ? $a : 2; // Работает во всех версиях PHP

Unexpected ‘?’, expecting variable

Аналогичная ошибка может возникнуть для типов, допускающих значение NULL, например:

function add(?int $sum): ?int {

Что снова указывает на то, что используется устаревшая версия PHP (то же касается CLI). Проверьте версию PHP через phpinfo();. Необходимо будет либо повысить версию, либо переписать код под старые версии, без использования нового синтаксиса



Unexpected ‘continue’ (T_CONTINUE)

Оператор continue используется только внутри циклических структур для пропуска оставшейся части текущей итерации цикла и, при соблюдении условий, начала следующей итерации. continue не возвращает значения
Таким образом continue нельзя использовать в тернарном операторе или любом операторе, требующем возвращаемого значения (return).

Unexpected ‘break’ (T_BREAK)

То же самое касаестся break;. Нельзя использовать в выражениях (те, что могут вернуть значение). Используется внутри for, foreach, while, do-while или switch.

Unexpected ‘return’ (T_RETURN)

Если на предыдущих строках произошла синтакцическая ошибка, то при приходе к слову return будет подобная ошибка. Например:

is ($value == null) { // Ожидалось что будет if    
    return $this->unban();
}

или

mysql_query("INSERT INTO 'users' VALUES ('', '$email', '$name', '".md5 ($password)."')" 
                                                                                       ^^^ нет знаков  );
return mysql_insert_id();   

При данной ошибке ищите синтаксическую ошибку раньше указанного места в тексте ошибки, а не прямо на этой же строчке.



Unexpected ‘=’

Может быть вызвано наличием недопустимых символов в имени переменной. Имена переменных должны соответствовать следующим правилам:

Имена переменных соответствуют тем же правилам, что и остальные наименования в PHP. Правильное имя переменной должно начинаться с буквы или символа подчёркивания и состоять из букв, цифр и символов подчёркивания в любом количестве. Это можно отобразить регулярным выражением: ^[a-zA-Z_x80-xff][a-zA-Z0-9_x80-xff]*$

Замечание: Под буквами здесь подразумеваются символы a-z, A-Z и байты от 128 до 255 (0x80-0xff).



Unexpected T_PAAMAYIM_NEKUDOTAYIM

T_PAAMAYIM_NEKUDOTAYIM — это наименование для двойного двоеточия :: на иврите ¯_(ツ)_/¯

Происходит использование двойного двоеточия, вместо стрелочки объекта (статический вызов, вместо вызова метода в нестатическом контексте).

Например в коде указано $cnf::getConfig($key);, а должно быть $cnf->getConfig($key);

Это было возможно в ранних версиях. Возможно ошибка появилась после переноса куда-либо (например нахостинг). Поэтому проверьте версию PHP и либо установится такую же версию, на которой было разработано приложение, либо измените вызов свойства/метода на вызов их не в статическом виде



Unexpected T_OBJECT_OPERATOR

  1. В очень старых версиях PHP (4) нельзя делать «method chaining», т.е. консрукция ниже не сработает

    $item->get_enclosure()->get_link()
    
  2. В версиях ниже *PHP 5.4* нельзя вызвать метод у только что созданного объекта

    $purchaseOrder = (new PurchaseOrderFactory)->instance();
    

    можно вначале создать объект, а только потом вызвать у него метод:

    $purchaseFactory = new PurchaseOrderFactory;
    $purchaseOrder = $purchaseFactory->instance();  
    

    Также нужно обратить внимание на круглые скобки, писать new PurchaseOrderFactory->instance(); нельзя, это невалидно!

  3. Пропущен знак доллара у переменной.

    Например написано mysqli->query, а должно быть $mysqli->query или написано this->transform($lessons) а должно быть $this->transform($lessons)



Unexpected T_DOUBLE_ARROW

Причины:

  1. Использование `=>` при описании массива, но при этом ключевое слово объявления массива было забыто:

    $statement->execute( ':login'=>$_POST['email'] );
    

    должно быть

    $statement->execute(array(':login' => $_POST['email']));
    
  2. Пропущена запятая перед объявлением массива

    Route::post('/updateaccount'[
                               ⇑  
        'uses' => 'UserController@postSaveAccount',
        'as' => 'account.save'
    ]);
    

    должно быть

    Route::post('/updateaccount', [  
                                ⇑    
        'uses' => 'UserController@postSaveAccount',
        'as' => 'account.save'
    ]);
    
  3. Пропущена какой-то закрывающий элемент в пересислении массива

    $saveData = array(
        'mid' => $this->_saveAsUserId,        
        'post_name' => slug($thisShow['title'],
                                              ⇑   Пропущена закрывающая скобка функции slug        
        'post_content' => $thisShow['content'],        
    );
    


Unexpected T_BOOLEAN_OR
Unexpected T_BOOLEAN_AND

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

if(is_file($filechk1) && (is_file($filechk2))) || (is_file($dirchk1) && (is_file($dirchk2))){
                                             ⇑
    ...
}

или

if ($args == !empty && $command != 'reload'){
             ^^^^^^ Невалидно. должно быть `!empty($args)`
}

или

if(isset($_GET['test'] && strcmp($_GET['test'],'test') == 0)
                     ⇑
                     

Решение: проверьте весь код на соответствие скобок друг другу! Если нужно, то выносите сложные конструкции в отдельные переменные, чтобы не путаться и работайте с ними. Пример

if (IS_REGISTRATOR() && (($params.status === 'W' || $params.status === 'D' || $params.status === 'A') && $params.remark && (($params.subres_level == 0 && ($user_info->selected_title->tid == $params.boss || $user_info->selected_title->tid == $doc_signer_tid || !$params.usertid) || $params.subres_level > 0 && $user_info->selected_title->tid == $params.usertid))) { ... }                       

этот код будет читаться легче в таком виде:

$docIsInWorkAcceptOrDraft = ...;
$bossHasSignerPriviledge = ...;
$userCanSign = ...;

if ($docIsInWorkAcceptOrDraft && $bossHasSignerPriviledge && $userCanSign) {
  // ...
}   

Почему возникает ошибка

Ошибка undefined index появляется при попытке обращения к не существующему элементу массива:

<?php
$arr = [];
echo $arr['title'];

Если в настройках PHP включено отображение ошибок уровня E_NOTICE, то при запуске этого кода в браузер выведется ошибка:

Notice: Undefined index: title in D:ProgramsOpenServerdomainstest.localindex.php on line 3

Как исправить ошибку

Если элемента в массиве нет, значит нужно ещё раз проверить логику программы и понять, почему в массиве нет тех данных, что вы ожидаете. Проверить, что по факту лежит в переменной можно с помощью функции var_dump():

$arr = [];
var_dump($arr);

При работе с массивами $_GET и $_POST нет гарантии, что клиент (браузер) отправил абсолютно все нужные нам данные. В этом случае можно добавить проверку на их существование:

<?php
if(!isset($_GET['body'], $_GET['title']))
	die('Пришли не все данные');

// Далее что-то делаем с данными

Если ключ массива существует не всегда, можно указать для него значение по-умолчанию:

<?php
if(isset($_GET['id']))
	$id = $_GET['id'];
else
	$id = 0;

Сокращённый синтаксис:

// С тернарным оператором
$id = isset($_GET['id']) ? $_GET['id'] : 0;

// С оператором объединения с null (PHP 7+)
$id = $_GET['id'] ?? 0;

Или если нужно сохранить значение по-умолчанию в сам массив:

<?php
if(!isset($arr['title']))
	$arr['title'] = '';

// Или короче (PHP 7+)
$arr['title'] = $arr['title'] ?? '';

// Или ещё короче (PHP 7.4+)
$arr['title'] ??= '';

Пишите в комментариях, если столкнулись с этой ошибкой и не можете найти решение.

Исправляем сообщение об ошибке – Notice: Undefined index.

Причина ошибки в том, что PHP не находит содержимое переменной. Для исправления такого нотиса, надо убрать эту переменную из вида.

Например, ошибка сообщает:

( ! ) Notice: Undefined index: variable in /var/www/html/wp-content/themes/….php on line 380

Открываем соответствующий файл и смотрим на место, которое не нравится интерпретатору:

if (!$data[‘variable’]) {
}

Видим что ругается на массив data, в котором находится ключ variable. А т.к. в данном случае, на этой странице, в массиве data ключ variable не содержится, то php ругается на его отсутствие.

Мы меняем этот код на другой:

if (!empty($data[‘variable’])) {
}

И ошибка исправлена. На этот раз PHP интерпретатор не ищет специальный ключ, а смотрит существует ли он или нет.

вот код :

<?php
session_start();

if ($_SESSION['users']) {
    header('Location: profile.php');
}

?>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Авторизация и регистрация</title>
    <link rel="stylesheet" href="assets/css/main.css">
</head>
<body>

    <!-- Форма авторизации -->

    <form>
        <label>Логин</label>
        <input type="text" name="login" placeholder="Введите свой логин">
        <label>Пароль</label>
        <input type="password" name="password" placeholder="Введите пароль">
        <button type="submit" class="login-btn">Войти</button>
        <p>
            У вас нет аккаунта? - <a href="/register.php">зарегистрируйтесь</a>!
        </p>
        <p class="msg none">Lorem ipsum dolor sit amet.</p>
    </form>

    <script src="assets/js/jquery-3.4.1.min.js"></script>
    <script src="assets/js/main.js"></script>

</body>
</html>


  • Вопрос задан

    19 янв.

  • 69 просмотров

Условие оберни в isset:
if (isset($_SESSION['users'])) {

Пригласить эксперта


  • Показать ещё
    Загружается…

12 июн. 2023, в 12:01

40000 руб./за проект

12 июн. 2023, в 11:51

500 руб./за проект

12 июн. 2023, в 11:16

5000 руб./за проект

Минуточку внимания

Подобные ошибки при запуске phpmyadmin в OpenServer можно наблюдать:

phpmyadmin в OpenServer

Parse error: syntax error, unexpected T_STRING, expecting T_CONSTANT_ENCAPSED_STRING or '(' in C:OpenServermodulessystemhtmlopenserverphpmyadminindex.php on line 8

или вот такой список

Fatal error: Uncaught exception 'UnexpectedValueException' with message 'Overloading of string functions using mbstring.func_overload is not supported by phpseclib.' in С:modulessystemhtmlopenserverphpmyadminvendorphpseclibphpseclibphpseclibbootstrap.php:11 Stack trace: #0 
С:modulessystemhtmlopenserverphpmyadminvendorcomposerautoload_real.php(66): require() #1
С:modulessystemhtmlopenserverphpmyadminvendorcomposerautoload_real.php(56): 'С:modulessyst...') #2 
С:modulessystemhtmlopenserverphpmyadminvendorautoload.php(7): ComposerAutoloaderInit::getLoader() #3
С:modulessystemhtmlopenserverphpmyadminlibrariescommon.inc.php(85): require_once('С:modulessyst...') #4
С:modulessystemhtmlopenserverphpmyadminindex.php(20): require_once('С:modulessyst...') #5 {main} thrown in
С:modulessystemhtmlopenserverphpmyadminvendorphpseclibphpseclibphpseclibbootstrap.php on line 11

Подобное возникает при неверной версии PHP. phpmyadmin поддерживает версию php только выше 5.5. Чтобы исправить, перейдите в настройки

phpmyadmin ошибка phpmyadminindex.php on line 8

И выберите версию 5.5 или выше. В Разделе http сервера выберите из списка подходящую версию Apache или Nginx. После сохранения, если http сервер и php модуль соответствую, OpenServer перезагрузится. Готово.

OpenServer ошибка bootstrap.php on line 11

Понравилась статья? Поделить с друзьями:
  • Index out of bounds java ошибка
  • Index 25 size 5 minecraft ошибка
  • Index 0 size 0 ошибка zona
  • Indesit стиральная машина мигает ошибки
  • Indesit стиральная машина коды ошибок аркадия