好吧,我正在尝试编写一个添加好友脚本并且他正在工作,但是当我的脚本(在一个函数中)尝试搜索$_GET['id']
以查看要发送好友请求的个人资料的ID,脚本找不到因为是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
答案 0 :(得分:4)
让我们首先指出一些事情,只是为了全面了解上述变量的工作原理!
根据定义
$_GET和$_SESSION是超全球或自动全局变量。这只是意味着它们在整个脚本的所有范围内都可用。无需全局$ variable; 即可在函数或方法中访问它们。
话虽如此,这些变量包含
$_GET通过URL参数传递给当前脚本的关联变量数组。
$_SESSION关联数组,包含当前脚本可用的会话变量。有关如何使用此文档的详细信息,请参阅Session functions文档。
在Web应用程序中,在用户之间共享信息的唯一方法是在服务器上存储该信息!在你的情况下,你决定去一个mysql数据库。这是与php一起最常见的选择!
注意:访问mysql数据库的新标准接口不再通过mysql_* functions了!此扩展已经弃用,将在下一版本的php中删除!它更适合与mysqli_* functions一起使用或使用两种面向对象的替代方案中的一种mysqli和pdo
好的,现在让我们进入添加友谊示例!从概念上讲,您只需要三个页面来完成任务,我不会详细介绍,因为最后代码很容易编写。 ..但你需要了解会话/获取变量以及它们如何不同,并且仍然能够互相交流!
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,所以最好将它放在页面的开头!