用PHP制作一个安全的评分系统
在我的网站上,我每页显示5个问题(MCQ),当用户请求新页面时,我会调用一个脚本用PHP制作一个安全的评分系统,php,web,Php,Web,在我的网站上,我每页显示5个问题(MCQ),当用户请求新页面时,我会调用一个脚本score\u update(),并将此页面的分数显示给他,然后显示下一页 scoreUpdate()脚本类似于 <?php //connect to database //update the score ?> PS:用户可能在将来的某个时候再次尝试相同的问题。没有任何限制。因此,没有必要跟踪他提出的问题。只有当他试图回答这个问题并正确回答时,他才能得到分数。希望我说的很清楚。像这样的问题有不同的解决
score\u update()
,并将此页面的分数显示给他,然后显示下一页
scoreUpdate()
脚本类似于
<?php
//connect to database
//update the score
?>
PS:用户可能在将来的某个时候再次尝试相同的问题。没有任何限制。因此,没有必要跟踪他提出的问题。只有当他试图回答这个问题并正确回答时,他才能得到分数。希望我说的很清楚。像这样的问题有不同的解决方案。这与访客计数器或民意测验基本相同 如果有一个用户已经触发了该脚本并在每次页面调用中重新识别他,那么至少您必须将您的信息存储在某个地方
- 第一个也是最好的方法是使用一个用户帐户登录,并将其保存在PHP$会话中,或者直接保存在与用户id/帐户id链接的数据库中。但是,如果您的页面现在没有登录,我想这对于一个较小的问题来说太难了。但是如果你已经有一个登录面板,这是目前为止最好的解决方案
- 另一种方法是保存cookie,如果用户不同意保存cookie,则最近在一些国家可能会出现法律问题,并且cookie可以删除,因此很容易操作
- 你也可以保存用户的IP地址:更难操作(需要重新启动互联网等,没有人会这么做十几次来伪造你的分数计数器),但如果多人共享同一互联网连接,只有其中一人可以获得一分
它们各有优缺点。根据你的偏执程度,如果你想让欺骗/虐待变得更难,你也可以将多种方法结合起来,但这取决于你自己。对于这样的问题,有不同的可能解决方案。这与访客计数器或民意测验基本相同 如果有一个用户已经触发了该脚本并在每次页面调用中重新识别他,那么至少您必须将您的信息存储在某个地方
- 第一个也是最好的方法是使用一个用户帐户登录,并将其保存在PHP$会话中,或者直接保存在与用户id/帐户id链接的数据库中。但是,如果您的页面现在没有登录,我想这对于一个较小的问题来说太难了。但是如果你已经有一个登录面板,这是目前为止最好的解决方案
- 另一种方法是保存cookie,如果用户不同意保存cookie,则最近在一些国家可能会出现法律问题,并且cookie可以删除,因此很容易操作
- 你也可以保存用户的IP地址:更难操作(需要重新启动互联网等,没有人会这么做十几次来伪造你的分数计数器),但如果多人共享同一互联网连接,只有其中一人可以获得一分
它们各有优缺点。根据你的偏执程度,如果你想让欺骗/虐待变得更难,你也可以将多种方法结合起来,但这取决于你自己。对于这样的问题,有不同的可能解决方案。这与访客计数器或民意测验基本相同 如果有一个用户已经触发了该脚本并在每次页面调用中重新识别他,那么至少您必须将您的信息存储在某个地方
- 第一个也是最好的方法是使用一个用户帐户登录,并将其保存在PHP$会话中,或者直接保存在与用户id/帐户id链接的数据库中。但是,如果您的页面现在没有登录,我想这对于一个较小的问题来说太难了。但是如果你已经有一个登录面板,这是目前为止最好的解决方案
- 另一种方法是保存cookie,如果用户不同意保存cookie,则最近在一些国家可能会出现法律问题,并且cookie可以删除,因此很容易操作
- 你也可以保存用户的IP地址:更难操作(需要重新启动互联网等,没有人会这么做十几次来伪造你的分数计数器),但如果多人共享同一互联网连接,只有其中一人可以获得一分
它们各有优缺点。根据你的偏执程度,如果你想让欺骗/虐待变得更难,你也可以将多种方法结合起来,但这取决于你自己。对于这样的问题,有不同的可能解决方案。这与访客计数器或民意测验基本相同 如果有一个用户已经触发了该脚本并在每次页面调用中重新识别他,那么至少您必须将您的信息存储在某个地方
- 第一个也是最好的方法是使用一个用户帐户登录,并将其保存在PHP$会话中,或者直接保存在与用户id/帐户id链接的数据库中。但是,如果您的页面现在没有登录,我想这对于一个较小的问题来说太难了。但是如果你已经有一个登录面板,这是目前为止最好的解决方案
- 另一种方法是保存cookie,如果用户不同意保存cookie,则最近在一些国家可能会出现法律问题,并且cookie可以删除,因此很容易操作
- 你也可以保存用户的IP地址:更难操作(需要重新启动互联网等,没有人会这么做十几次来伪造你的分数计数器),但如果多人共享同一互联网连接,只有其中一人可以获得一分
它们各有优缺点。根据你的偏执程度,如果你想让作弊/虐待变得更难,你也可以将多个选项组合在一起,但这取决于你。检查
$\u服务器['HTTP\u REFERER']
值
- 如果相同,则重新加载页面。(什么也不做)
- 如果是上一个:更新
------------------------------------------ user_id | username | password | points ------------------------------------------
users +------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+----------------+ | user_id | smallint(5) | NO | PRI | NULL | auto_increment | | username | varchar(10) | NO | | NULL | | +------------+-------------+------+-----+---------+----------------+ ... You'll have more columns, but you get the idea
questions +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | qid | smallint(5) | NO | PRI | NULL | auto_increment | | question | varchar(10) | NO | | NULL | | | votes | smallint(5) | NO | | 0 | | +----------+--------------+------+-----+---------+----------------+
votes +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | qid | smallint(5) | NO | | NULL | | | user_id| smallint(5) | NO | | NULL | | +--------+-------------+------+-----+---------+-------+
INSERT INTO `votes` (`qid`,`user_id`) VALUES (1, 1);
SELECT `user_id` FROM `votes` WHERE (`user_id`=1) AND (`qid`=1);
ALTER TABLE votes ADD type ENUM('up', 'down') NOT NULL DEFAULT 'up';
+---------+-------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------------+------+-----+---------+-------+ | qid | smallint(5) | NO | | NULL | | | user_id | smallint(5) | NO | | NULL | | | type | enum('up','down') | NO | | up | | +---------+-------------------+------+-----+---------+-------+
SELECT `user_id` FROM `votes` WHERE (`user_id`=1) AND (`qid`=1) AND (`type`='up');
----------------------------------- user_id | question_id | answer -----------------------------------
---------------------------- user_id | questionnaire_id ----------------------------
------------------------------------------ questionnaire_id | question_id | answer ------------------------------------------
update_score ($question_number, $choice) if current question for this quizz and user is not set to $question_number ignore request else set choice for this specific question and update score increment current question (possibly reaching the end of the quizz)