3

好吧,我正在尝试编写一个添加朋友脚本并且他正在工作,但是当我的脚本(即在函数中)尝试搜索$_GET['id']以查看配置文件的 id 以提出好友请求时,脚本不能find because 是 profile.php 中的一个函数,而不是直接在文件中

因此,如果我设置$_GET会话,我可以进行,但是如果我输入用户配置文件然后进入另一个配置文件,并且如果我尝试向第一个配置文件发出好友请求,则请求将发送到最后一个(即已注册在会话中)

那么我怎样才能做一个$_GET“全球性的”呢?

那是我的代码:

OTHER_PROFILE.PHP

    <?php include_once("includes/head.php"); ?>
    <?php require_once("includes/connect/connect.php"); ?>
    <?php require_once("includes/functions.php"); ?>
    <?php get_directory() ?>
    <?php login_validation() ?>
    <?php first_login(); ?>
    <?php count_logins(); ?>
    <?php get_shortcuts_menu_by_user(); ?>
    <?php include_once("includes/body.php"); ?>
    <?php 
    global $userid; 
    global $userid_profilee;
    $_SESSION['userid'] = $userid;
    $_SESSION['id'] = $_GET['id'];
    ?>

    <script src="alert.js" ></script>

    <?php 
    other_profile_main_photo();
    echo "<br><br>";
    ?>

    <?php include_once("includes/body_begin.php"); ?>
    <?php echo "<br><br>";?>
    <?php include("includes/footer.php"); ?>

FUNCTIONS.PHP (只是函数部分)

<?php require_once("/connect/connect.php"); ?>
<?php require_once("/jquery.php"); ?>
<?php
######### FRIEND REQUEST ########

function friend_request_send(){

global $db;

global $userid;
$userid = $_SESSION['userid'];
$userid_profilee = $_SESSION['id'];

$query_id_requester = "SELECT * FROM friend_requests";
$result_set1 = mysql_query($query_id_requester, $db)  or die(mysql_error()) ;

$query_id_requests = "SELECT friend_requests FROM members WHERE id=\"{$userid_profilee}\" ";
$result_set3 = mysql_query($query_id_requests, $db)  or die(mysql_error());

$query_id_requester_check = "SELECT * FROM friend_requests WHERE user_id=\"{$userid_profilee}\"";
$result_set4 = mysql_query($query_id_requester_check, $db);
$query_id_user_check = "SELECT * FROM friend_requests WHERE user_id_requester=\"{$userid}\"";
$result_set5 = mysql_query($query_id_user_check, $db);

## If already exists a friend request do this:
if ($id_requests = mysql_fetch_array($result_set3)){
if (($id_requester_check = mysql_fetch_array($result_set4)) && ($id_user_check = mysql_fetch_array($result_set5))){
echo "Ja fizeste pedido de Amizade!";
return ;
}
else
{
}
}



if ($id_requester = mysql_fetch_array($result_set1)){
$id_requests_1 = $id_requests['friend_requests'] + 1;
mysql_query("UPDATE members SET friend_requests=\"{$id_requests_1}\" WHERE id=\"{$userid_profilee}\"");
mysql_query("INSERT INTO friend_requests (user_id, user_id_requester) VALUES (\"{$userid_profilee}\", \"{$userid}\")");
echo "<div class=\"nNote nSuccess hideit\">
            <p><strong>SUCCESS: </strong>Pedido de Amizade enviado com sucesso!</p>
        </div>";
}

else
{
echo "Pedido de Amizade nao enviado!";
}
}    

如果我尝试更改$userid_profilee = $_SESSION['id'];$userid_profilee = $_GET['id'];

注意:未定义的索引:第 13 行 C:\xampp\htdocs\includes\functions.php 中的 id

4

1 回答 1

4

让我们首先指出一些事情,只是为了全面了解上述变量的工作原理!

根据定义

$_GET$_SESSION超全局自动全局变量。这仅仅意味着它们在整个脚本的所有范围内都可用。没有必要做全局 $variable; 在函数或方法中访问它们。

话虽如此,这些变量包含

$_GET通过 URL 参数传递给当前脚本的变量关联数组。

$_SESSION关联数组,包含当前脚本可用的会话变量。有关如何使用它的更多信息,请参阅会话函数文档。

在 Web 应用程序中,在用户之间共享信息的唯一方法是将这些信息存储在服务器上!在您的情况下,您决定使用 mysql 数据库。这是与 php 一起使用的最常见的选择!

注意:访问 mysql 数据库的新标准接口不再通过mysql_* 函数!此扩展已被弃用,并将在下一个版本的 php 中删除!最好使用mysqli_* 函数,或者使用mysqlipdo两种面向对象的替代方案之一

 

好的,现在让我们进入添加友谊的例子!从概念上讲,您只需要三页来完成您的任务,我不会详细说明,因为最后代码很容易编写......但是您需要了解会话/获取变量以及它们的不同之处,并且仍然能够互相交流!

 

login.php这是我将检查数据库是否存在用户并设置登录用户的个人资料 ID 的地方

session_start(); // this must be on any page after the login

// if : the user exists and the password matches then

// grab the $profile_id from the database and push it to the session array

$_SESSION['logged_profile_id'] = $profile_id; 

// else : error wrong username or password

 

other_profile.php此页面从数据库中获取人员的信息,并处理“添加朋友”按钮或链接

<?php session_start() ?>

<!-- includes + validation + loading person from the database and get info [id, name, status, etc] -->

<a href="addfriend.php?friend_profile_id=<?php echo $profile_id; ?>">Add Friend</a>


<!-- other includes and stuff -->

 

addfriend.php这就是你的 $_GET 变量即将到来的地方......它存储了对朋友的当前引用!

session_start();

$_SESSION['logged_profile_id'] // this is the logged in user

$_GET['friend_profile_id'] // and this is the new friend that can be added to the database

 

正如您所看到的,全局并不意味着您可以通过不同的用户传递变量!每个用户在自己的页面中都属于自己的会话,并且交叉信息的唯一方法是使用某种数据库!它可以是一个dbms或其他文件!它只需要在服务器上,并且两个用户都必须能够在上面读写!

请记住:您必须在需要传输会话的每个页面上调用 session_start,此外,必须在将任何内容发送到浏览器之前调用 session_start,因此最好将其放在页面的开头!

于 2013-05-01T08:17:39.690 回答