• ベストアンサー

GET POST の引数渡しについて

現在、PHPにて掲示板を製作中です。 スレッド型でタイトルをクリックすると<a href="...?記事のNo.&...">タイトル</a>とGETで情報を渡し、その書き込みが表示される仕組みです。 書き込みフォームからの情報はPOSTで渡します。といたって普通の仕組みだと思うのですが、問題はGETで受けた値をPOSTで更新できないのです。 どういう事かというと、まずタイトルをクリックしNo.1の記事を表示します、そのときURIの表示は[ http://・・・.php?type=tree$log=1 ]になっているとします。 そのNo.1の記事に返信するために内容を書き込んでsbumitボタンを押して記事をPOSTで送信します。 返信記事はNo.2になります。すると返信されたNo.2の記事内容を表示し、No.1はスレッドでタイトルだけの表示になるようにしてるのですが、そのときのURIの表示は[ http://・・・.php?type=tree$log=1 ]ままなのです。そのため、画面ではNo.2を表示してるですが、URIはNo.1のままなので、No.1のタイトル部分をクリックしても、No.1を読み込みに行ってくれません。 No.0があったとしてNo.0をクリックするときちんと表示されます。おそらくNo.1をクリックしたGETの情報を引きずっていてまだNo.1を表示していると思っているためだと思うのですが、POSTで渡した場合はGETの情報を更新できないのでしょうか? 何を言っているのかよくわからないかと思いますが、何か解決策はないでしょうか?よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

<form action="bbs.php" method="post"> このフォームのaction先に、 $_SERVER['PHP_SELF'] $_SERVER['SCRIPT_NAME'] $_SERVER['REQUEST_URI'] とかでプログラム名を入れていると、ページURIの全部が入ってしまい <form action="bbs.php?mode=read&number=1" method="post"> となっているんではないでしょうか? その次のリンクは、同一URIなので、ブラウザはreloadしていない と言う状態かな?? 対策1 action先は、$_SERVER[] で指定せず、直接「bbs.php」を入れておく 対策2 post後画面の出力は、location header送信として、bbs.php?mode=read&number=7 のようにURI変更する(post情報も消えるので、リロードで2重送信にならないで済みます)。 対策3 または、post後画面の出力時のheaderに nocache 情報を追加、ブラウザによってはmetaタグでnocache情報も付けた方がよい。 書式は、ちょっと失念。nocacheで調べてみて下さい

tetsu222
質問者

お礼

いま、見直してみたところaction先の変数の受け渡しがうまくいってませんでした。単純ミスでした。ご迷惑をおかけいたしまた。 しかし$_SERVER[] やlocation headerのことを今回知れて大変勉強になりました。ありがとうございます。また何かありましたらよろしくお願いいたします。

tetsu222
質問者

補足

hrm_mmmさん有難うございます。 対策1についてですが、掲示板を数ページ作るため、bbs1.php、bbs2.phpなどと出力のHTML用のphp別にしています。そのためどうしてもaction先は変数での指定になってしまうのです。対策2・3については勉強不足の為、そのようなことができることを知りませんでした。どのようにするのか知識がないので調べてやってみたいと思います。月曜日までちょっと時間がなくできません。月曜にやってみます。ありがとうございました。

その他の回答 (1)

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

こんにちは。 。。。うん。正直、何を言っているのかイマイチです(汗 ページ(ソース)の移り変わり、どこがどうなるのやらさっぱり(汗 PTP使いじゃなく、ASPユーザーですが。。。 とりあえず、確認事項。。。(?) ・POSTとGETのMethodでの宣言をちゃんと行っていますか? ・targetの指定はズレてませんか? ・POSTとGETが混在してませんか? 一応、混在していてもいい場合はあるんですけど、GET指定の場合は、POSTが使用できなかったかな?と記憶してます。 POST指定の時は、GETも使える。。。ような記憶が。。。 まずは 「このページの時にGETの値はこうなっていて、POSTの値はこうなっていて。。。」 と、使用する値のものを全て目に見える形で出したほうがやりやすいかと思いますよ。

tetsu222
質問者

補足

STICKY2006さん、ありがとうございます。 説明下手で申し訳ありません。 一応、流れを説明いたします。 最初はスレッドでタイトルだけを表示しています。 ●ログNo.1・・・・・・  LログNo.2・・・・・・   LログNo.4・・・・・・ ●ログNo.3・・・・・・  LログNo.5・・・・・・   LログNo.6・・・・・・ とこんな感じでの表示なってます。 ↓   <a href="bbs.php?mode=read&number=1">タイトル</a> ↓    ログNo.1のタイトルクリックでGETで情報を渡します。 ●ログNo.1   メッセージをなどを表示  --------------------------     返信フォーム  LログNo.2・・・・・・   LログNo.4・・・・・・ この様にNo.1の内容を表示。 この時点のURIは[http://・・・・・.bbs.php?mode=read$number=1]です。 ↓  返信フォームにメッセージを書き込み送信 ↓  <form action="bbs.php" method="post"> ↓ <input type="hidden" name="mode" value="message"> ↓ <input type="hidden" name="number" value="7"> ↓ ほか書き込まれた内容をPOSTで送ります。 ●ログNo.1・・・・・・  LログNo.2・・・・・・   LログNo.4・・・・・・  LログNo.7  メッセージをなどを表示  -------------------------- と表示されます。 この時点でURIは[http://・・・・・.bbs.php?mode=read$number=1]のままなのです。 ですので、No.1のタイトルをクリックしてもNo.1の内容は表示されません。 No.2やNo.4は表示されます。 [http://・・・・・.bbs.php]とならないのです。

関連するQ&A

  • POSTとGETについて

    POSTとGETについて2点質問が御座います。 PHPは最近手を付け始めましたので、初心者です。 (1)PHPでPOSTとGET両方使うことは出来ますでしょう   か? 内容:PHPファイルからCGIに値を引きつきたいのですが、テキストエリアのフォーム(POST)とCGIのリンク先に"hogehoge.php?id=xxxx"とGETのxxxxとPOSTのテキストエリアに記載した内容を2つ引き継ぎたいのですが、GETの方の値がCGIで反映されていません。 POSTとGETの両方引きつぎたいときはどのようにすれば良いでしょうか? (2)また(1)とは、別の話ですが、GETだけで2つの情報を引き継ぐことは可能でしょうか? "hogehoge.php?id=xxxx,?id2=yyyy"のようなイメージでxxxxとyyyyの両方を渡したいと思ってます。 どうかご教授宜しくお願い致します。

    • ベストアンサー
    • PHP
  • $_POST,$_GETの値が空...

    はじめまして。まだまだPHP初心者なのですが.. PHP Ver 4.3.2 にて、$_POST 、 $_GET の値がどうしても 受け取れないのですが、何か設定がおかし いのでしょうか... ちなみに、register_global は OFF です。 GET は URL http://***.com/xxx.php?ID=aaa echo $_GET["ID"]; print_r ( $_GET ); POSTは、通常通り form の method を POSTに設定して 受け取っていますが、どちらにしても結果は、何も表示されません。 どなたか解決方法をご教授下さい。 また、既出でしたら申し訳ございませんがご指摘下さい。

    • ベストアンサー
    • PHP
  • IISのログに出力される「GET」と「POST」の意味

    IISのログに出力される「GET」と「POST」の意味 IISのログに出力される「GET」と「POST」はどういう意味なのでしょうか。 「GET」はサーバーからクライアントに送信した画面で 「POST」はクライアントがsubmitした画面のことなのでしょうか? aspでできているwebシステムを表示したログを解析しています。

  • POSTとGETを利用しようと

    サブミットのときにはgomiのデータが$_POST['gomi']にセットされキャンセルのときにはgomiのデータが$_GET['gomi']にセットされるようにしたいのですが x.html: <form action="x.php" method="post"> <input type="text" name="gomi"/> <input type="submit" value="set"/> </form> <p><a href="x.php">cancel</a></p> ではもちろんcancelをクリックしても$_GET['gomi']にgomiのデータがセットされません どうしたらできるでしょうか?

    • ベストアンサー
    • PHP
  • 1アクションでPOST・GET、両方送信したい

    1つのフォームからボタンをクリックして、 POST・GET送信と、両方飛ばすには、どうすればよいでしょうか? URLに「表示させたいパラメータ」と「表示させたくないパラメータ」 があります。 「表示させたいパラメータ」は、GETで、 「表示させたくないパラメータ」は、POST送信したいのですが、 1つのフォームで、同時に飛ばす方法が分かりません。 <form method =post action=hoge.php>  <input type=text name="piyo" value="piyo">  <input type=hidden name=puyo_id value=puyo>←これだget送信したい  <input type=submit value="送信"> </form>

    • ベストアンサー
    • PHP
  • PHPからPOSTで他のPHPを実行する方法

    サイトのアクセスログ収集をするPHPを初心者が悩みながら作ってます。Javascriptで拾いきれないアクセスを解析するためです。PHPからPOSTで他のPHPを実行する方法って、file_get_contents以外に何かありますでしょうか? やりたいこと、というか今考えているフローとしては、 (1)ページにアクセスしてきたユーザー情報をhoge.phpで取得(hoge.php) (2)取得した情報を書き込み用のfuga.phpにPOSTで渡す(hoge.php) (3)fuga.phpでPOSTを受け取り、POST情報を元に地域情報を取得(fuga.php) (4)POSTで受け取った情報と地域情報を合体させてログファイルに書き込み(fuga.php) ということでやってみようとしています。 PHP自体はなんとか動くところまできて、ログの書き込み自体はなんとかうまくできているようなんですが、実際にアクセスされるページが重くなってしまいました。 色々と調べてみたりこねくり回してみてわかったのは、どうも(3)の部分で時間がかかっているようです。大量のデータから地域情報を抽出するので、しかたないのかなとは思いつつも、実際アクセスされるページの表示はサクッと表示されたいと考えています。 なんとかできないものかと考えているのですが、どうやら(2)でPOST送信するために使っているfile_get_contentsが、fuga.phpからの情報を受け取るためにfuga.phpの処理が終わるのを待っているのではないかというところにようやく行きつきました。 別に戻り値を必要とするわけではなく、hoge.phpからfuga.phpへ投げっぱなしジャーマンのようにしたいのですが、方法はありますでしょうか? いろいろググってみたのですが、戻り値を受け取るための情報はあるのですが、受け取らないで投げっぱなしにする情報が見当たりません。 なにぶん素人なため、説明もわかりにくいと思いますが、ごうかご助言よろしくお願いします。 サンプル的なソースや情報など、素人にもわかる形でよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • POST・GETされたデータのチェックについて

    こんにちわ phpスクリプト勉強中のものなのですが、 POST・GETされたデータを必須チェックや文字数チェック、使用文字列のチェックなど処理をすることは一般的ですが、渡されたデータを、正規表現などを用いて、スクリプトで使用できるように処理する考え方になにか総称があったと思うのですがなんと言うのでしょうか? ファイルを扱う時にはロックする のように、POSTされたデータを○○してログに保存する みたいな表現ありませんでしたっけ?

    • ベストアンサー
    • PHP
  • GETとPOSTを同時利用したい

    wordpressで下記のようにPOSTを使用して遷移先のメールフォームにデータを渡しています。 コードの作成は(http://blog.goo.ne.jp/xmldtp/e/0884dbe92721ab84cb27d212ca631094)を参考にしました。 <a href="" onclick="document.mail_form.submit();return false;" > <img src="@@@.png" alt="お問い合わせフォーム"> </a> <form action="<?php echo get_permalink( @@@ ); ?>" method='post' name="mail_form" target="_blank"> <input type='hidden' name='post_id' value="<?php echo $post->ID; ?>"> </form> これをそのまま流用し、<form>内の遷移先URLに『?view=english』を追加して英語版での表示切替をしようとしたのですが、これをつけるとPOSTの情報が遷移先に渡らなくなりました。 <form action="<?php echo get_permalink( @@@ ); ?>?view=english" method='post' name="mail_form" target="_blank"> <input type='hidden' name='post_id' value="<?php echo $post->ID; ?>"> </form> どのようにすればPOSTの内容を維持したまま遷移先URLにGETの文字列を追加させることができますか?

    • ベストアンサー
    • PHP
  • Ajax・jQueryでGETとPOSTする方法

    画像をクリックしたときにjQuery,Ajaxを利用してGET/POSTをしたいです。 POSTとGETは良く使うので今回両方の流れを知りたいと思います。 PHPではPOST、GETは使うことができます。javascript,jQueryはちょっと触ったことのある程度です。 フォームに値を入力してjQueryとAjaxでPOSTでデータを送るのは下記ホームページを参考にしてみたら成功しました。 http://webcake.no003.info/webdesign/jquery-ajax-php-post-sample.html 今回は下記のような複数のパラメータを送信したいと思います。 画像Aをクリックした時にkeyword=aaaa,cate=1 画像Bをクリックした時にkeyword=bbbb,cate=2 画像Cをクリックした時にkeyword=cccc,cate=3 今までPHPでGETを使っていた時のHTML部分です↓ <a href="index.php?keyword=aaaa&cate=1"><img src="images/a.jpg"></a> <a href="index.php?keyword=bbbb&cate=2"><img src="images/b.jpg"></a> <a href="index.php?keyword=cccc&cate=3"><img src="images/c.jpg"></a> 「send.phpファイル」 <?php //POSTでデータが送られた場合 echo $_POST['keyword'].'<br>'; echo $_POST['cate'].'<br>'; //GETでデータが送られた場合 echo $_GET['keyword'].'<br>'; echo $_GET['cate'].'<br>'; ?> ==GET================================================================ (HTML部分) <a href="index.php?keyword=aaaa&cate=1"><img src="images/a.jpg"></a> の記載方法だと、クリックしたときにアドレスバーにアドレスが入力されるのでページが切り替わってしまいAjaxにならないので違う形にする必要があると思いますがどのようにkeyword,cateのパラメータを持たせればよいのでしょうか? または、この形のままで良く、リンクした時にページが飛ばないような処理方法があるのでしょうか?(またはAjaxではあまりGETは使わないのでしょうか?) 上記に記載した、POSTの参考例のソースを記載します。 GETの場合にどのように変えたらよいのでしょうか。 $(document).ready(function() { var data = {request : $('#request').val()};//GETで複数値対応に書き換えが必要。 $.ajax({ type: "GET", url: "send.php", data: data, success: function(data, dataType) { $( '#test' ) . html( data ); },error: function(XMLHttpRequest, textStatus, errorThrown) { this; alert('Error : ' + errorThrown); } }); }); ==POST================================================================ (HTML部分) formを使う形になると思いますが、どのような書き方が良いのか教えて下さい。 画像を使うと下記のようになるとは思いますが、A,B,Cそれぞれにkeyword,cateの情報をどのように持たせておいたらよいのかがわかりません。 <form> <button type="submit" name="" value="*****"><img src="sample.gif"></button> </form> (jQuery部分) $(document).ready(function() { var data = {request : $('#request').val()};//POSTで複数値対応に書き換えが必要。 $.ajax({ type: "POST", url: "send.php", data: data, success: function(data, dataType) { $( '#test' ) . html( data ); },error: function(XMLHttpRequest, textStatus, errorThrown) { this; alert('Error : ' + errorThrown); } }); }); 以上、よろしくお願い致します。

    • ベストアンサー
    • AJAX
  • PHPの引数渡しについて【ギブアップ】

    色々調べましたがわからず質問させて頂きます。 以下のPHP間で引数渡しをしたいのですが上手くいきません。 【A.php】 一部のみ抜粋 <FORM ACTION="./b.php?PASS=data" METHOD="POST" NAME="ppform"> <input type="password" name="data" size=20> </FORM> 【B.php】 一部のみ抜粋 <?php $Pass = $_GET["PASS"]; echo <<<A $Pass<BR> A; ?> とすると「data」という文字が出力されます。 やりたいことは、A.phpでパスワード入力された文字を表示したいのです。 (dataの中身を取得したいのです。) これのどこがいけないのでしょうか? ご指摘宜しくお願い致します。

    • ベストアンサー
    • PHP