0

我正在尝试将会话变量从一个页面传递到另一个页面,但看起来会话变量在下一页上是空的。谢谢您的帮助!

这是两页上的全部代码。

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();

删除评论.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)];
4

1 回答 1

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让我了解这些信息。

他的评论如下:

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

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

于 2013-07-26T23:33:15.397 回答