みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

配列のデータを受け取る、のバグ

PHPスーパーサンプル第2版の2-3/rcvarray.phpからの抜粋です。

<html>
<head>
<title>配列のデータを受け取る</title>
</head>
<body>
<?php

<?php
$array = array("menu"=>"カレー", "price"=>"380", "date"=>"2005/01/01");

echo "配列の内容(エンコードした場合)";
print_r(unserialize(base64_decode($_POST["ar_enc"])));
echo "<p>配列の内容(そのまま渡すと失敗)";
print_r($_POST["ar"]);
?>
<form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>">
<input type="submit" value="送信" name="sub1">
<input type="hidden" name="ar" value="<?php echo $array ?>">
<input type="hidden" name="ar_enc"
value="<?php echo base64_encode(serialize($array)) ?>">
</form>
</body>
</html>

を実行すると、
配列の内容(エンコードした場合):
Notice: Undefined index: ar_enc in /UNIONFS/opt/lampp/htdocs/samples/chapter2/2-3/rcvarray.php on line 14
配列の内容(そのまま渡すと失敗):
Notice: Undefined index: ar in /UNIONFS/opt/lampp/htdocs/samples/chapter2/2-3/rcvarray.php on line 16
というエラーが出るんですが、どうやって直せばいいのですか?
正しくは、上には配列の内容が表示され、下にはarrayとだけ表示されるようです。
$arrayの直後に
    $ar_enc = "";
    $ar = "";
と挿入してみましたがダメでした。
@でエラーを抑制するのはなしでお願いします。

投稿日時 - 2011-08-27 22:30:30

QNo.6971923

困ってます

質問者が選んだベストアンサー

単純にエラー退避をいれておけばよいですが

>print_r(unserialize(base64_decode($_POST["ar_enc"])));
if(isset($_POST["ar_enc"])) print_r(unserialize(base64_decode($_POST["ar_enc"])));

>print_r($_POST["ar"]);
if(isset($_POST["ar"])) print_r($_POST["ar"]);

エラーレポートからE_NOTICEを抜くだけでもいけます

error_reporting(E_ALL ^ E_NOTICE);

http://php.net/manual/ja/function.error-reporting.php

>バグ

PHPのバージョンによる設定の違いだと思いますが

投稿日時 - 2011-08-27 23:22:38

お礼

それで出来ました。
設定されているときだけ表示するんですね。
ありがとうございました。

投稿日時 - 2011-08-28 02:55:07

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問