【问题标题】:$_SESSION function is not grabbing the session variable$_SESSION 函数没有获取会话变量
【发布时间】:2015-07-18 22:26:35
【问题描述】:

当使用$_SESSION 函数时,它不会抓取会话变量。我没有在屏幕上弹出任何错误,但是当我检查服务器错误日志时,我得到了一个

未定义的索引

当我添加 print_r($_SESSION);到我的代码顶部,但仍然在 php 标记内,页面上的所有 html 都消失了

$id = $_GET["id"];
$sql = "SELECT * FROM personalads WHERE id='$id' LIMIT 1";
$query = mysqli_query($db_conx, $sql);
$row = mysqli_fetch_array($query, MYSQLI_NUM);
$u = $row[1];
$age = $row[2];
$university = $row[3];
$headline = $row[4];
$message = $row[5];
$img = $row[6];
$picture = "";
if($img != NULL){
$picture = '<img class="adpicture" src="user/'.$u.'/'.$img.'">';
}    

$PM = '<div class="adrespond">';
$PM .= '<form onclick="return false;" name="pmForm" id="pmForm" method="post">';
$PM .= '<br><center>Send a message to the poster</center><br>';
$PM .= '<textarea name="pmTextArea" id="pmTextArea" rows="4" cols="30"></textarea>';
$PM .= '<input name="pm_sender_id" id="pm_sender_id" type="hidden" value="'.$_SESSION["userid"].'" />';
$PM .= '<input name="pm_sender_name" id="pm_sender_name" type="hidden" value="'.$_SESSION["username"].'" />';
$PM .= '<input name="pm_rec_name" id="pm_rec_name" type="hidden" value="'.$u.'" />';
$PM .= '<span id="PMStatus" style="color:#F00;"></span><br />';
$PM .= '&nbsp;&nbsp;<center><button name="pmSubmit" id="pmSubmit" onclick="sendPM()" >Send Message</button></center>';
$PM .= '<span id="status"></span>';
$PM .= '</div>';

当我添加 print_r($_SESSION) 和 print_r($_GET)(第二个数组来自 $_GET) 我网页上的 html 消失时,该函数的输出是

Array ( [userid] => 1 [username] => jbird [password] => ********
[mysex] => male [lookingfor] => female [university] => Brock ) Array ( [id] => 14 )

网页上没有打印错误,但是当我检查错误日志时,我看到了这个

[18-Jul-2015 23:40:47 Europe/Berlin] PHP Notice:  Undefined index: id in C:\xampp\htdocs\Website\adcontent.php on line 7

[18-Jul-2015 23:40:47 Europe/Berlin] PHP Notice:  Undefined index: userid in C:\xampp\htdocs\Website\adcontent.php on line 26

[18-Jul-2015 23:40:47 Europe/Berlin] PHP Notice:  Undefined index: username in C:\xampp\htdocs\Website\adcontent.php on line 27

第 7 行是 $id = $_GET["id"];第 26 行和第 27 行是我使用 $_SESSION 函数的地方,我使用的是 xampp apache 服务器,任何人都知道这里发生了什么,它真的开始让我失望了。谢谢

所有的 adcontent.php

<?php
include_once("check_login_status.php");
print_r($_SESSION);
print_r($_GET);
?>
<?php
$id = $_GET["id"];
$sql = "SELECT * FROM personalads WHERE id='$id' LIMIT 1";
$query = mysqli_query($db_conx, $sql);
$row = mysqli_fetch_array($query, MYSQLI_NUM);
$u = $row[1];
$age = $row[2];
$university = $row[3];
$headline = $row[4];
$message = $row[5];
$img = $row[6];
$picture = "";
if($img != NULL){
$picture = '<img class="adpicture" src="user/'.$u.'/'.$img.'">';
}

    $PM = '<div class="adrespond">';
    $PM .= '<form onclick="return false;" name="pmForm" id="pmForm" method="post">';
    $PM .= '<br><center>Send a message to the poster</center><br>';
    $PM .= '<textarea name="pmTextArea" id="pmTextArea" rows="4" cols="30"></textarea>';
    $PM .= '<input name="pm_sender_id" id="pm_sender_id" type="hidden" value="'.$_SESSION["userid"].'" />';
    $PM .= '<input name="pm_sender_name" id="pm_sender_name" type="hidden" value="'.$_SESSION["username"].'" />';
    $PM .= '<input name="pm_rec_name" id="pm_rec_name" type="hidden" value="'.$u.'" />';
    $PM .= '<span id="PMStatus" style="color:#F00;"></span><br />';
    $PM .= '&nbsp;&nbsp;<center><button name="pmSubmit" id="pmSubmit" onclick="sendPM()" >Send Message</button></center>';
    $PM .= '<span id="status"></span>';
    $PM .= '</div>';

// PHP FOR SENDING PRIVATE MESSAGES
if(isset($_POST["sendername"])){
    $pmTA = mysqli_real_escape_string($db_conx, $_POST['pmTextArea']);
    $sname = preg_replace('#[^a-z0-9 ]#i', '', $_POST['sendername']);
    $rname = preg_replace('#[^a-z0-9 ]#i', '', $_POST['recName']);
    $number = "1";
    $sql = "INSERT INTO privatemessages (to_user, from_user, time_sent, message) VALUES ('$rname','$sname',now(),'$pmTA')";
    header("location: personalspage.php");
    $query = mysqli_query($db_conx, $sql) or die("Its not working");
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Untitled Document</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script src="jquery-2.1.4.js" type="text/javascript"></script>
<script src="main.js"></script>
<script src="ajax.js"></script>
<script type="text/javascript">
function sendPM() {
      var pmTextArea = _("pmTextArea").value;
      var sendername = _("pm_sender_name").value;
      var recName = _("pm_rec_name").value;
      var status = _("status");
      if (pmTextArea == "") {
           status.innerHTML("Please type in your message.");
      } else {
           var ajax = ajaxObj("POST", "adcontent.php?id=<?php echo $id; ?>"); 
           window.location = "adcontent.php?id=<?php echo $id; ?>";      
      }
       ajax.send("pmTextArea="+pmTextArea+"&sendername="+sendername+"&recName="+recName);
}
</script>
</head>

<body>
<?php include_once("template_pageTop.php"); ?>
<div>
<div class="adcontent">
    <div class="adcontentpicture">
        <?php echo $picture; ?>
    </div>
    <div class="adcontenttext">
        <b>Age:</b><?php echo $age; ?><br><br>
        <?php echo $university; ?> University <br><br>
        <?php echo $headline; ?><br><hr>
        <?php echo $message; ?><br><br><br><br><br><br><br><br>
        <hr><?php //echo $PM; ?>
        <div class="adrespond">
        <form onclick="return false;" name="pmForm" id="pmForm" method="post">
        <br><center>Send a message to the poster</center><br>
        <textarea name="pmTextArea" id="pmTextArea" rows="4" cols="30"></textarea>
        <input name="pm_sender_id" id="pm_sender_id" type="hidden" value="'.$_SESSION['userid'].'" />
        <input name="pm_sender_name" id="pm_sender_name" type="hidden" value="'.$_SESSION['username'].'" />
        <input name="pm_rec_name" id="pm_rec_name" type="hidden" value="'.$u.'" />
        <span id="PMStatus" style="color:#F00;"></span><br />
        &nbsp;&nbsp;<center><button name="pmSubmit" id="pmSubmit" onclick="sendPM()" >Send Message</button></center>
        <span id="status"></span>
        </div>
    </div>
</div>
</body>
</html>

登录时设置会话变量

【问题讨论】:

  • 你的意思是你把一些值放入 $_SESSION 变量并且值消失了吗?
  • 错误消息说明了解决问题所需的一切。在执行时,未定义索引。在您提供给我们的 sn-p(s) 中,您实际上从未定义过它们。如果您在代码中的其他位置执行此操作,请提供相关的代码部分。此外,您正尝试在 PHP 代码中检索 GET 变量,但通过 method="post" 提交表单。
  • @Ondřej Šotek 没有值,但是当我使用 $_SESSION 函数检索它时,我得到一个未定义的索引错误
  • @FoxRider 查看代码 sn-p,其中我显示了 print_r($_SESSION) 和 print_r($_GET) 输出的内容,第一个数组来自会话函数,第二个数组来自 get 函数,值在那里,但函数没有正确检索它们
  • 你提供了输出,但不是你放的地方,我们不知道print_r前后发生了什么。这使我们无法复制它。

标签: php html apache xampp session-variables


【解决方案1】:

我无法确定问题的根源,但在查看您的代码时,我注意到了以下几点:

  • 我猜对了adcontent.php 向自己提交表单数据吗?如果是这样,您应该明确检查用户是否实际提交了表单,例如通过isset。不过,更好的做法是将 AJAX 请求的处理外包到一个单独的文件中。
  • 您实际上是通过session_start 初始化会话吗?这是访问会话变量所必需的。

此外,您应该始终验证来自用户的数据。在您的示例中,您应该在将整数传递给数据库之前验证或 type cast $_GET['id'] 为整数。

【讨论】:

  • 是的,表单数据是提交给自己的,我之前有 isset 函数,但认为这是问题所以我把它拿出来,在我的 login.php 文件中,会话开始 100% 我知道, 数据验证我仍然需要做大声笑我只是把它留下来直到我能弄清楚这一点,试图剥离所有东西以使其尽可能简单地找出问题,它是否与服务器有关以及如何它处理收到的数据(我使用 xampp apache)
猜你喜欢
  • 2012-09-24
  • 1970-01-01
  • 2013-09-16
  • 2012-08-08
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 2018-01-04
相关资源
最近更新 更多