小编n0n*_*g0n的帖子

如何为每个用户构建未读项目警报的数据库

我只是有一个通用的数据库理论问题.我需要制作类似于显示用户观看过的帖子/项目(例如在论坛中)或未读电子邮件的内容.我所拥有的是有多个用户可以查看的帖子,但它需要由实际查看过的用户分开.因此,如果用户A查看了帖子1,它将不再显示帖子1是要查看的新项目,但是对于用户B,它仍然会显示帖子1是要查看的新项目.

我已经搜索了其他想法,其中一个是获取用户上次登录时间的时间戳,但实际上我需要跟踪他们看到的帖子,而不是自上次登录后发生的帖子.

如果可能的话,我想要一个MySQL数据库解决方案,但如果必须的话,我愿意接受cookie.我可以自己完成这个并且弄清楚,但我很欣赏任何有关如何正确构建表格以使其最有效的建议.此外,带宽和存储不是问题.

php mysql cookies database-design

7
推荐指数
1
解决办法
3765
查看次数

JOINS与while语句

在我上班的公司,他们运行PHP/MySQL关系数据库.我一直认为,如果我需要从不同的表中提取不同的信息,我可以做一个简单的连接来提取数据,如....

SELECT table_1.id, table_2.id FROM table_1 LEFT JOIN table_2 ON table_1.sub_id = table_2.id
Run Code Online (Sandbox Code Playgroud)

当我到达目前工作的地方时,这就是他们所做的.

<?php $query = mysql_query("SELECT sub_id FROM table_1");
while($rs = mysql_fetch_assoc($query)) {
    $query_2 = mysql_fetch_assoc(mysql_query("SELECT * FROM table_2 WHERE id = '{$rs['sub_id']}'"));
    //blah blah blah more queries
?>
Run Code Online (Sandbox Code Playgroud)

当我问为什么这是第二种方式时,他们说它实际上比连接运行得更快.他们管理一个数据库,该数据库在不同的表上有数百万条记录,而且有些表格有点宽(按行方式).他们说,如果执行不当的查询可能会锁定一个表(或其中几个),他们想避免连接.另外要记住的是,有一个大型报表生成器附加到此数据库,客户端可以使用它来构建自己的报表,如果它们发疯并构建一个大型报表,则可能会造成一些严重破坏.

我很困惑,所以我想我会把它扔到那里为一般的编程公众.这可能是一个观点问题,但是执行while语句真的更快(一个更大的查询来拉大量行,然后是很多小的子查询,如果你愿意)或者做一个连接(拉一次更大的查询,以获得您需要的所有数据).只要索引正确完成,重要吗?另一件需要考虑的事情是当前的数据库是InnoDB格式.

谢谢!

2014年8月28日更新

所以我想我会对这个更新,以及更长远的工作.在讨论之后,我决定在这里重建报告生成器.我没有明确的结果数字,但我想我会分享结果.

我觉得有点矫枉过正,因为我将整个报告(就返回的数据而言非常有活力)变成了一个大规模的连接节目.大多数连接(如果不是全部)都将一个值加入主键,因此它们都运行得非常快.如果报告允许说出30列数据并且它提取了2000条记录,则每个字段都在运行查询以获取数据(因为该数据可能位于不同的字段上).30 x 2000 = 60000甚至在每个查询的甜蜜查询时间0.0003秒之间,这仍然只是查询时间的18秒(这几乎就是我记得它).现在我将查询重建为一堆主键上的大量连接(如果可能),同样的报告在大约2-3秒内加载,大部分时间都是下载html.每个返回的记录在0-4个额外查询之间运行,具体取决于所需的数据(如果可以在连接中获取它,则可能不需要任何数据,这种情况发生在75%的时间).因此,相同的2000条记录将返回额外的0-8000个查询(远远好于60000).

我会说while语句在某些情况下很有用,但正如下面评论中所述,基准测试就是它的全部内容.在我的例子中,连接是更好的选择,但在我的网站的其他区域,while语句更有用.在一个实例中,我有一个报告,其中客户端可以请求多个类别,并仅返回这些类别的数据.发生了什么事情,我有一个category_id IN(...,...,..,.., etc etc etc)50-500的ID,索引会扼杀我的怀抱,因为我在最后时刻拿着它.所以我所做的就是在10组展开的ID,并运行相同的查询X/10次,我的结果是取的方式,因为指数喜欢处理10点的ID,而不是500比以前快了,所以我就看见一个很大的进步我的查询然后因为做了while语句.

php mysql join while-loop

6
推荐指数
1
解决办法
239
查看次数

提交简单PHP表单时出现禁止错误

我有一个非复杂的问题......似乎比它应该更复杂.

我有一个简单的表单,用于向网站添加内容.一些字段需要输入html.但是,当您将某些html元素输入到表单的不同部分时,它会决定它讨厌您并抛出禁止的403错误.这是下面的表格:

<?php
    $data = f("SELECT * FROM table WHERE id = '{$_GET['id']}'");
?>
<form action="<?=$_SERVER['PHP_SELF']?>?id=<?=$_GET['id']?>&action=edit" method="post">
    <table cellspacing="0" cellpadding="2" border="0">
        <tr>
            <td><b>Title:</b></td>
            <td><input type="text" name="title" style="width: 300px;" value="<?=$data['title']?>" /></td>
        </tr>
        <tr>
            <td><b>URL:</b></td>
            <td><input type="text" name="url" style="width: 300px;" value="<?=$data['url']?>" /></td>
        </tr>
        <tr>
            <td><b>Sub-Category:</b></td>
            <td>
                <select name="subCategoryId">
                    <option value=""></option>
                    <option value="1">A</option>
                    <option value="2">B</option>

                </select>
            </td>
        </tr>
        <tr>
            <td><b>Short Description:</b></td>
            <td><textarea name="shortDescription" rows="6" cols="60"><?=$data['shortDescription']?></textarea></td>
        </tr>
        <tr>
            <td><b>Template:</b></td>
            <td><textarea name="template" rows="6" cols="60"><?=$data['template']?></textarea></td>
        </tr>
        <tr>
            <td><b>Ads:</b></td>
            <td><textarea name="ads" rows="6" cols="60"><?=$data['ads']?></textarea></td>
        </tr>
        <tr>
            <td><b>Keywords:</b></td>
            <td><textarea …
Run Code Online (Sandbox Code Playgroud)

php forms .htaccess post http-status-code-403

6
推荐指数
2
解决办法
1万
查看次数

如何跳过ModSecurity中路径中参数的确定规则?

我做了很多研究,我发现了很多东西,但是还没能找到能做我需要做的事.首先,我在运行ModSecurity 2.7.3的CentOS 7服务器上.

目标

我希望能够扫描除某些参数之外的所有参数,并通过已经设置的所有标准核心规则运行它们.例如,如果我有一个文件path/to/myfile.php,它有2个参数发送给它param1param2.当用户点击时,myfile.php我希望它能够运行它可以反对的所有可爱的检查param1,param2除非param2我不需要它进行检查,WEB_ATTACK/XSS因为它应该期望该字段的某些HTML(或其他).

警告

我不认为我可以通过ID删除规则(除非我的理解有缺陷).我们目前正在登台服务器上进行设置,然后我们将安装ModSecurity以及我们在登台服务器上设置的排除项,并将它们复制到实时服务器.我不认为规则ID会与登台日志相匹配(除非我误解了某些内容)并且在我们的实时服务器上抛出ModSecurity并等待规则开始跳闸并不"有趣".

到目前为止我得到了什么

这是我试过的......

<LocationMatch /path/to/myfile.php>
 <IfModule mod_security2.c>
    SecRuleEngine Off # This is super bad I know
 </IfModule>
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)

这是一个坏主意,所以我可以这样做......

<LocationMatch /path/to/myfile.php>
 <IfModule mod_security2.c>
    SecRuleRemoveByTag "WEB_ATTACK/XSS" # better but.....still not close enough
 </IfModule>
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)

所以我尝试过没有成功的东西,如下所示:

SecRule ARGS|!ARGS:param2 "@detectXSS" # only 2.8.0 and above :(
# or
SecRule ARGS|!ARGS:param2 "ctl:ruleRemoveByTag=WEB_ATTACK/XSS"
# or
SecRule REQUEST_FILENAME "@streq /path/to/myfile.php" "pass,ctl:ruleRemoveByTag=WEB_ATTACK/XSS;ARGS:param2"
Run Code Online (Sandbox Code Playgroud)

ModSecurity的文档很好,但我需要更深入的理解,特别是ctl的东西.我也看了一些其他的问题, …

apache security mod-security

2
推荐指数
1
解决办法
1721
查看次数

为具有多个价值可能性的变量分配一个值

在一些情况下,我遇到过这个问题,我只需要问一下是否有更好的东西.我有一个值可以通过派克分配给它的数字.数字意味着什么,所以将其输出给用户.例如,我需要将1更改为对用户来说意味着什么的东西.这是一个代码示例:

switch($data['priority']) {
case 1:
    $priority = 'Low';
    break;
case 2:
    $priority = 'Medium';
    break;
case 3:
    $priority = 'High';
    break;
default:
    $priority = 'None';
    break;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用较少的代码将值分配给优先级?我知道在JavaScript中你可以做多个三元运算符(var data = type == 1 ? 'Good' : type == 2 ? 'Bad' : type == 3 ? 'Unknown' : '';)但PHP不允许这样做.我知道你也可以做多个if,else if else else if else语句,但这看起来好像是很多额外的代码.有没有更好的方法来做我要问的事情?

php variables if-statement switch-statement

1
推荐指数
1
解决办法
326
查看次数

单击链接时PHP会执行两次文件

我的网站上有一个奇怪的问题.只要单击链接,文件就会执行两次.我注意到这一点的唯一原因是因为当我提交关键字的搜索请求时,我会在MySQL数据库中记录搜索.数据库总是保存两个记录(有一个时间戳,有时在同一秒添加记录,但通常只相隔一秒).我知道我是网站上唯一的一个,并且查询没有被循环调用.所以我做了一个fopen($ file,'a')来查看将添加多少行代码,并且大部分时间都添加了两行代码.我可以添加一条记录的唯一方法是连续2-3次运行相同的搜索.

所以我唯一能想到的就是我们在网站上有广告.我能想象的唯一一件事就是当我点击链接时,与广告相关联的javascript也会遵循相同的链接.

还有其他好主意吗?

php mysql fopen execute hyperlink

0
推荐指数
1
解决办法
134
查看次数