UPDATE sql table 当前登录用户的值?
UPDATE sql table value of the currently logged in user?
我的这个页面有登录系统和积分系统。每当用户完成一项任务时,他或她将获得+5 分。现在,如何更新当前登录用户数据库中的点值?
我知道我可以 UPDATE table SET point=+5 WHERE id=usersid
,但我不知道如何获取当前登录用户的 ID?登录注册系统是用PDO写的
这是我 config.php 的完整代码:
<?php
$username = "root";
$password = "";
$host = "localhost";
$dbname = "login";
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
try { $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); }
catch(PDOException $ex){ die("Kunne ikke forbinde til databasen: " . $ex->getMessage());}
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
header('Content-Type: text/html; charset=utf-8');
session_start();
?>
这是我的 reward.php,它不起作用:
<?php
require('config.php');
$userId = htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8');
$query = "UPDATE users SET point=point+5";
//Yes, i do realize that i need a WHERE to avoid updating the whole table.
echo("$userId's point er opdateret.");
?>
reward.php 中的回显部分很好地回显了登录用户的用户名,但数据库只是没有更新。也没有错误。
非常感谢各位的回答,非常感谢!
我觉得你需要
$pdo = new PDO('mysql:host=localhost;dbname=someDatabase', $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('UPDATE table SET point = point + 5 WHERE id = :usersid');
$stmt->execute(array(
':usersid' => $user_id
));
您只能通过了解某个用户的用户 ID(或该用户独有的其他值)来编辑其积分。
正如您在评论中明确指出的那样,您将用户 ID 保存在会话中。您必须牢记的是,将您的 config.php
包含在用户点数更新的每个页面中。
require 'config.php';
接下来您需要知道的是,您可以使用 PHP 的全局会话变量从会话中取回用户 ID。
$userId = $_SESSION['user_id']; // Note: this could have some other name in your case
现在我们有了用户 ID,我们可以开始更新该用户的积分了。我不知道你与数据库通信的方法是什么,所以我把它留给你了。
现在我们要更新用户积分。
$query = "UPDATE users SET point=point+5 WHERE user_id='".$userId."' LIMIT 1";
仅此而已。
我的这个页面有登录系统和积分系统。每当用户完成一项任务时,他或她将获得+5 分。现在,如何更新当前登录用户数据库中的点值?
我知道我可以 UPDATE table SET point=+5 WHERE id=usersid
,但我不知道如何获取当前登录用户的 ID?登录注册系统是用PDO写的
这是我 config.php 的完整代码:
<?php
$username = "root";
$password = "";
$host = "localhost";
$dbname = "login";
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
try { $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); }
catch(PDOException $ex){ die("Kunne ikke forbinde til databasen: " . $ex->getMessage());}
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
header('Content-Type: text/html; charset=utf-8');
session_start();
?>
这是我的 reward.php,它不起作用:
<?php
require('config.php');
$userId = htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8');
$query = "UPDATE users SET point=point+5";
//Yes, i do realize that i need a WHERE to avoid updating the whole table.
echo("$userId's point er opdateret.");
?>
reward.php 中的回显部分很好地回显了登录用户的用户名,但数据库只是没有更新。也没有错误。
非常感谢各位的回答,非常感谢!
我觉得你需要
$pdo = new PDO('mysql:host=localhost;dbname=someDatabase', $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('UPDATE table SET point = point + 5 WHERE id = :usersid');
$stmt->execute(array(
':usersid' => $user_id
));
您只能通过了解某个用户的用户 ID(或该用户独有的其他值)来编辑其积分。
正如您在评论中明确指出的那样,您将用户 ID 保存在会话中。您必须牢记的是,将您的 config.php
包含在用户点数更新的每个页面中。
require 'config.php';
接下来您需要知道的是,您可以使用 PHP 的全局会话变量从会话中取回用户 ID。
$userId = $_SESSION['user_id']; // Note: this could have some other name in your case
现在我们有了用户 ID,我们可以开始更新该用户的积分了。我不知道你与数据库通信的方法是什么,所以我把它留给你了。
现在我们要更新用户积分。
$query = "UPDATE users SET point=point+5 WHERE user_id='".$userId."' LIMIT 1";
仅此而已。