Discuz教程网

[已解决]关于 暗恋要不要 插件 BUG,可重复刷暗恋者

[复制链接]
authicon 狼夜 发表于 2012-1-30 03:11:36 | 显示全部楼层 |阅读模式
本帖最后由 狼夜 于 2012-1-30 03:24 编辑

暗恋要不要 插件地址 https://www.discuz.1314study.com/thread-15906-1-1.html

先暗恋一个用户,然后出家,然后再暗恋该用户。 会导致暗恋者的人数不断增加。
if($myfields == $nolovestr){
//如果出家,就删除他的暗恋对象!
DB::query("DELETE FROM hsk_ulove where sendid='$discuz_uid'");
}

原因我已经找到。并尝试在以上代码中加入一段

DB::query("UPDATE ".DB::table('common_member_count')." SET $vcuser=$vcuser-1 WHERE uid='$uid'");

修改完之后,再去暗恋人的时候,就出现提示 内部错误 。。

{:soso_e127:}毕竟是新手,求解决。。。。

PS:再顺便问一下,勋章领取的条件,能不能判断 性别?
最佳答案
avatar
2012-1-30 19:51:25
主编 发表于 2012-1-30 19:29
很好很好强大

回主编:我不会告诉你我发现暗恋要不要的另个BUG了{:soso_e144:}

回楼主:
给出两个代码,本质一样
way one

  1. //在删除暗恋对象记录前先取得被暗恋者的UID,用于更新被暗恋者的暗恋人数-----晓明
  2. $query = DB::query("SELECT toid FROM hsk_ulove WHERE sendid='$discuz_uid'");
  3. while($user_info = DB::fetch($query)){
  4. //暗恋对象的暗恋者-1
  5. DB::query("UPDATE ".DB::table('common_member_count')." SET $vcuser=$vcuser-1 WHERE uid='$user_info[toid]'");
  6. }
  7. //最后清空暗恋对象
  8. //如果出家,就删除他的暗恋对象!
  9. DB::query("DELETE FROM hsk_ulove where sendid='$discuz_uid'");
复制代码

way two
  1. //在删除暗恋对象记录前先取得被暗恋者的UID,用于更新被暗恋者的暗恋人数-----晓明
  2. $query = DB::query("SELECT toid FROM hsk_ulove WHERE sendid='$discuz_uid'");
  3. while($user_info = DB::fetch($query)){
  4. //暗恋对象的暗恋者-1
  5. DB::query("UPDATE ".DB::table('common_member_count')." SET $vcuser=$vcuser-1 WHERE uid='$user_info[toid]'");
  6. //删除当前暗恋对象
  7. //如果出家,就删除他的暗恋对象!
  8. DB::query("DELETE FROM hsk_ulove where sendid='$discuz_uid' and toid='$user_info[toid]'");
  9. }
复制代码

下载: 暗恋要不要V2.0_for_DiscuzX2_20120130_1953.zip (65.41 KB, 下载次数: 2)



上一篇:成长,就是不断的面对一些悲凉的事情,直到知道什么叫世事沧桑
下一篇:idc.hao9i.net申请免费空间
authicon dly 发表于 2012-1-30 10:42:11 | 显示全部楼层
这个插件是1.5的,在我本地2.0连出家都出不了
楼主那句数据库更新语句应该是没问题的,可以考虑是不是其他地方有语法错误,也可以试试先更新下后台缓存
最好直接找原作者:靖飒
authicon  楼主| 狼夜 发表于 2012-1-30 15:11:00 | 显示全部楼层
dly 发表于 2012-1-30 10:42
这个插件是1.5的,在我本地2.0连出家都出不了
楼主那句数据库更新语句应该是没问题的,可以考虑是不是其他 ...

ulove.zip (64.21 KB, 下载次数: 5)
authicon dly 发表于 2012-1-30 16:06:27 | 显示全部楼层
//在删除暗恋对象记录前先取得被暗恋者的UID,用于更新被暗恋者的暗恋人数-----晓明
$uid = DB::result_first("SELECT toid FROM hsk_ulove WHERE sendid='$discuz_uid'");

//如果出家,就删除他的暗恋对象!
DB::query("DELETE FROM hsk_ulove where sendid='$discuz_uid'");
//暗恋对象的暗恋者-1
if($uid){
DB::query("UPDATE ".DB::table('common_member_count')." SET $vcuser=$vcuser-1 WHERE uid='$uid'");
}

上边红色的是你加的代码,蓝色是我加的
红色代码中的紫色是查询的条件UID,但是在出家的代码中$uid这个变量是没有被赋值的,也就导致更新暗恋人数的错误
所以我加了句查询被暗恋者的UID

附件下载:
暗恋要不要V2.0_for_DiscuzX2_20120130_1558.zip (65.31 KB, 下载次数: 0)
authicon  楼主| 狼夜 发表于 2012-1-30 17:26:28 | 显示全部楼层
dly 发表于 2012-1-30 10:42
这个插件是1.5的,在我本地2.0连出家都出不了
楼主那句数据库更新语句应该是没问题的,可以考虑是不是其他 ...

我知道什么原因了。。
  1. DB::query("UPDATE ".DB::table('common_member_count')." SET $vcuser=$vcuser-1 WHERE uid='$uid'");
复制代码
我在这里引用 $uid 应该是没有结果的。

因为这个操作是在设置出家的这个地方,假设 一个用户 暗恋了 多个用户,那么这里这条语句,假设能执行,也只能将 某一个 的用户 暗恋数-1

我的思路是这样的。 能不能帮我完善一下呢??
  1. DB::query("UPDATE ".DB::table('common_member_count')." SET $vcuser=$vcuser-1 WHERE uid=(select toid from hsk_ulove WHERE sendid='$discuz_uid')");
复制代码
authicon  楼主| 狼夜 发表于 2012-1-30 17:28:31 | 显示全部楼层
dly 发表于 2012-1-30 16:06
上边红色的是你加的代码,蓝色是我加的
红色代码中的紫色是查询的条件UID,但是在出家的代码 ...
  1. $uid = DB::result_first("SELECT toid FROM hsk_ulove WHERE sendid='$discuz_uid'");
复制代码
你这个是不行的,因为一个人可以暗恋多个人,toid 会返回多个值
authicon dly 发表于 2012-1-30 19:15:40 | 显示全部楼层
狼夜 发表于 2012-1-30 17:26
我知道什么原因了。。我在这里引用 $uid 应该是没有结果的。

因为这个操作是在设置出家的这个地方,假 ...

呵呵,我没考虑暗恋多个,因为我没用过这插件,功能上没太深入了解,我改下就是了
authicon dly 发表于 2012-1-30 19:18:09 | 显示全部楼层
狼夜 发表于 2012-1-30 17:26
我知道什么原因了。。我在这里引用 $uid 应该是没有结果的。

因为这个操作是在设置出家的这个地方,假 ...

对了,你的这个sql应该不能执行吧,我记得DZ默认是不允许sql语句嵌套的,不安全,除非你改了配置
  1. WHERE uid=(select
复制代码
authicon 主编 发表于 2012-1-30 19:29:14 | 显示全部楼层
很好很好强大
authicon dly 发表于 2012-1-30 19:51:25 | 显示全部楼层    本楼为最佳答案   
主编 发表于 2012-1-30 19:29
很好很好强大

回主编:我不会告诉你我发现暗恋要不要的另个BUG了{:soso_e144:}

回楼主:
给出两个代码,本质一样
way one

  1. //在删除暗恋对象记录前先取得被暗恋者的UID,用于更新被暗恋者的暗恋人数-----晓明
  2. $query = DB::query("SELECT toid FROM hsk_ulove WHERE sendid='$discuz_uid'");
  3. while($user_info = DB::fetch($query)){
  4. //暗恋对象的暗恋者-1
  5. DB::query("UPDATE ".DB::table('common_member_count')." SET $vcuser=$vcuser-1 WHERE uid='$user_info[toid]'");
  6. }
  7. //最后清空暗恋对象
  8. //如果出家,就删除他的暗恋对象!
  9. DB::query("DELETE FROM hsk_ulove where sendid='$discuz_uid'");
复制代码

way two
  1. //在删除暗恋对象记录前先取得被暗恋者的UID,用于更新被暗恋者的暗恋人数-----晓明
  2. $query = DB::query("SELECT toid FROM hsk_ulove WHERE sendid='$discuz_uid'");
  3. while($user_info = DB::fetch($query)){
  4. //暗恋对象的暗恋者-1
  5. DB::query("UPDATE ".DB::table('common_member_count')." SET $vcuser=$vcuser-1 WHERE uid='$user_info[toid]'");
  6. //删除当前暗恋对象
  7. //如果出家,就删除他的暗恋对象!
  8. DB::query("DELETE FROM hsk_ulove where sendid='$discuz_uid' and toid='$user_info[toid]'");
  9. }
复制代码

下载: 暗恋要不要V2.0_for_DiscuzX2_20120130_1953.zip (65.41 KB, 下载次数: 2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 18:22

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表