UPDATE当前登录用户的sql表值?

时间:2015-02-25 08:28:09

标签: php mysql sql phpmyadmin alter

我有一个登录系统和点系统的页面。每当用户完成任务时,他或她将获得+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中的echo部分回应了登录用户的用户名,但数据库只是没有更新。没有错误。

Screenshot of table structure

非常感谢你们的回答,非常感谢!

2 个答案:

答案 0 :(得分:1)

我认为你需要

$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
));

答案 1 :(得分:0)

您只能通过了解用户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";

这就是它的全部。