Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 02.02.2015
Сообщений: 29
1

Include. Не видит пользовательские функции

19.07.2015, 22:12. Показов 3804. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте ув. php`шники.
Вот в чем суть вопроса. После 3 недель изучения php. Была написана более менее рабочая CMS. (Со всем базовым функционалом), но вот в чем проблема. Изначально учить и писав код. У меня получилось многовато файлов для обработки различных данных. Там файл, который подключаеться на главной к примеру, и загружает все новости, в зависимости от установленого количества новостей на главной. Или файл, который подгружает на страницу комментарии. Или файл для обработки жалоб пользователей. и таких файлов, как и функций системы вышло много. Пришла в голову идея переписать все это более компактно в функции и подключать только файл core.php
И оттуда вызывать функции. Но при написании функций в файле core.php И подключении его.
На странице, на который мы подключили файл php не видит функцию. Как сделать чтобы при подключении core.php к full_news.php Можно было вызвать функцию из core.php, передать ей значения и получить ответ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2015, 22:12
Ответы с готовыми решениями:

Include не видит переменные
Здравствуйте властелины php. Подключаю файл с помощью include, в нем используется переменные $pages...

Include не видит файл
Путь файле D:\soft\open\OSPanel\domains\abak-test\registratsiya\index.php В нём...

Пользовательские функции PHP
Возникла такая проблема: ...есть html таблица (к примеру) for ($i = 1; $i <=...

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

10
1931 / 1522 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
19.07.2015, 22:59 2
Цитата Сообщение от marik_ukraine Посмотреть сообщение
Как сделать чтобы при подключении core.php к full_news.php Можно было вызвать функцию из core.php, передать ей значения и получить ответ?
файл function.php
PHP
1
2
3
function a(){
echo  "I function a";
}
файл index.php
PHP
1
2
require 'function.php';
  a(); // выведет -  I function a
что у вас не видит не понятно. может вы вызываете функцию раньше подключения
PHP
1
2
a();
require 'function.php';
1
0 / 0 / 0
Регистрация: 02.02.2015
Сообщений: 29
19.07.2015, 23:09  [ТС] 3
Нет. Я вызываю после подключения. Сейчас еще буду пробовать.
0
1931 / 1522 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
19.07.2015, 23:12 4
может ошибка в имени функции
1
0 / 0 / 0
Регистрация: 02.02.2015
Сообщений: 29
19.07.2015, 23:25  [ТС] 5
Странно при использовании require - Заработало.
А при include_once не хотело. никак вообще. Почему так?

Добавлено через 7 минут
И еще один вопрос. Есть такая консрукция на index.php
PHP/HTML
1
2
3
4
5
6
if (!empty($_SESSION['u_id'])) {
        
        $id_user = $_SESSION['u_id'];
 
        User_info($id_user);
    }
И есть конструкция на core.php
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php 
    
    include_once 'db.php';
 
    session_start();
 
    $temp = $mysqli->query('SELECT * FROM setting');
 
    $core_setting = $temp->fetch_assoc();
 
    $temp->close();
 
    if ($core_setting['close'] == 1) {
 
        header('Location: '."/template/warning.php");
 
    };
 
    function User_info($id_user)
    
    {
        
        $temp = $mysqli->query("SELECT * FROM `user` WHERE `id` = '$id_user'");
 
        $user = $temp->fetch_assoc();
 
    }
 
?>
Когда вхожу на сайт поучаеться такое
"
Fatal error: Call to a member function query() on null in F:\OpenServer\domains\cms.com\system\core.php on line 23"

23 строка это -
PHP/HTML
1
$temp = $mysqli->query("SELECT * FROM `user` WHERE `id` = '$id_user'");
Добавлено через 1 минуту
А если использовать код, что в функции на главной . Вот таким образом
PHP/HTML
1
2
3
4
5
6
7
8
    if (!empty($_SESSION['u_id'])) {
        
        $temp = $mysqli->query("SELECT * FROM `user` WHERE `id` = '$_SESSION[u_id]'");
 
        $user = $temp->fetch_assoc();
 
        $temp->close();
    }
Все работает отлично. А хочеться все сделать как надо
0
1931 / 1522 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
20.07.2015, 00:15 6
Цитата Сообщение от marik_ukraine Посмотреть сообщение
function User_info($id_user)

{

$temp = $mysqli->query("SELECT * FROM `user` WHERE `id` = '$id_user'");

$user = $temp->fetch_assoc();

}
откуда в функции переменная $mysqli? нужно ее передать в виде параметра или в функции сделать
PHP
1
global $mysqli;
1
0 / 0 / 0
Регистрация: 02.02.2015
Сообщений: 29
20.07.2015, 12:32  [ТС] 7
PHP/HTML
1
$mysqli
- Это переменная для создания запросов в базе. Она есть в db.php
Который подключен к core.php
Посмотрите выше функции.
Там она тоже используеться и нормально работает. А в самой функции ошибку бьет.
Пересмотрите core.php
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php 
    
    include_once 'db.php';
 
    session_start();
 
    $temp = $mysqli->query('SELECT * FROM setting');
 
    $core_setting = $temp->fetch_assoc();
 
    $temp->close();
 
    if ($core_setting['close'] == 1) {
 
        header('Location: '."/template/warning.php");
 
    };
 
    function User_info($id_user)
    
    {
        
        $temp = $mysqli->query("SELECT * FROM `user` WHERE `id` = '$id_user'");
 
        $user = $temp->fetch_assoc();
 
    }
 
?>
0
1931 / 1522 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
20.07.2015, 15:18 8
Цитата Сообщение от marik_ukraine Посмотреть сообщение
Там она тоже используеться и нормально работает. А в самой функции ошибку бьет.
почитайте, область видимости переменных. я понимаю что $mysqli есть, но функция то, ее не видит. чтобы использовать ее в функции объявите global $mysqli;
1
0 / 0 / 0
Регистрация: 02.02.2015
Сообщений: 29
20.07.2015, 16:11  [ТС] 9
при использовании
PHP/HTML
1
global $mysqli;
Внутри тела функции. Ошибка пропала. Но функция должна возвращать значения. То есть мне нужно ее выполнить чтобы переменная $user стала массивом. А потом в нужном месте показать какой-то элемент массива.

То есть В index.php


PHP/HTML
1
2
3
4
5
6
7
if (!empty($_SESSION['u_id'])) {
        
        $user_id = $_SESSION['u_id'];
 
        Get_User_Info($user_id);
        
    }
в core.php
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Get_User_Info($user_id)
    
    {
        global $mysqli;
 
        $temp = $mysqli->query("SELECT * FROM `user` WHERE `id` = '$user_id'");
 
        $user = $temp->fetch_assoc();
 
        $temp->close();
 
        global $user;
 
    }
И в index.php Надо вызвать в определенном месте
PHP/HTML
1
echo $user['name'];
Но оно выводит пустое значение. В чем проблема?
0
1931 / 1522 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
20.07.2015, 16:28 10
Лучший ответ Сообщение было отмечено marik_ukraine как решение

Решение

замени
Цитата Сообщение от marik_ukraine Посмотреть сообщение
function Get_User_Info($user_id)

{
global $mysqli;

$temp = $mysqli->query("SELECT * FROM `user` WHERE `id` = '$user_id'");

$user = $temp->fetch_assoc();

$temp->close();

global $user;

}
на
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Get_User_Info($user_id)
    
    {
        global $mysqli;
 
        $temp = $mysqli->query("SELECT * FROM `user` WHERE `id` = '$user_id'");
 
        $user = $temp->fetch_assoc();
 
        $temp->close();
 
        return $user;
 
    }
и
PHP
1
2
3
4
5
6
7
if (!empty($_SESSION['u_id'])) {
        
        $user_id = $_SESSION['u_id'];
 
        Get_User_Info($user_id);
        
    }
на
PHP
1
2
3
4
5
6
7
8
if (!empty($_SESSION['u_id'])) {
        
        $user_id = $_SESSION['u_id'];
 
        $user = Get_User_Info($user_id);
 
        echo $user['name'];
    }
1
0 / 0 / 0
Регистрация: 02.02.2015
Сообщений: 29
20.07.2015, 21:05  [ТС] 11
Огромное вам спасибо. Теперь все работает как надо
0
20.07.2015, 21:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2015, 21:05
Помогаю со студенческими работами здесь

Работа с файлами в C# с исп. библиотек #include <stdio.h> #include <stdlib.h> #include <math.h> #include <io.h>
В типизированном файле записаны названия городов и их численность. Увеличить численность каждого...

#include с++ не видит файл
kuzmin@maxt:~/fnal/root$ cat j2/w.C #include &lt;iostream&gt; using namespace std; double ymu1=0.;...

#include не видит файл
Я использую Visual Studio 2017. Все заголовочные файлы кладу в соответствующую (изначально...

Компилятор не видит #include <vcl.h>
#include &lt;iostream&gt; #include &lt;locale.h&gt; #include &lt;vcl.h&gt; #pragma hdrstop using namespace std;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru