这是完整的代码:
<?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'> $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" ";
$userid="$user-$id";
if("$fanname-$Posid" == $userid){echo"<td><p align='Left'><font size='2' color='black'>  $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'>  $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" ";
echo "</tr>";
mysql_close($conn);
?>
我认为问题出在这里,但不知道它是什么:
$userid="$user-$id";
if("$fanname-$Posid" == $userid){echo"<td><p align='Left'><font size='2' color='black'>  $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'>  $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和用户名,但是当我喜欢的时候一个帖子,只有一个帖子显示“不同”按钮.. 有什么建议吗?
答案 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为空。