Php 显示好友请求

Php 显示好友请求,php,facebook,Php,Facebook,我一直在努力打造一个类似于facebook的社交网络,以便在我的家庭服务器上使用。但是,在用户配置文件的“通知”选项卡中显示好友请求时,我遇到了一个问题 <?php //Check for notifications script $Request = "Requests"; $Pending = "Pending"; $nCheck = mysqli_query($Connect,"SELECT * FROM friends WHERE rTo = '$U

我一直在努力打造一个类似于facebook的社交网络,以便在我的家庭服务器上使用。但是,在用户配置文件的“通知”选项卡中显示好友请求时,我遇到了一个问题

<?php
    //Check for notifications script
    $Request = "Requests";
    $Pending = "Pending";
    $nCheck = mysqli_query($Connect,"SELECT * FROM friends WHERE rTo = '$Uname' AND Status = '$Pending'");
    $nNum = mysqli_num_rows($nCheck);
    if($nNum != 0){
        if($nNum === 1){
            $Request = "Request";
        }
        else
        {
            $Request = "Requests";
        }
        echo"<p style=\"font-family: Tahoma; margin-left: 20px;\">You Have <b>$nNum</b> Friend $Request</p><hr />";
        while($row = mysqli_fetch_assoc($nCheck)){
            $dbFrom = $row['rFrom'];
            $dbId = $row['id'];
            $dbStatus = $row['Status'];
            for($i = 0; $i < 1; $i++){
                echo"<p style=\"font-family: Tahoma; margin-left: 20px;\">$dbFrom wants to be your friend <form action=\"\" method=\"POST\"><input type=\"submit\" name=\"A\" value=\"Accept\"></form> <form action=\"\" method=\"POST\"><input type=\"submit\" name=\"D\" value=\"Decline\"></form></p>";
            }
        }
    }
    else
    {
        echo "<p style=\"font-family: Tahoma; margin-left: 20px;\">You Have <b>0</b> Friend $Request</p>";
    }
    ?>
同样
试试这个

$A = "Accepted";
$D = "Declined";
if($Accepted){
    $addFriend = mysqli_query($Connect,"UPDATE friends SET Status = '$A' WHERE  id='$dbId' AND rFrom = '$dbFrom'");
    header("Location: Notification.php");
}
else if($Declined){
    $addFriend = mysqli_query($Connect,"UPDATE friends SET Status = '$D' WHERE  id='$dbId' AND rFrom = '$dbFrom'");
    header("Location: Notification.php");
}
也 试试这个

$A = "Accepted";
$D = "Declined";
if($Accepted){
    $addFriend = mysqli_query($Connect,"UPDATE friends SET Status = '$A' WHERE  id='$dbId' AND rFrom = '$dbFrom'");
    header("Location: Notification.php");
}
else if($Declined){
    $addFriend = mysqli_query($Connect,"UPDATE friends SET Status = '$D' WHERE  id='$dbId' AND rFrom = '$dbFrom'");
    header("Location: Notification.php");
}

如果两个代码示例都存在于一个文件中,这就可以解释您的问题。 您可以更新您的好友表:

$addFriend = mysqli_query($Connect,"UPDATE friends SET Status = '$A' WHERE rTo = '$Uname' AND rFrom = '$dbFrom'");
如果
$dbFrom
值来自:

while($row = mysqli_fetch_assoc($nCheck)){
 $dbFrom = $row['rFrom'];
这意味着您只需更新最后一行。 我建议您也将
$dbForm
与这两个表单一起发布


PS:然后开始使用PDO。

如果两个代码示例都存在于一个文件中,这将解释您的问题。 您可以更新您的好友表:

$addFriend = mysqli_query($Connect,"UPDATE friends SET Status = '$A' WHERE rTo = '$Uname' AND rFrom = '$dbFrom'");
如果
$dbFrom
值来自:

while($row = mysqli_fetch_assoc($nCheck)){
 $dbFrom = $row['rFrom'];
这意味着您只需更新最后一行。 我建议您也将
$dbForm
与这两个表单一起发布

PS:并开始使用PDO。

  • 利用事先准备好的陈述。您没有受到SQL注入的保护(详细信息:)
  • 不要使用字符串来设置状态。使用数值定义状态。这使它更容易处理
  • 使用单引号
    可以避免在源代码中转义HTML的所有双引号
    。编码指南中经常建议使用其他字符串连接方法
  • 不推荐使用内联CSS格式化。请改用外部CSS样式表
  • 当您不需要完整的数据集时,不要从数据库中获取整个数据集。始终只获取您需要的数据。不建议使用
    *
    。例如,您不需要
    $row['Status']
    $row['id']
    ,但仍然将其无理由保存在变量中
  • 不要使用
    @
    运算符。请改为验证您的POST数据
  • 你的for循环没有任何意义。它不会有多个遍历
  • 为了解决您当前的主要问题,我将为好友请求分配ID,以便唯一地标识系统当前正在处理的好友请求
  • 另外,不要在查询中使用用户名,而是使用用户名。否则,您将面临主题数据库规范化方面的问题
  • 无需使用header()返回notifications.php。在验证POST数据并相应更新好友请求后,您可以轻松地继续构建notifications.php-view
      • 使用准备好的语句。您不会受到SQL注入的保护(详细信息:)
      • 不要使用字符串来设置状态。使用数字值来定义状态。这使其更易于处理
      • 使用单引号
        避免在源代码中转义HTML的所有双引号
        。还有一些字符串连接的替代方法,这在编码指南中经常被推荐
      • 不推荐使用内联CSS格式化。改用外部CSS样式表
      • 当您不需要完整的数据集时,不要从数据库中获取整个数据集。始终只获取所需的数据。不建议使用
        *
        。例如,您不需要
        $row['Status']
        $row['id']
        ,但仍然无故将其保存在变量中
      • 不要使用
        @
        运算符。改为验证您的POST数据
      • 你的for循环没有任何意义。它不会有超过一次的运行
      • 为了解决您当前的主要问题,我将为好友请求分配ID,以便唯一地标识系统当前正在处理的好友请求
      • 另外,不要在查询中使用用户名,而是使用用户名。否则,您将面临主题数据库规范化方面的问题
      • 无需使用header()返回notifications.php。在验证POST数据并相应地更新好友请求之后,您可以轻松地继续构建notifications.php-view

      可能不需要进行类型安全比较,但无论如何使用它都很好。不过我同意其余的,所以我+1:)@luschn:同意,还可以阅读关于类型安全比较更好的性能的文章。现在我明白了,我会修正我的答案。谢谢你的反馈。为了让你能在我的决定背后找到一些合理性,我不担心mysql注入,因为它是一个家庭服务器。我还检索了整个数据集,这样我就可以更容易地向请求添加不同的方面,这样我就不会返回并添加它。最后,为了实验的目的,我在那里做了for循环。再次感谢您,可能不需要进行TypeSafe比较,但无论如何使用它都很好。不过我同意其余的,所以我+1:)@luschn:同意,还可以阅读关于类型安全比较更好的性能的文章。现在我明白了,我会修正我的答案。谢谢你的反馈。为了让你能在我的决定背后找到一些合理性,我不担心mysql注入,因为它是一个家庭服务器。我还检索了整个数据集,这样我就可以更容易地向请求添加不同的方面,这样我就不会返回并添加它。最后,为了实验的目的,我在那里做了for循环。再次感谢