Php 停止循环,避免重复帖子

Php 停止循环,避免重复帖子,php,while-loop,Php,While Loop,我真的不知道该怎么说,所以如果你需要更多的澄清,我可以尽力解释 这是密码 $file = "shout.txt"; $filed = file_get_contents($file); preg_match_all('|<div class=\'date\'>(?P<date>.*?)&nbsp;.*<a.*>(?P<user>.*)</a>|i', $filed, $matches); $shoutlines = file(

我真的不知道该怎么说,所以如果你需要更多的澄清,我可以尽力解释

这是密码

$file = "shout.txt";
$filed = file_get_contents($file);
preg_match_all('|<div class=\'date\'>(?P<date>.*?)&nbsp;.*<a.*>(?P<user>.*)</a>|i', $filed, $matches);

$shoutlines = file($shout_file);

$aTemp = array();
foreach($matches['user'] as $user) {
    $aTemp[] = "'" . mysql_real_escape_string($user) . "'";
}
$user = implode(",", $aTemp);

$getlevel = $db->query("SELECT * FROM accounts WHERE username IN ( ".$user." )"); 
$isadmin = $db->query("SELECT * FROM accounts WHERE username = '".$_SESSION['username']."'");
$admin = $isadmin->fetch_assoc();
while($status = $getlevel->fetch_assoc()){
    //output the html
    for($i = 0; $i < (1000); $i++)
    {
        if(isset($shoutlines[$i]))
        {
            if ($admin['admin'] == 1 && $status['sblevel'] != Admin && $status['sblevel'] != Banned){
                $delete = "<a href='javascript: delete_shoutline({$i});' title='Delete' class='delete' onclick=\"return confirm('Are you sure you want to delete this message?');\">x</a><a href='javascript: ban({$status['id']});' class='ban' onclick=\"return confirm('Are you sure you want to ban this user?');\">o</a>";
            }
            if ($admin['admin'] == 1 && $status['sblevel'] != Admin && $status['sblevel'] == Banned){
                $delete = "<a href='javascript: delete_shoutline({$i});' title='Delete' class='delete' onclick=\"return confirm('Are you sure you want to delete this message?');\">x</a><a href='?index=shout&unban&user=".$shout['username']."' class='ban' onclick=\"return confirm('Are you sure you want to unban this user?');\">&oslash;</a>";
            }
            if ($admin['admin'] == 1 && $status['sblevel'] == Admin){
                $delete = "<a href='javascript: delete_shoutline({$i});' title='Delete' class='delete' onclick=\"return confirm('Are you sure you want to delete this message?');\">x</a>";
            }
            if ($admin['sblevel'] == Moderator && $status['sblevel'] != Admin && $status['sblevel'] != Moderator){
                $delete = "<a href='javascript: delete_shoutline({$i});' title='Delete' class='delete' onclick=\"return confirm('Are you sure you want to delete this message?');\">x</a><a href='?index=shout&ban&user=".$shout['username']."' class='ban' onclick=\"return confirm('Are you sure you want to ban this user?');\">o</a>";
            }
            if ($status['sblevel'] == Moderator  && $status['sblevel'] != Admin){
                $delete = "<a href='javascript: delete_shoutline({$i});' title='Delete' class='delete' onclick=\"return confirm('Are you sure you want to delete this message?');\">x</a>";
            }
            $shoutline = preg_replace('/<\/div>\n/', ' ', $shoutlines[$i], 1);
            echo showSmileys($shoutline) . $delete . "</div>";
        }
    }
}
$file=“shout.txt”;
$filed=文件内容($file);
预匹配所有(“|”(?P.*).*”;
}
如果($admin['admin']==1&&$status['sblevel']!=admin&&$status['sblevel']==banked){
$delete=“”;
}
如果($admin['admin']==1&&$status['sblevel']==admin){
$delete=“”;
}
如果($admin['sblevel']==主持人和$status['sblevel']!=管理员和$status['sblevel']!=主持人){
$delete=“”;
}
如果($status['sblevel']==主持人和$status['sblevel']!=管理员){
$delete=“”;
}
$shoutline=preg_replace(“/\n/”,“$shoutline[$i],1);
echo showsmilies($shoutline)。$delete.“;
}
}
}

问题是,它会为每个发布的用户复制所有的帖子。我假设这是因为它处于一个while循环中,但我不知道该怎么做,因为我需要检查一个用户是否是管理员/mod,以及他们是否在帖子旁边放置了一个delete/ban按钮,以允许他们删除。现在,它放置了一个delet所有帖子旁边的e按钮,然后用旁边的delete和ban按钮复制所有帖子。

这里是避免重复消息的最简单的修改。您必须提供一个函数
author()
,该函数从shout\u文件中提取一行并返回作者ID

while($status = $getlevel->fetch_assoc()){
    //output the html
    for($i = 0; $i < (1000); $i++)
    {
        if(isset($shoutlines[$i]))
        {
            if (author($shoutlines[$i]) != $status['id']) {
                continue;
            }
            if ($admin['admin'] == 1 && $status['sblevel'] != Admin && $status['sblevel'] != Banned){
                $delete = "<a href='javascript: delete_shoutline({$i});' title='Delete' class='delete' onclick=\"return confirm('Are you sure you want to delete this message?');\">x</a><a href='javascript: ban({$status['id']});' class='ban' onclick=\"return confirm('Are you sure you want to ban this user?');\">o</a>";
            }
            if ($admin['admin'] == 1 && $status['sblevel'] != Admin && $status['sblevel'] == Banned){
                $delete = "<a href='javascript: delete_shoutline({$i});' title='Delete' class='delete' onclick=\"return confirm('Are you sure you want to delete this message?');\">x</a><a href='?index=shout&unban&user=".$shout['username']."' class='ban' onclick=\"return confirm('Are you sure you want to unban this user?');\">&oslash;</a>";
            }
            if ($admin['admin'] == 1 && $status['sblevel'] == Admin){
                $delete = "<a href='javascript: delete_shoutline({$i});' title='Delete' class='delete' onclick=\"return confirm('Are you sure you want to delete this message?');\">x</a>";
            }
            if ($admin['sblevel'] == Moderator && $status['sblevel'] != Admin && $status['sblevel'] != Moderator){
                $delete = "<a href='javascript: delete_shoutline({$i});' title='Delete' class='delete' onclick=\"return confirm('Are you sure you want to delete this message?');\">x</a><a href='?index=shout&ban&user=".$shout['username']."' class='ban' onclick=\"return confirm('Are you sure you want to ban this user?');\">o</a>";
            }
            if ($status['sblevel'] == Moderator  && $status['sblevel'] != Admin){
                $delete = "<a href='javascript: delete_shoutline({$i});' title='Delete' class='delete' onclick=\"return confirm('Are you sure you want to delete this message?');\">x</a>";
            }
            $shoutline = preg_replace('/<\/div>\n/', ' ', $shoutlines[$i], 1);
            echo showSmileys($shoutline) . $delete . "</div>";
            unset($shoutlines[$i]);
        }
    }
}
while($status=$getlevel->fetch_assoc()){
//输出html
对于($i=0;$i<(1000);$i++)
{
如果(isset($shoutlines[$i]))
{
如果(作者($shoutlines[$i])!=$status['id'])){
继续;
}
如果($admin['admin']==1&&$status['sblevel']!=admin&&$status['sblevel']!=banked){
$delete=“”;
}
如果($admin['admin']==1&&$status['sblevel']!=admin&&$status['sblevel']==banked){
$delete=“”;
}
如果($admin['admin']==1&&$status['sblevel']==admin){
$delete=“”;
}
如果($admin['sblevel']==主持人和$status['sblevel']!=管理员和$status['sblevel']!=主持人){
$delete=“”;
}
如果($status['sblevel']==主持人和$status['sblevel']!=管理员){
$delete=“”;
}
$shoutline=preg_replace(“/\n/”,“$shoutline[$i],1);
echo showsmilies($shoutline)。$delete.“;
未设置($shoutlines[$i]);
}
}
}

这可能不是最好的方法,因为它会对来自作者的每条消息重复“禁止此用户”。最好在每个用户的开头放置一次“禁止/取消禁止”选项,然后在每行上“删除”。

只是一个附带问题:为什么要使用文本文件而不是使用mysql(用户使用mysql)?如果文件增长,您的内存使用率也会增长,加载时间也会增长。for循环在做什么?为什么所有这些
If
语句都不是
else If
s?@John他正在使用PDO
$isadmin=$db->query(“选择…”)
@kira423我认为重点在于,如果你只想执行其中一个,你应该使用elseif,因为它更有效(因为在找到你想要的条件后,它不必检查每一个条件)。