我正在尝试将会话变量从一个页面传递到另一个页面,但似乎在下一页上会话变量为空。谢谢你的帮助!
以下是两页上的全部代码。
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)];
答案 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