• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:異なるページへ配列を渡したいのですが、うまくいきません。どうすればよい)

異なるページへ配列を渡す方法についての質問

このQ&Aのポイント
  • 異なるページへ配列を渡す方法が分かりません。フォームの隠し項目で配列データを渡す方法を試しましたが、うまくいきませんでした。
  • 現在、APIへアクセスを行い、simplexml_load_stringを使ってカテゴリー階層部分を取得し、配列に格納していますが、別ページへ丸まる渡す方法がわかりません。
  • 質問者は単純に別のページに配列を渡したいだけであり、エンコードやデコードにこだわりはありません。どのようにすればよいでしょうか?

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

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.3

SimpleXMLElementは、objectからシリアル化はできても、タグ名情報が失われているので、unserializeでは再現出来ないようです。 空っぽの SimpleXMLElement Object() にはなるので、 'Node no longer exists'の方は、@$_GET["array_enc"] としているけど、送信情報を受け取ってないときは、null をunserializeに渡してしまうためでしょう。@ を付けるところを間違ってるというか、勘違いしてるように思います。isset() で切り分けるべきでしょう。 あと、var_dump($hits); も、送信ソースと別ソースに書いてるなら代入してないので、未定義変数を渡してますよ? あと、session もserialize() unserialize()を使っているので、SimpleXMLElementの中身を再現出来ないようです。 SimpleXMLElement::asXML でxml文字列に変換したデータをさらにhtmlspecialchars変換して、value値に入れて送信すればいいのでは? <?php session_start(); $xml = simplexml_load_string (引数); $hits = $xml->カテゴリー階層部分; $sosin= $hits->asXML() ; $_SESSION['xml_str'] = $sosin; // session に入れる場合 ?> <form action="**.php" method="get"> <input type="hidden" name="array_enc" value="<?php echo htmlspecialchars( $sosin, ENT_QUOTES ); ?>">以下略 受け取り: get送信なら、url欄のqueryもチェック <?php session_start(); // 1. session 受け取り if( isset($_SESSION['xml_str']) ){ $getsession = $_SESSION['xml_str'] ; echo 'session data :'.htmlspecialchars($getsession, ENT_QUOTES ).PHP_EOL. '<br> xml parsed ='; $sessionhits = simplexml_load_string($getsession); var_dump($sessionhits); }else{ echo 'cookie off ですか?'; } // 2. get 受信 if(isset( $_GET['array_enc'] )){ $jusin = $_GET['array_enc']; echo PHP_EOL.'<br>get data :'.htmlspecialchars($jusin , ENT_QUOTES ).PHP_EOL. '<br> xml parsed ='; $gethits = simplexml_load_string($jusin); var_dump($gethits ); }else{ echo '送信してませんよ'; } ?>

re999
質問者

お礼

コードを完璧に書いていただいたおかげで、 hiddenで渡すやり方と、セッションを使うやり方と、 それぞれ、個別に、無事動作確認することができました!!! 正直、自力ではどうしても解決できず、 半ば諦めかけていたので、 今、とっても、嬉しい気分です!!! 最後になりましたが、 配列を渡す方法を教えてくださいなどという、 ピントのズレた質問に、ご回答&ご協力&アドバイスいただいたみなさん、 本当にありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

可能性としては・・・ 配列に入っているデータが、数値や文字列じゃなくオブジェクトになっている場合。 「unserialize() Node no longer exists」あたりでググるとちょこちょこ引っかかります。 とりあえず渡す前のページでvar_dump($hits)を実行してデータ型を確認してみるとよいかと。

re999
質問者

補足

回答ありがとうございます。 渡す前のページでvar_dump($hits)を実行してデータ型を確認してみると、 どうやら、ご指摘のとおり、オブジェクト型となっているようです…。 早速、「unserialize() Node no longer exists」あたりでググってみたのですが、 書いてある内容が、難しくて、まだ試行錯誤中です。 とりあえず、もう少し、考えてみたいと思います。

すると、全ての回答が全文表示されます。
回答No.1

SESSIONではダメなんでしょうか? $xml = simplexml_load_string (引数); $_SESSION['hits'] = $xml->カテゴリー階層部分; ----------- 次ページで同様に、 $hits = $_SESSION['hits']; var_dump($hits); で確認していただければ…。

re999
質問者

補足

回答ありがとうございました。 早速試してみたのですが、 うまくいきませんでした……。 もうちょっと考えてみたいと思います。

すると、全ての回答が全文表示されます。

関連するQ&A