За последние 24 часа нас посетили 18878 программистов и 1624 робота. Сейчас ищут 926 программистов ...

Ошибка: Функция не определена

Тема в разделе "PHP для новичков", создана пользователем BezMizinca, 21 ноя 2015.

  1. BezMizinca

    BezMizinca Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    42
    Симпатии:
    0
    Помогите разобраться почему в этом случае не работает функция.
    Создал новый фаил allpage.php, в index.php заинклюдил его. Но что-то пошло не так, а что не могу понять.
    allpage.php
    Код (PHP):
    1. if (isset($_SESSION['user'])){
    2.     $res = q(" SELECT * FROM `users` WHERE
    3.     `id` = ".$_SESSION['user']['id']."
    4.     LIMIT 1
    5.     ");
    6.     $_SESSION['user'] = mysqli_fetch_assoc($res);
    7.     if ($_SESSION['user']['activate'] != 1 ) {
    8.         header("Location: index.php?modules=main");
    9.         exit();
    10.     }
    11. } 
    Ошибка:
    Fatal error: Call to undefined function q() in Z:\home\test1.ru\www\modules\allpage.php on line 3
    Сама функция:
    Код (PHP):
    1. function q($query){
    2.     global $link;
    3.     $res = mysqli_query($link,$query);
    4.     if($res === false ){
    5.         $info  = debug_backtrace();
    6.         $error = date("d.m.Y H:i:s")." ERROR QUERY: ".$query."</br>\n".mysqli_error($link)." in a file ".$info['0']['file']." on line ".$info['0']['line'];
    7.         file_put_contents('./logs/mysql.log',strip_tags($error)."\n\n",FILE_APPEND);
    8.         echo $error;
    9.         exit();
    10.     } else {
    11.         return $res;
    12.     }
    13. } 
    Исправил название темы на более соответствующее.
    - модераторъ


    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Re: Не работает функция.

    А где определена функция q() ?
     
  3. BezMizinca

    BezMizinca Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    42
    Симпатии:
    0
    Код (PHP):
    1.  $res = q("
    2.     SELECT * 
    3.     FROM `users` 
    4.     WHERE
    5.     `id` = ".$_SESSION['user']['id']."
    6.     LIMIT 1
    7.     "); 
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Не работает функция.

    нет, это она вызвана. где она определена? ну то есть function q ($param) { /* code */ }
     
  5. BezMizinca

    BezMizinca Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    42
    Симпатии:
    0
    В других случаях нет ошибок, а только в этом.
    ./libs/default.php
    Код (PHP):
    1.        function q($query){
    2.         global $link;
    3.         $res = mysqli_query($link,$query);
    4.         if($res === false ){
    5.             $info  = debug_backtrace();
    6.             $error = date("d.m.Y H:i:s")." ERROR QUERY: ".$query."</br>\n".mysqli_error($link)." in a file ".$info['0']['file']." on line ".$info['0']['line'];
    7.             file_put_contents('./logs/mysql.log',strip_tags($error)."\n\n",FILE_APPEND);
    8.             echo $error;
    9.             exit();
    10.         } else {
    11.             return $res;
    12.         }
    13.     }
    14.  
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Не работает функция.

    а, теперь вижу что в первом сообщении есть код функции. ну тогда вопрос: а этот файл подключается тем файлом который падает в фатальную ошибку неопределенной функции?
     
  7. BezMizinca

    BezMizinca Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    42
    Симпатии:
    0
    все подключается через index.php

    Код (PHP):
    1. include_once './modules/allpage.php';
    2. include_once './config.php';
    3. include_once './libs/default.php';
    4. include_once './variables.php';
    5.  
    6. $link = mysqli_connect(Core::$DB_HOST, Core::$DB_LOGIN, Core::$DB_PASSWORD, Core::$DB_NAME);
    7. mysqli_set_charset($link, 'utf8');
    8. include './modules/'.$_GET['modules'].'/'.$_GET['page'].'.php';
    9. include './skins/'.Core::$SKIN.'/index.tpl'; 
    Добавлено спустя 1 минуту 25 секунд:
    Неужели ошибка в порядке инклюда?

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Re: Не работает функция.

    Когда возникает ошибка ты какой адрес открываешь? http://test1.ru/... Что дальше?
     
  9. BezMizinca

    BezMizinca Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    42
    Симпатии:
    0
    index.php

    Я поменял местами инклюд и ошибка пропала
    До
    Код (PHP):
    1. include_once './modules/allpage.php';
    2. include_once './config.php';
    3. include_once './libs/default.php';
    4. include_once './variables.php'; 
    После
    Код (PHP):
    1. include_once './config.php';
    2. include_once './libs/default.php';
    3. include_once './variables.php';
    4. include_once './modules/allpage.php'; 
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Ну да, точно, нельзя обратиться к функции, которая определяется позже.

    Исключение есть: если вызов и определение функция описаны в одном файле, то можно поставить вызов раньше определения, при условии, что определение функции не окружено никакими условиями.
    Но если функция описана в подключаемом файле, то он должен быть заинклюден раньше вызова. Так устроен PHP.

    Добавлено спустя 8 минут 19 секунд:
    Вот единственный рабочий вариант, когда вызов стоит раньше определения и ошибки НЕ будет:

    Код (PHP):
    1. <?php
    2.  
    3. echo q('text');
    4.  
    5. // функция определяется позже вызова - всё ok
    6. function q($s)
    7. {
    8.     return '[[[ ' . $s . ' ]]]';
    9. }
    Если поместить функцию в отдельный файл, то будет ошибка. Вот так:
    index.php
    Код (PHP):
    1. <?php
    2.  
    3. echo q('text');
    4.  
    5. // функция определяется позже вызова - ошибка Undefined function
    6. include 'lib.php';
    lib.php
    Код (PHP):
    1. <?php
    2.  
    3. function q($s)
    4. {
    5.     return '[[[ ' . $s . ' ]]]';
    6. }

    И вот так будет ошибка:
    Код (PHP):
    1. <?php
    2.  
    3. echo q('text');
    4.  
    5. // функция определяется позже вызова - ошибка Undefined function
    6. if (true) {
    7. function q($s)
    8. {
    9.     return '[[[ ' . $s . ' ]]]';
    10. }
    11. }
    Но если передвинуть echo q('text'); ниже определения, то всё сработает.
     
  11. BezMizinca

    BezMizinca Новичок

    С нами с:
    14 янв 2015
    Сообщения:
    42
    Симпатии:
    0
    Спасибо большое!