@AndrewChirkov
Верстальщик

Как сделать вывод данных с текущего аккаунта через MySQL и PHP?

С этим вопросом мучаюсь уже не знаю сколько месяцев. Что на обычной java, что на php у меня одна проблема. Но сейчас не про java.
Я создал форму регистрации и логина. В бд добавляются данные из этих полей. Так же я сделал, что при регистрации, в бд добавляется начальное значение денег $money=255 и записывается в колонку бд. Это все работает.
Так вот вопрос в том, как получать эти самые money для текущего аккаунта. Именно money текущего аккаунта. Все что я делал - возвращает либо ошибку, либо первое значение money в базе. Мне нужно чтобы когда я вписывал это значение в бд вручную, оно менялось на сайте на текущем аккаунте.
Это самая банальная функция для любого сайта или приложения, но я так и не понимаю как это работает.
Внимание, мне не нужен совет по типу php калл и на нем лучше не делать и т.п. Мне нужен совет, который поможет мне в текущей ситуации, либо обьяснит как это в принципе работает.
<?php

$login = $_POST['login'];
$password = $_POST['password'];

$mysql = new mysqli ('localhost','root','root','register-bg');

$result = $mysql->query("SELECT * FROM `users` WHERE `login` = '$login' AND `password` = '$password'");
$user = $result->fetch_assoc();

if(count($user) == 0) {
 echo "Пользователь не найден";
 exit();
}

//$money =$user['money']; - Сомнительный способ получения money с логином

$mysql->close();

header('Location: /');


?>


кстати, если после подключения к бд и логина прописать $money =$user['money']; - оно выдает правильное значение денег текущего аккаунта, но это работает только если каждый раз логиниться. Я придумал костылями через cookie, но это полная лажа, а не способ. Спасайте.

Заранее спасибо!

5f4e982200f0c927492811.jpeg

Работаю с OpenServer с белым IP. Так что если кто хочет помочь, могу предоставить сайт и все файлы.
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
@FanatPHP
Чебуратор тега PHP
Смотри внимательно.
1. Надо стартовать сессию
2. Надо правильно соединиться с БД
3. Надо не хранить пароль в открытом виде
4. Надо не пихать переменные прямо в запрос, а всегда передавать отдельно

session_start();
$login = $_POST['login'];
$password = $_POST['password'];

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysql = new mysqli ('localhost','root','root','register-bg');
$mysqli->set_charset($charset);

$stmt = $mysql->prepare("SELECT * FROM `users` WHERE `login` = ?");
$stmt->bind_param("s", $login);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();

if($user && password_verify($password, $user['password'])) {
    $_SESSION['user_id'] = $user['id'];
}


про password_verify прочтешь самостоятельно

потом на другой странице
1. стартовать сессию
2. получить из неё id
3. по id получить из базы юзера

session_start();

include 'mysqli.php';

$stmt = $mysql->prepare("SELECT * FROM `users` WHERE `id` = ?");
$stmt->bind_param("s", $_SESSION['user_id']);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();

echo $user['money'];


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

если будут вылезать ошибки, их надо гуглить
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@necrodeflorator
Пользователь авторизуется, достаешь из бд его данные и кладешь в сессию его id ($_SESSION) после этого каждый раз проверяешь есть ли в сессии id пользователя, вытаскивает из бд данные и выводишь что тебе надо
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Сессия. Не та которую ты мог бы завалить в институте, а сессия - метод хранения данных между запросами.
Ответ написан
leonovkv
@leonovkv
PHP/SQL
Делаешь авторизацию пользователя, вставляешь проверку mysql, если он находит совпадение, то создается сессия -
$count = mysqli_query($con, "SELECT * FROM `users` WHERE `login` = '$login' AND `password` = '$password'");
if (mysqli_num_rows($count) == 1) {
//создаешь сессию
}

так же в скрипт авторизации добавляешь, проверку на наличие сессии, и если она есть, авторизация по сессии, если нет, проверка данных, и если все четко, создается сессия
Ответ написан
@VadimKholodilo
Как я понял, человек заходит на сайт, какой-то другой скрипт обновляет данные в базе. После обновления данных в базе, человек, который зашел в свой аккаунт, должен видеть то, что произошло изменение баланса. Для этого вам поможет AJAX. То есть, на стороне PHP должен быть API, который отдаёт баланс пользователя, а на Front-end должен быть JavaScript, который получает по API значения. Что бы API не был доступен кому угодно, API должен проверять TOKEN, который должен быть в запросе. В заголовке.
Успехов!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы