1 / 1 / 0
Регистрация: 16.02.2013
Сообщений: 41

Вывод данных из базы для каждого пользователя, для профиля

08.03.2014, 05:50. Показов 3307. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть такой класс и в нем функция(class Users) -
PHP
1
2
3
4
5
    
    public function data($param) {
        global $database;
        $database->query('SELECT * FROM users WHERE "'.$param.'"="'.$_SESSION['username'].'"');
    }
Вывожу я её в массиве -
PHP
1
2
3
4
5
6
function ParamUser($param) {
    $UsersParam = array (
        'email'    => users::data('email'),
    );
    return $UsersParam[$param];
}
А потом, заменяю тег {email} на нужное мне значение массива.
PHP
1
$engine->re('{email}',ParamUser('email'));
Дело в том, что он не хочет вообще выводить Email, тег {email} просто пустой. В чем проблема, помогите мне профи PHP, буду очень признателен. Уже весь google облазил, не могу понять, вроде все правильно. И кстати у меня PDO mysql.

Добавлено через 7 минут
вроде у меня не правильно был запроса написал, вот так правильно?:
PHP
1
$database->query('SELECT * "'.$param.'" FROM users WHERE username="'.$SESSION['username'].'"');
но у меня ошибку выводит:
PHP
1
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"email" FROM users WHERE username=""' at line 1SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"email" FROM users WHERE username=""' at line 1
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.03.2014, 05:50
Ответы с готовыми решениями:

Вывод древовидной структуры из базы для каждого пользователя
как мне вывести свою структуру в таком же виде как на картинке, если моя структура под цифрой 1 и моя структура вниз идет на 6 уровней

Вывод сообщений для каждого профиля свой
Как можно сделать чтобы выводились сообщения на странице профиля у каждого свое, т.е. если я оставлю сообщения на странице Ивана, то это...

Вывод профиля из базы данных PDO
Как вывести фото, имя пользователя при его авторизации, допустим что фото хранится в таблице profil , где id пользователя 3 , вывести его...

7
Невнимательный
 Аватар для ft4l
3118 / 1302 / 359
Регистрация: 08.02.2013
Сообщений: 7,627
Записей в блоге: 2
08.03.2014, 06:13
SELECT * "'.$param.'"
должно быть что-то одно или * или `'. $param .'`
//по всей видимости второе без кавычек или в таких ``
и функция data() должна возвращать значение
0
1 / 1 / 0
Регистрация: 16.02.2013
Сообщений: 41
08.03.2014, 06:29  [ТС]
Окей сделал так -
PHP
1
$database->query('SELECT "'.$param.'" FROM users WHERE username="'.$SESSION['username'].'"');
Ну вот убрал *, теперь ошибки нету, это радует.
Цитата - //по всей видимости второе без кавычек или в таких ``
С каких пор `` влияет на синтаксис или результат? Это вроде нужно для удобства.

Насчет фукцнии data(), она возвращает значение в массиве -
PHP
1
2
3
4
5
6
function ParamUser($param) {
    $UsersParam = array (
        'email'    => users::data('[B]email[/B]'),
    );
    return $UsersParam[$param];
}
p.s - по прежнему {email} просто пустой.
0
24 / 23 / 6
Регистрация: 19.02.2014
Сообщений: 114
08.03.2014, 14:51
Цитата Сообщение от gogaigor Посмотреть сообщение
$database->query('SELECT "'.$param.'" FROM users WHERE username="'.$SESSION['username'].'"');
PHP
1
$database->query("SELECT "$param" FROM users WHERE username=".$SESSION['username']."");
0
1 / 1 / 0
Регистрация: 16.02.2013
Сообщений: 41
08.03.2014, 16:27  [ТС]
тему закрываем и тут я понял что люди на этой форуме походу либо вообще не врубаются что я написал, либо не попались умельцы.

Решение:
PHP
1
2
3
4
5
6
    public function data($param) {
        global $database;
        $query = $database->query('SELECT * FROM users WHERE username="'.$_SESSION['username'].'"');
        $data = $database->fetch_array($query);
        return $data[$param];
    }
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.03.2014, 19:13
Цитата Сообщение от gogaigor Посмотреть сообщение
PHP
1
2
3
4
5
6
public function data($param) {
        global $database;
        $query = $database->query('SELECT * FROM users WHERE username="'.$_SESSION['username'].'"');
        $data = $database->fetch_array($query);
        return $data[$param];
    }
А зачем использование global в классе?
И не забывайте про экранирование данных. Судя по всему, вы используете mysqli, поэтому вам надо как-то так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class ... {
    private $database = NULL;
........
    public function __construct($connect_options) {
        ..........
        $this->database = new MySQLi(.....);
        .........
    }
    public function getData($param) {
        if(empty($_SESSION['username']))
            return false;
        $stmt =  $this->database->stmt_init();
        $stmt->prepare('SELECT `' . $param . '` FROM `users` WHERE `username`= ?');
        $stmt->bind_param("s", $_SESSION['username']);
        $stmt->bind_result($found);
        $stmt->fetch();
        $stmt->close();
        return $found;
    }
}

Не по теме:

возможно, я несколько ошибся в использовании подготовленных выражений в MySQLi, т.к. давно его не использовал..

0
1 / 1 / 0
Регистрация: 16.02.2013
Сообщений: 41
08.03.2014, 20:06  [ТС]
Я global использую в функции, а не в классе, у меня pdo а не mysqli, оно быстрее.
и вот класс database:
PHP
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
if(!defined('BLOG')) die('Game Over!');
 
class database {
 
    protected $db = null;
    
    public function connect($db_host, $db_user, $db_pass, $db_base) {
        try {
            $db = explode(':', $db_host); $db_host = $db[0]; $db_port = $db[1];
            $this->db = new PDO('mysql:host='.$db_host.';port='.$db_port.';dbname='.$db_base, $db_user, $db_pass);
            $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) { die('Ошибка соединения с Базой Данных: <b>'.$e->getMessage().'</b>'); }
        
        $this->query('SET `character_set_client`=\'utf8\'');
        $this->query('SET `character_set_results`=\'utf8\'');
        $this->query('SET `collation_connection`=\'utf8_unicode_ci\'');
        $this->query('SET `time_zone`=\''.date('P').'\'');
    }
    
    public function query($string) { try { return $this->db->query($string); } catch(PDOException $e) { echo $e->getMessage(); } }  
    public function result($string) { try { return $string->fetchColumn(); } catch(PDOException $e) { echo $e->getMessage(); } }    
    public function num_rows($string) { try { return $string->rowCount(); } catch(PDOException $e) { echo $e->getMessage(); } }
    public function fetch_array($string) { try { return $string->fetch(PDO::FETCH_BOTH); } catch(PDOException $e) { echo $e->getMessage(); } }
    public function fetch_row($string) { try { return $string->fetch(PDO::FETCH_NUM); } catch(PDOException $e) { echo $e->getMessage(); } }
    public function close() { $this->db = null; }
    
}
$database = new database();
$database->connect('localhost','root','','');
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.03.2014, 20:29
Цитата Сообщение от gogaigor Посмотреть сообщение
Я global использую в функции, а не в классе
Я основывался на "public" перед именем функции. Это возможно только внутри класса, при объявлении обычной функции с использованием модификатора доступа пых выдаст ошибку синтаксиса.
Цитата Сообщение от gogaigor Посмотреть сообщение
у меня pdo а не mysqli
опять же, основывался на fetch_array(). В PDO - fetch().
Цитата Сообщение от gogaigor Посмотреть сообщение
оно быстрее
это не так.
Цитата Сообщение от gogaigor Посмотреть сообщение
PHP
1
$db = explode(':', $db_host); $db_host = $db[0]; $db_port = $db[1];
PHP
1
list($db_host, $db_port) = explode(':', $db_host);
Цитата Сообщение от gogaigor Посмотреть сообщение
PHP
1
2
$this->db = new PDO('mysql:host='.$db_host.';port='.$db_port.';dbname='.$db_base, $db_user, $db_pass);
            $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
PHP
1
2
3
4
5
6
7
8
9
$this->db = new PDO(
    'mysql:host='.$db_host.';port='.$db_port.';dbname='.$db_base,
    $db_user,
    $db_pass,
    array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES "utf8"',
    )
);
Остальные установки кодировок не нужны.
Цитата Сообщение от gogaigor Посмотреть сообщение
PDO::FETCH_BOTH
Зачем оба?
Цитата Сообщение от gogaigor Посмотреть сообщение
try....catch
Это надо добавить за классом, там, где вы его используете, а не внутри него.. Если только вы хотите записывать данные в логи, но не забывайте о том, что в остальном коде вы не получите эти данные.
Цитата Сообщение от gogaigor Посмотреть сообщение
$string->
не очень подходящее название переменной. Хотя бы $res или $resource.

Добавлено через 4 минуты
PHP
1
2
3
4
5
6
7
8
public function getData($param) {
        if(empty($_SESSION['username']))
            return false;
        $res = $this->db->prepare('SELECT `' . $param . '` FROM `users` WHERE `username`= ?');
        $res->execute(array($_SESSION['username']));
        $row = $res->fetch(PDO::FETCH_NUM);
        return $row[0];
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.03.2014, 20:29
Помогаю со студенческими работами здесь

Картинки для профиля пользователя
Всем доброго времени суток. Есть много тем как добавить картинку в бд в поле blob и это я сделал. Но есть такой вопрос как же мне...

Вывод соответствующих данных для каждого элемента списка
Здравствуйте. Проблема заключается в следующем. Имеется список выводимый запросом из базы данных. $list = $connect-&gt;query(' ...

Сериализация данных профиля пользователя
Здравствуйте, подскажите пожалуйста Есть БД, в одной из табличек хранится данные профиля пользователя в виде: ...

Как в php сделать вывод на печать для базы данных
Как сделать вывод на печать данных из б.д , которые выведенны на сайт путем запросов

Создание базы данных справочного бюро (широкого профиля)
Помогите сделать базы данных справочного бюро(широкого профиля)!!! Всем спасибо зарание!!!


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru