Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 16.02.2013
Сообщений: 41

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

08.03.2014, 05:50. Показов 3267. Ответов 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
2840 / 1268 / 358
Регистрация: 08.02.2013
Сообщений: 7,391
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru