需要一个像那样的系统

时间:2015-07-18 23:49:11

标签: php

这是完整的代码:

<?php 
    session_start();
    if(!isset($_SESSION["sess_user"])){
        header("location:../logout.php");
    } else {}
    $user=$_SESSION['sess_user'];
    ?>

<?php
    $con=mysql_connect('localhost','root','vertrigo') or die(mysql_error());
    mysql_select_db('user_registration') or die("cannot select DB");
    $sql=mysql_query("SELECT * FROM `likehand`");
    while($likehandle = mysql_fetch_array($sql))
            {

                $fanname = $likehandle['Userlame']; 
                $Posid = $likehandle['Post_ID'];    

    }
    ?>

            <?php
                            echo "<div style='background-color: #CC98CC'>";
                echo "<tr align='center'bgcolor='#f0f0f0'>";    
                echo"<td><p align='center'><font size='1' color='black'><b>Welcome Back $user </b></a></font></p></td>";
                echo "</tr>";
                echo "</div>";

            echo"<p align='center'><i><b>
<font style='opacity: 100' size='7' color='000000' face='forte'>News</font></b></i></p>";


            include("newsdb.php");

                if(isset($_POST['submit'])){
                if(!empty($_POST['search'])) {
                $srhuser=$_POST['search'];

$con=mysql_connect('localhost','root','vertrigo') or die(mysql_error());
mysql_select_db('user_registration') or die("cannot select DB");
$result=mysql_query("SELECT * FROM `news` where submitted_by='".$srhuser."'");}}
else{$result=mysql_query("SELECT * FROM `news`\n"
    . " ORDER BY `code` DESC");

}

            while($test = mysql_fetch_array($result))
            {

                $sbmitter = $test['submitted_by'];
                $id = $test['code'];    
                $date = $test['date'];
                $body = $test['body'];
                $likes = $test['likes'];
                $image = $test['url'];
                $sql="SELECT * FROM `likehand`";

                echo "<div style='background-color: #C0C0C0'>";
                echo "<tr align='center'bgcolor='#f0f0f0'>";    
                echo"<td><i><left><font color='black'>&nbsp; &nbsp; &nbsp; $sbmitter Said:</center></font></i>";
                echo"<td><p align='center'><font size='4' color='black'>$body</a></font></p></td>";
                echo"<font color='Black'><p align='right'>created <a href='#'>";echo"<font color='blue'>";
                echo date('d-m-Y \a\t\ g:i <b>a</b></a>', strtotime($test["date"]));                  // October 5, 2008 9:34 pm
echo"&nbsp";
$userid="$user-$id";
                if("$fanname-$Posid" == $userid){echo"<td><p align='Left'><font size='2' color='black'>&nbsp&nbsp$likes like <a href ='unlike.php?code=$id'><font color='black'><input type='button' value='Unlike' name='B3' style='width: 50; height: 20'></a></a></font></p></td>";


}else{    echo"<td><p align='Left'><font size='2' color='black'>&nbsp&nbsp$likes like <a href ='like.php?code=$id'><font color='black'><input type='button' value='like' name='B3' style='width: 50; height: 20'></a></a></font></p></td>";
                }               if($sbmitter == $user)
{               echo"<td><p align='right'><font size='2' color='black'><a href ='adminpannel/postdel.php?code=$id'><font color='black'><input type='button' value='delete' name='B3' style='width: 50; height: 20'></a></a></font></td>";
                echo"<td><font size='2' color='black'><a href ='/adminpannel/postedit.php?code=$id'><font color='black'><input type='button' value='edit' name='B3' style='width: 50; height: 20'></a></a></font></p></td>";
}
}


                echo "</div>";
                echo "<p></p>";
                echo"&nbsp;";



                echo "</tr>";

            mysql_close($conn);
            ?>

我认为问题出在这里,但不知道它是什么:

        $userid="$user-$id";
            if("$fanname-$Posid" == $userid){echo"<td><p align='Left'><font size='2' color='black'>&nbsp&nbsp$likes like <a href ='unlike.php?code=$id'><font color='black'><input type='button' value='Unlike' name='B3' style='width: 50; height: 20'></a></a></font></p></td>";


}else{    echo"<td><p align='Left'><font size='2' color='black'>&nbsp&nbsp$likes like <a href ='like.php?code=$id'><font color='black'><input type='button' value='like' name='B3' style='width: 50; height: 20'></a></a></font></p></td>";
                }            

我重新检查了数据库,它似乎正确保存了数据,问题是当用户按下时...喜欢字段增加1并且发布了id和用户名,但是当我喜欢的时候一个帖子,只有一个帖子显示“不同”按钮.. 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这段代码看起来很痛苦。还有很多事情,你应该做的不同。首先,你应该避免使用mysql函数,不推荐使用它们。使用mysqli或pdo。如果你选择mysqli,请确保采用面向对象的版本。我不确定'完整代码'是否是2个单独的脚本...如果不是,那么为什么要连接到mysql和数据库两次呢?检查if语句中某些事情的奇怪方法。

你一次只看到1个的原因是因为在开始时,你把所有的喜欢从数据库中取出,然后做一个while循环。然后将信息放在$ fanname和$ posid中。每个人都会更新这些值。所以最后只会存储ONE之类的信息。

简单的解决方案,截至目前,将取代此:

$fanname = $likehandle['Userlame'];
$posid = $likehandle['Post_ID'];

$array_of_likes[$fanname . "-" . $posid] = 1;

然后替换它:

if("$fanname-$Posid" == $userid){

if(array_key_exists($userid, $array_of_likes)){

这至少应该让你喜欢不止一件事。

编辑: 对你的脚本提出一些建议: 您似乎从每个用户中选择所有喜欢。我相信这不是你想要的。您确实希望在查询中执行WHERE userlame = {your_user_ID}。

执行此操作时,请更改喜欢的数组。您不需要使用fanname和posid创建密钥。只需创建一个以post_id为键的数组。

然后,当您检查是否喜欢新闻帖时,请执行array_key_exists($ id,$ array_of_likes)。无需在其中发送您的用户名。

但更好的方法是在新闻查询中使用LEFT JOIN查询。 像这样:

SELECT n.*, l.POST_ID FROM news AS n
    LEFT JOIN likehand AS l
    ON l.userlame = $your_user_id AND l.Post_ID = n.code
WHERE n.submittedby = $_POST['search']

我无法美化查询,但就是这样。 它会从您搜索的人中选择所有新闻消息。同时它检查你是否有类似的帖子。如果你喜欢它,那么l.POST_ID就是一个数字。如果您不喜欢它,则l.POST_ID为空。