传递SESSION变量,获取错误

时间:2013-07-26 22:55:58

标签: php session-variables

我正在尝试将会话变量从一个页面传递到另一个页面,但似乎在下一页上会话变量为空。谢谢你的帮助!

以下是两页上的全部代码。

mysql_connect($db_hostname, $db_username, $db_password);
mysql_select_db($db_sitename);
$pagename= $row_getDisplay['USER_NAME']; 
$query=mysql_query("SELECT * FROM COMMENTS WHERE COMMENT_ON='$pagename' LIMIT 0, $no_of_comments");
echo "<hr />";

echo "<h3>Latest Comments</h3>";
session_start();
$count = 0;
while($fetch=mysql_fetch_array($query)) 
{

  echo "<p>".$fetch['COMMENT']."<a href=delete_comment.php?count=".$count.">X</a><br/><sub><b>Comment by: </b>".$fetch['COMMENT_BY']."</sub><hr /><p>";
  $_SESSION[strval($count)]=$fetch['COMMENT'];
  //echo $_SESSION[strval($count)];
  $count = $count + 1;

  print_r($_SESSION);
}
mysql_close();

delete_comment.php

<?php
session_start();
print_r($_SESSION);
error_reporting(E_ALL);
ini_set('display_errors', '1');


$count = $_GET['count'];
echo $count;
$comment = $_SESSION[strval($count)];

$db_sitename="genydb";
$db_hostname="localhost";
$db_username=
$db_password=

$con = mysqli_connect($db_hostname, $db_username, $db_password, $db_sitename);

echo $comment;
$myquery = sprintf("DELETE FROM COMMENTS WHERE COMMENT=%s", GetSQLValueString($_SESSION[$_GET['count']], 'text'));
$mysql=($myquery) or die(mysql_error());

mysqli_close($con);

?>

这是错误

Notice: Undefined offset: 0 in /var/www/geny/bootstrap/delete_comment.php on line 8
$comment = $_SESSION[strval($count)];

1 个答案:

答案 0 :(得分:1)

我相信这是因为您使用带有$ _SESSION的数字键。我在本地尝试了,我在第一页上看到了这个通知:

Notice: Unknown: Skipping numeric key 0 in Unknown on line 0

我在收到通知https://bugs.php.net/bug.php?id=42472

后也看到了这个错误报告

如果您执行此类操作,则不会引发通知并正确传递变量:

$_SESSION['keyName'][strval($count)]=$fetch['COMMENT'];

编辑:感谢Wiseguy让我接触到这些信息。

他的评论如下:

  

根据this answer,“$ _SESSION数组中的键受制于   与PHP中的常规变量名称相同的限制,即它们   不能以数字开头“。我猜这是一个副作用   register_globals的。奇怪的是,文档不再说明这一点。也许   当register_globals选项被删除时,此限制被删除   在PHP 5.4.0中删除

详细说明它与register_globals不兼容的原因是因为PHP如何处理超级全局变量,如$ _SESSION。使超级全局特殊的一个原因是它存在于所有范围内而无需使用'global'关键字。另一件事是它会自动为所有子元素创建变量...再次在所有范围内。所以,如果你有类似的东西
$_SESSION['username'] = 'Levi';
这将创建一个额外的变量$ username,它等于'Levi'。所以在上面的例子中设置一个
$_SESSION[1] = 'Test';
PHP将尝试设置变量$ 1 ='Test'; Which is not possible