webDon
@webDon

Как сохранить значение элемента в БД?

Имеется строчка:
<h1 id="tm" >Итого: <span>0.0000</span></h1>
Каждую секунду 0.0000 увеличивается на 0.0001:
var s = 0.00001;
          var n;
          window.onload=function(){
          setInterval(function(){
          s+=0.00001;
          n = s.toFixed(5);
          document.getElementById("tm").children[0].innerHTML=n;
        },100);
          };


Задача:
При загрузке страницы доставать значение из БД и вставлять его в span
А после нажатия кнопки наоборот сохранять значение элемента span в БД.

Другими словами:
Предположим, что это баланс, который увеличивается каждую секунду. Как можно его сохранить?

Заранее спасибо всем за ответ!
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
Данный подход имеет недостатки. и основной - это безопасность:
Ваш вариант, предполагает управление неким балансом из JS, который выполняется на стороне клиента (в браузере). А как мы знаем, что может JS - то сможет повторить или изменить пользователь.
Более правильным было бы решение, когда данными управлял сервер - либо через PHP, либо сама БД. Например: в момент, когда страница генерируется - вы записываете в столбец строки с балансом еще и время. А когда пользователь нажмет кнопку, вычисляете сколько времени прошло и собственно изменяете баланс на нужную величину. При таком раскладе, пользователь не сможет просто так взять и хакнуть свой баланс.

Что касается вашего вопросы и самой реализации, то тут все просто:
(вы не указали какая БД, опишу про MySQL)
(для упрощения, я не делаю проверок на наличие и корректность данных. обязательно сделайте)

$userId = 1;

//Подключаем БД
$mysqli = new mysqli('example.com', 'user', 'password', 'database');
if ($mysqli->connect_errno) {
    echo "Не удалось подключиться к MySQL: " . $mysqli->connect_error;
    return;
}

//Сохраняем баланс, если передан параметр apply методом POST
if (isset($_POST['balance'])){
    $newBalance = $_POST['balance'];
    $stmt = $mysqli->prepare("UPDATE users SET balance=? WHERE id=?");
    $stmt->bind_param('si', $newBalance, $userId);
    $stmt->execute();
    echo "OK";
    return;
}

//Забираем текущий баланс 
$res = $mysqli->query('SELECT balance FROM users WHERE usersId='.$userId);
$row = $res->fetch_assoc();
$balance = $row['balance'];

//Где то дальше
echo "<span>$balance</span>";
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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