• 490阅读
  • 43回复

置顶操作时看不到版块名称(2025年3月8日解决) [复制链接] [手机版]

上一主题 下一主题
离线zhangjingyu

只看该作者 20楼 发表于: 2025-02-25 12:53:18 星期二  点亮(0)
删除代码,不用这个函数处理字符串,还是不行。似乎不关这个函数的事儿。那我们还是看变量吧。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 21楼 发表于: 2025-02-28 15:45:07 星期五  点亮(0)
现在,在置顶操作管理里面添加了当前主题所在版块名称,这不是主要的,关键还是想彻底解决问题。通过审查元素,我们看到下面代码里面的“defaultSelForums”似乎是没有问题的,能够获取到的内容为“0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,”。但这些数字到底对应什么呢?索引吗?因为通过后台查看版块fid,从1到50,少了8、30和31,也是47个。但不确定,到底是不是版块的数组索引。
  1. <tr class="tr3 vt" id="forumsDiv" style="display: none">
  2.         <td>选择置顶版块:<br>(按Ctrl可多选)</td>
  3.         <th>
  4.             <input type="hidden" value="" name="defaultSelForums" id="defaultSelForums"/>
  5.             <select multiple="multiple" size="10" name="selForums[]" id="selForums" style="min-width: 300px;" class="select_wa"></select>
  6.         </th>
  7.     </tr>

搜索“defaultSelForums”,除了模板文件(mawhole.htm和ajax_mawhole.htm)上面代码中有两处外,就是这部分代码的上面还有一处:var defaultSelF = getObj('defaultSelForums');共三处;mawhole.php文件中共有两处:
  1.     } else {
  2.         PostCheck();
  3.         S::gp(array('topped', 'ifmsg', 'timelimit', 'nextto', 'selForums', 'defaultSelForums'));
  4.         (is_null($topped)) && Showmsg('请选择置顶操作管理选项');
  5.         $topped = intval($topped);
  6.         $pwTopped = $isGM ? '3' : pwRights($isBM, 'topped');
  7.         if ($topped > $pwTopped) {
  8.             Showmsg('masigle_top');
  9.         }
  10.         empty($selForums) && $selForums = explode(',', trim($defaultSelForums, ','));
  11.         if (empty($selForums)) {
  12.             Showmsg('masigle_top_error');
  13.         }
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 22楼 发表于: 2025-02-28 16:14:44 星期五  点亮(0)
看来,代码的关键所在似乎还是14楼的getForumListForHeadTopic()函数。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 23楼 发表于: 2025-03-01 21:34:46 星期六  点亮(0)
回复14楼 zhangjingyu 的帖子
zhangjingyu 尝试对照示例,修改文件:
        list($catedbs, $top_1, $top_2, $top_3) = getForumListForHeadTopic($fid);
        if ($top_1) {
        &nbs .. (2025-02-24 15:10)
上面代码中的ENT_QUOTES是什么意思?

ENT_QUOTES 是 PHP 中 htmlspecialchars 函数的一个常量参数,用于指定如何处理引号。以下是它的详细说明:

ENT_QUOTES 的作用
ENT_QUOTES 是 PHP 中的一个常量,值为 2。

它告诉 htmlspecialchars 函数,将 双引号(") 和 单引号(') 都转换为 HTML 实体。

HTML 实体转换规则
双引号(")会被转换为 "。

单引号(')会被转换为 '(在某些 PHP 版本中可能转换为 ',但 ' 不是标准的 HTML 实体)。

其他相关常量
ENT_COMPAT(默认值):仅转换双引号("),不转换单引号(')。

ENT_NOQUOTES:不转换任何引号。

ENT_QUOTES:转换双引号和单引号。

代码中的使用
$v1['name'] = htmlspecialchars(strip_tags($v1['name']), ENT_QUOTES);
这里 htmlspecialchars 的作用是将 $v1['name'] 中的特殊字符(如 <, >, &, ", ')转换为 HTML 实体,以防止 XSS 攻击。

ENT_QUOTES 确保双引号和单引号都被转换,从而避免引号在 HTML 属性中引发问题。

示例
假设 $v1['name'] 的值为:

$v1['name'] = 'Hello "World" and \'PHP\'';
经过 htmlspecialchars 处理后:

$v1['name'] = htmlspecialchars($v1['name'], ENT_QUOTES);
结果将是:

Hello "World" and 'PHP'
运行 HTML
总结
ENT_QUOTES 是 htmlspecialchars 的一个参数,用于确保双引号和单引号都被转换为 HTML 实体。

在 PHPWind 的代码中,它的作用是增强安全性,防止用户输入的内容破坏 HTML 结构或引发 XSS 攻击。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 24楼 发表于: 2025-03-06 22:02:04 星期四  点亮(0)
mawhole.php
$query = $db->query("SELECT distinct fid FROM pw_poststopped WHERE fid != '0' AND pid = '0' AND tid = " . $seltid);这行代码有没有问题?
这行代码看起来是从数据库中查询数据,但有几个潜在的问题需要注意:

1. SQL 注入风险
$seltid 是直接拼接到 SQL 查询中的,如果 $seltid 是用户输入的数据,可能会导致 SQL 注入攻击。

建议使用预处理语句(prepared statements)来避免 SQL 注入。

2. SQL 语法问题
如果 $seltid 是字符串类型,需要在 SQL 查询中用单引号包裹,例如 tid = '$seltid'。

如果 $seltid 是数字类型,则可以直接使用 tid = $seltid。

3. 字段和表名问题
确保 pw_poststopped 表存在,并且 fid、pid、tid 字段名正确。

如果表名或字段名是保留字,需要用反引号(`)包裹,例如 `tid`。

4. 性能问题
DISTINCT 关键字用于去重,但如果数据量较大,可能会影响查询性能。

如果 fid 字段有索引,查询性能会更好。

改进建议
以下是改进后的代码示例:

php
复制
// 使用预处理语句防止 SQL 注入
$query = $db->prepare("SELECT DISTINCT fid FROM pw_poststopped WHERE fid != '0' AND pid = '0' AND tid = ?");
$query->bind_param("i", $seltid); // 假设 $seltid 是整数类型
$query->execute();
$result = $query->get_result();
解释改进后的代码:
预处理语句:

使用 prepare 方法创建预处理语句,避免 SQL 注入。

? 是占位符,表示稍后会绑定具体的值。

绑定参数:

bind_param("i", $seltid) 将 $seltid 绑定到 SQL 查询中的占位符。

"i" 表示 $seltid 是整数类型。如果是字符串类型,可以使用 "s"。

执行查询:

execute() 执行查询。

get_result() 获取查询结果。

总结
原始代码存在 SQL 注入风险,建议使用预处理语句改进。同时,确保表名、字段名和数据类型正确,以提高代码的安全性和可维护性。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 25楼 发表于: 2025-03-07 07:53:09 星期五  点亮(0)
回复21楼 zhangjingyu 的帖子
zhangjingyu 现在,在置顶操作管理里面添加了当前主题所在版块名称,这不是主要的,关键还是想彻底解决问题。通过审查元素,我们看到下面代码里面的“defaultSelForums”似乎是没有问题的,能够获取到的内容为“0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28 .. (2025-02-28 15:45)
今天下班到家后看看非ajax操作下“defaultSelForums”所获取到的内容是不是也是0到36?
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 26楼 发表于: 2025-03-07 23:31:27 星期五  点亮(0)
研究了几个小时还是没改出来什么名堂,明晚继续。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 27楼 发表于: 2025-03-07 23:34:34 星期五  点亮(0)
回复25楼 zhangjingyu 的帖子
zhangjingyu 今天下班到家后看看非ajax操作下“defaultSelForums”所获取到的内容是不是也是0到36? (2025-03-07 07:53)
内容一样,这个应该是索引。为了验证是不是论坛文件的原因而创建的临时论坛里,一个分区两个版块,也是0到2,应该是3个索引。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 28楼 发表于: 2025-03-08 19:18:48 星期六  点亮(0)
终于大致定位出来哪里的问题了!

终于看到分区名和版块名了。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 29楼 发表于: 2025-03-08 20:06:05 星期六  点亮(0)
确实如22楼所说,问题在14楼require/updateforum.php文件里面的getForumListForHeadTopic()函数。具体说,问题和整个函数的关系不是很大,而是和其中用来处理字符串的函数可能有关系。

在最后输出分区和版块名称的时候用到了htmlspecialchars()和strip_tags()这两个函数,目前还没测试和谁的关系更大。
  1. $v1['name'] = htmlspecialchars(strip_tags($v1['name']),ENT_QUOTES);
共四处,从$v1['name']到$v4['name'],应该分别对应分区名、版块名、一级子版块名、二级子版块名。当注释前两处后,终于在测试论坛看到了分区名和版块名。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!