欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

关于账户激活的奇葩问题,

程序员文章站 2022-05-26 08:06:10
...
请教大神我这段代码有什么问题,以前好好的 ,现在却出现莫名问题,编辑器是netbeans,也重新安装过.
现在运行时能执行到第二个_query函数,也就是对数据库的操作成功了,之后就跳过mysql_affected_rows()那段直接执行下面的 else {
_alert_back('非法操作');
}

if (isset($_GET['active']) && $_GET['action'] === 'ok') {	$_active = _mysql_string($_GET['active']);  	if (mysql_fetch_array(_query("SELECT tg_active FROM tg_user WHERE tg_active='$_active' LIMIT 1"),MYSQL_ASSOC)) {         //将tg_active设置为actived		_query("UPDATE tg_user SET tg_active='actived' WHERE tg_active='$_active' LIMIT 1");		if (mysql_affected_rows() == 1) {			mysql_close();			_location('账户激活成功','login.php');		} else {			mysql_close();			_location('账户激活失败','register.php');		}	} else {		_alert_back('非法操作');	}}


回复讨论(解决方案)

检查了一下你的代码,应是
if (mysql_fetch_array(_query("SELECT tg_active FROM tg_user WHERE tg_active='$_active' LIMIT 1"),MYSQL_ASSOC))
此段就发生问题,你确定有执行到_query阶段

if (mysql_fetch_array(_query("SELECT tg_active FROM tg_user WHERE tg_active='$_active' LIMIT 1"),MYSQL_ASSOC)) {          //将tg_active设置为actived        _query("UPDATE tg_user SET tg_active='actived' WHERE tg_active='$_active' LIMIT 1");         if (mysql_affected_rows() == 1) {             mysql_close();             _location('账户激活成功','login.php');         } else {             mysql_close();             _location('账户激活失败','register.php');        }    } else {         _alert_back('非法操作');    }

嗯 是的 我去表里看过了 也试了好多次 我也有打印出mysql_fetch_array 有值

就你贴出的代码而言,是不可能出现你说的情况的
因为
_query("UPDATE tg_user SET ....

_alert_back('非法操作');
分属
if (mysql_fetch_array(_query("SELECT tg_active FROM...
的两个分支
不可能同时被执行!
因此,可以认为你实际运行的不是这段代码

if (isset($_GET['active']) && $_GET['action'] === 'ok') {     $_active = _mysql_string($_GET['active']);       if (mysql_fetch_array(_query("SELECT tg_active FROM tg_user WHERE tg_active='$_active' LIMIT 1"),MYSQL_ASSOC){           echo "ok";      } else {         _alert_back('非法操作');     }}


这样会出现什麽结果?

就你贴出的代码而言,是不可能出现你说的情况的
因为
_query("UPDATE tg_user SET ....

_alert_back('非法操作');
分属
if (mysql_fetch_array(_query("SELECT tg_active FROM...
的两个分支
不可能同时被执行!
因此,可以认为你实际运行的不是这段代码


对啊 所以我才会说奇葩啊 我都找了2天了 还没找出问题

if (isset($_GET['active']) && $_GET['action'] === 'ok') {     $_active = _mysql_string($_GET['active']);       if (mysql_fetch_array(_query("SELECT tg_active FROM tg_user WHERE tg_active='$_active' LIMIT 1"),MYSQL_ASSOC){           echo "ok";      } else {         _alert_back('非法操作');     }}


这样会出现什麽结果?

打印出OK ,

最新又出现的一个情况是重启好几次电脑后,再打开项目后,第一个注册的可以激活,后面的就出现非法操作了

我都晕了 怀疑是不是电脑系统有问题了

你打印出 __FILE__ 和 __LINE__ 就可知道你找错了地方

还是不行, 算了 先不找了 等一段时间再看看吧 谢谢你们2位了