为了账号安全,请及时绑定邮箱和手机立即绑定

PHP SESSION 未定义变量

PHP SESSION 未定义变量

PHP
噜噜哒 2023-07-08 17:27:38
晚上好,我正在开发一个小型大学项目。我正在创建一个网站,人们可以使用 PHP 发布他们用过的物品来出售它们或与另一个对象交换它们(一种 eBay,但简单 100000 倍),这对我来说是新的。为了简单起见,填写连接表单(connexion.php)后,用户会被重定向到他自己的个人资料(profil.php),其中显示他的用户名和电子邮件(从数据库获取后)。如下所示:///////////connexion.php : //////////<?phpsession_start(); try{    $bdd = new PDO('mysql:host=localhost;dbname=espace_membre;charset=utf8', 'root', '');}catch (Exception $e){        die('Erreur : ' . $e->getMessage()); //message d'erreur au cas o&ugrave; la connexion &eacute;choue}if(isset($_POST['formconnect']))  //v&eacute;rifie que le bouton pour se connecter est enclench&eacute; {  $mailconnect = htmlspecialchars($_POST['mailconnect']);   $mdpconnect = sha1($_POST['mdpconnect']);  if(!empty($mailconnect) AND !empty($mdpconnect))  {     $requser=$bdd->prepare("SELECT * FROM membres WHERE email = ? AND mdp= ?");       $requser->execute(array($mailconnect,$mdpconnect));     $userexist=$requser->rowcount();      if($userexist==1)     {          $userinfo=$requser->fetch();          $_SESSION['id']=$userinfo['id'];          $_SESSION['pseudo']=$userinfo['pseudo'];          $_SESSION['email']=$userinfo['email'];          header("Location: profil.php?id=".$_SESSION['id']);     }     else     {      $erreur="password or mail not valid" ;      }  }  else  {    $erreur =" please complete all inputs " ;   }} ?>每当我想打印类似的东西  <h2>welcome to your profile,<?php echo $userinfo['pseudo']?> </h2>变量 $userinfo['pseudo'] 变成我的用户的昵称,这就是我想要的。但是,由于我不知道,我无法让这些变量在任何其他页面上工作,并且我不断收到此错误:** 注意:未定义的变量:C:\wamp\www\projet2\formulaireajout.php 第 64 行的 userinfo**我创建了另一个页面,供用户填写表单来发布内容
查看完整描述

1 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

在连接页面上,您将 URL 中的 id 传递到配置文件页面,如下所示:header("Location: profil.php?id=".$_SESSION['id']);配置文件页面上查找要设置的 $_GET['id'] 的函数得到满足,因为 id 是在 URL 中设置的。

但是,如果我是用户并单击这些链接:

  • 版本配置文件.php

  • 修改器mdp.php

  • 断开连接.php

  • 添加表单.php

id 不会在 URL 或页面请求中传递,但您的代码仍在寻找要在这些页面上设置的值以及下面的代码片段:

if(isset($_GET['id']) AND $_GET['id'] > 0)

{

  $getid=intval($_GET['id']);

  $requser= $bdd -> prepare('SELECT * FROM membres WHERE id= ?');

  $requser->execute(array($getid));

  $userinfo=$requser->fetch();

}

由于未设置 $_GET['id'] ,因此$userinfo未定义此变量以便稍后在代码中使用。仅当 $_GET['id'] 设置且大于 0 时才会设置。


我的建议是,由于您已经在会话中设置了用户 ID,因此请在其他页面上调用 $_SESSION 变量。因此,只要您继续启动会话,就像现在位于文件顶部一样,并且不结束或销毁会话,您应该能够访问其他页面上 $_SESSION 数组的值:


      $_SESSION['id']=$userinfo['id'];

      $_SESSION['pseudo']=$userinfo['pseudo'];

      $_SESSION['email']=$userinfo['email'];

对于您已在会话中设置的值,只需稍后在其他页面上的代码中回显这些值即可。所以调用它应该可以在其他页面上工作:


<?php echo $_SESSION['pseudo']?></h3>


当然,如果您想在用户“注销”时销毁会话和/或取消设置值。此外,由于值位于会话中,因此您不需要在每个页面上对相同值进行数据库查找,除非它们将要更改或者您正在查找尚未存储在会话中的新数据。


希望这可以帮助。


查看完整回答
反对 回复 2023-07-08
  • 1 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信