0

あるページから別のページにセッション変数を渡そうとしていますが、次のページでセッション変数が空になっているようです。助けてくれてありがとう!

2 ページのコード全体を次に示します。

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)];
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 などのスーパー グローバル変数をどのように扱うかが原因です。スーパー グローバルを特別なものにすることの 1 つは、'global' キーワードを使用する必要なく、すべてのスコープに存在することです。もう1つは、すべての子要素の変数を自動的に作成することです...再びすべてのスコープで。したがって、次のようなもの
$_SESSION['username'] = 'Levi';
がある場合、「Levi」に等しい追加の変数 $username が作成されます。上記の例では、
$_SESSION[1] = 'Test';
PHP を設定すると、変数 $1 = 'Test'; を設定しようとします。不可能なこと

于 2013-07-26T23:33:15.397 に答える