我是 PHP/SQL 新手用户....完成我的第一个 PHP 网站。该问题类似于在以下位置找到的初始问题:
http://forums.phpfreaks.com/topic/266235-modifying-database-after-a-set-time-limit/
但我并没有完全理解答案。与该用户类似,我有一整列(称为status)的数据库(称为challenge),它可以采用 3 个状态值- 'inactive'、'pending' 或 'active'。在正常的网站操作流程中,用户 A 通常会单击一个按钮(事件 1),该按钮会在数据库中创建一个新行(具有唯一的 *challenge_id*)并在该行中触发“待定”状态。用户 B 可以通过其他点击按钮更改状态,可以将状态设置为“非活动”或“活动”。
一种不受欢迎的情况是用户 B 什么都不做(即,没有事件触发)。在这种情况下,用户 A 不幸卡住了,等待状态从“待定”变为“活动”或“非活动”,然后他/她才能单击并触发下一个事件 1。例如,如果用户 B 厌倦了该站点并且不再使用它,则可能会发生这种情况,从而使“待处理”请求未得到答复。
显然,我可以手动更改 SQL,在一定时间限制后将任何“待定”状态更改为“非活动”。这在开始时会很好,但如果该网站变得流行,这将需要更多时间。有没有办法编写一个非 PHP 程序来解决这种“无事件触发”场景,其中所有“待定”状态 SQL 条目在一定时间限制后自动更改?或者PHP可以做到这一点吗?我尝试编写一个 php 脚本,每次任何用户登录时都会扫描数据库(注意:*challenge_id* 是由在不同 PHP 页面上触发的事件创建的):
<?php session_start();
if ((($_SESSION['role']) != SHA1('user')) && (($_SESSION['status']) != SHA1('active')))
{
header( 'Location: index.php' ) ;
session_destroy();
} else
include 'connect.php';
$_SESSION['login_id'];
$universaltime = time();
$sqlt = mysql_fetch_assoc(mysql_query("SELECT challenge.challengetime,
challenge.status FROM challenge"); //Selects an array of all values for challengetime
//and status for all users I presume
while ((($universaltime - $sqlt['challengetime']) > 1000) &&
($sqlt['status'] == 'pending'))
{
$sqlt1 = mysqli_query("UPDATE challenge SET $sqlt['status'] ='inactive'");
//Also tried with if instead of while
}
?>
我确信我的代码可以改进......任何帮助将不胜感激!还是我需要使用 PHP 以外的东西?