• ベストアンサー

POSTをボタンではなくリンク等から送信する方法

PHP4とMySQLにてGoogleやYahoo!のような、 検索リンクもどきのものを作成しています。 フォームの文字と検索条件のチェックボックスの状態を取得し 以下のように出力します。 (例:検索に「教えてgoo」と入力した場合) ---------------------- [検索に戻る] [教えてgoo]の検索結果(全100件中1~10件を表示) 1 .サイト名 2 .サイト名 ....省略..... 9 .サイト名 10.サイト名 [次の10件→] [検索に戻る] ---------------------- さて、ここで解らない部分があるのですが、 formに入力されたデータはPOSTにて送信しています。 (GETだとアドレスが長く丸見えになってしまうため) 1ページ目はフォームより送信されたデータを受信するので、 「[教えてgoo]の検索結果」の「教えてgoo」の部分は表示されますが、 次の10件に移動した場合は当然送信されるデータが無いので 「[]の検索結果」となり、検索結果の情報も取得できません。 このような場合、どうやってデータを送信すればよいのでしょうか? 下記のようなやり方だとできないこともなさそうですが、 これだと「次の10件」の部分がボタンになってしまいます。 $page = $_POST["page"]; $word = $_POST["word"]; <form action="search.php" method="POST"> <input type=hidden name="page" value=$page+1> <input type=hidden name="word" value=$word> <input type=button name="submit" value="次の10件"> </form> どなたかご存じの方がいらっしゃいましたら どうかよろしくお願い致します

  • PHP
  • 回答数4
  • ありがとう数5

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

ANo.3の方も書かれてますが、私ならセッション使います。アンカータグはhref="xxx.php?p=1"とかでけで済みますから。ページの数字部分は(スクリプトで生成するので)表示しているページで変わりますけどね。Cookieが使えない環境にも対応したいとなると(Cookie非対応端末の場合)セッションIDがURLに入ってしまいますが、どこまで気にするか(しないといけないか)次第でしょう。 ただ、GoogleなどはGETで受け渡してますよね。丸見えになる→そのURLを保存して再利用するときに便利という面もありますので。

hiroko_ss
質問者

お礼

パソコンのログインみたいなものだとセッションは有効ですが やっぱり携帯端末が気になりますしね・・・。 なるほど、やはりPOSTで渡してページングというのは 色々問題もあって難しいものなのですね。 それが判っただけで大きな収穫です。 検索エンジンみたいなものゆえにパスワード認証などが あるわけではありませんし、 GETなら他人にURLを直接渡すということもできますので、 そちらで動作させることにします。 (というかGoogleもGETだったんですね、 身近なのに気付きませんでした) 回答ありがとうございました。

その他の回答 (3)

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.3

ページ間のデータの受け渡しには、セッション変数も利用 できますよね。 POSTと同じく、データを目視することができないため、 セキュリティ面でも安心です。 URLに、記述してしまうと、改ざんされ、不正アクセス される恐れもあります。

hiroko_ss
質問者

お礼

回答ありがとうございます。 なるほど、セッションでも出来るのですか。 セッションはパスワード認証などにも使われていますしね。 ただ、私の方が少しばかり勉強不足だったので、 そちらを調べてみようと思います。

  • suzu_zou
  • ベストアンサー率34% (112/327)
回答No.2

JavaScriptを使うくらいしか思いつかないです。 <form action="search.php" name="frm" method="POST"> ... <a href="#" onClick="javascript:document.frm.submit();">次の10件</a> ... </form> ダメですか?

hiroko_ss
質問者

お礼

回答ありがとうございます。 No.1の方のお礼にも書きましたが、どうしてもJavaScriptだと 対応してないブラウザや機種も多いので少し厳しいですね・・・。 やはりPOSTではなくGETを使うべきなのか。 とりあえずアドバイスいただいたものでも動作はしますので、 色々と対策を考えてみようと思います。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

変更前:<form action="search.php" method="POST"> 変更後:<form action="search.php" name="f_list"method="POST"> 変更前:<input type=button name="submit" value="次の10件"> 変更後:<a href="javascript:document.f_list.submit();">次の10件</a> これでいかがでしょうか? 但し、JavaScriptは有効としてください。

hiroko_ss
質問者

お礼

回答ありがとうございます。 なるほど、JavaScriptで送信すればできそうです。 ですが、2~3割程度の方がJavaScriptが無効になっていますし 携帯電話にも対応予定なのでどうも厳しいところですね・・・。

関連するQ&A

  • $POSTの送信

    POSTデータを送信する方法を教えてください。 PHPのPOSTを用いたプログラミングを行っています。 以下のように、前ページ受信したPOSTの内容(「aaa」)を hiddenで送信したいと思いましたが 次ページ(result.php)にて「$name」と受信してしまいます。 (前略) <?php $name = $_POST['name']; echo $name; ?> <form action="result.php" method="POST"> <input type="hidden" name="name2" value=$name> <input type="radio" name="name3" value=" (以下略) 説明下手ではありますがご回答頂きたいと思います。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • リンクでPOST送信

    http://www.kojikoji.net/pso/javascript.asp こちらにその方法がのっていて、 Windows IE 6.0 Windows Opera 7.13 では動作を確認しました。ですが、 Windwos Netscape 7.1 で動作しません。Netscapeにも対応した書き方で、<a href=...>を用いてPOST送信することは可能でしょうか? *****以下引用*********************************** リンクやボタンを使って「xxx.asp」へPOST送信 <html> <head> <script language="JavaScript"> <!-- function wPost(a1,a2){ document.form1.text1.value=a1; document.form1.text2.value=a2; document.form1.action = "xxx.asp"; document.form1.submit(); } //--> </script> </head> <body> <a href="javascript:wPost("text1","text2")">送信</a> <input type="button" OnClick="wPost('text3','text4')" value="送信"> <form name="form1" method="post" action="err.html"> <input type="hidden" name="text1"> <input type="hidden" name="text2"> </form> </body> </html>

  • PHPで隠しデータをPOST送信する方法

    <form name="example" method="POST" action="example.php"> <input type="text" name="id" value="" /> <input type="password" name="pw" value="" /> <input type="submit" value="ログイン" /> </form> 上記のようなログインフォームがあるとします。 <input type="hidden" />のようにソースを見たらわかってしまう方法ではなく、 クライアント側で完全に見えないよう、id,pwの送信と同時にPHPで隠しデータをPOST送信する方法はございますでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • POSTデータのNAME属性をVALUEによって取得する方法

    HTML→PHPのPOSTデータのやりとりについて、 【HTML】 <form name="form1" method="post" action="xxx.php"> <input name="01" type="text" value="1"> <input name="02" type="text" value="0"> <input name="03" type="text" value="0"> <input name="04" type="text" value="1"> <input type="submit" name="Submit" value="送信"> </form> 【xxx.php】 フォームから送信されたデータを使って、「value」が"1"の「name」を拾うのにはどのように書けばいいでしょう? ↓このように取得したいです。 $data[0]="01"; $data[1]="04"; よろしくお願いします。

    • ベストアンサー
    • PHP
  • JavaScriptにおいてPOSTで送信されたデータを取得出来ますか

    <form action="自分" method="POST"> <input type="hidden" name="abc" value="1"> <input type="submit" name="OK" value="OK"> </form> 上記のように、POST渡しで送信したとき、Javascriptにて、hiddenのデータを取得することができるのでしょうか? 出来るのであればその方法を教えてくださいませんか。 よろしくお願いします。

  • submitではなくbuttonで送信

    事情があり、submitではなくbuttonでフォームのデータを送信したいのですが、以下のように書くとbuttonでは4567が送信されません。 <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="submit" name="bbb" value="4567"> </form> ↓ <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="button" name="bbb" value="4567" onclick="submit();" > </form> submitと同じように、bbbのデータ4567も送信するにはどのように書けばよいのでしょうか? 宜しくお願いします。

  • $_POST['hoge']のデータをフラッシュするには

    <form method="post" action=""> <input type="text" name="hoge1" value="$_POST['hoge1']"> <input type="text" name="hoge2" value="$_POST['hoge2']"> <input type="submit" value="送信"> </form> データ送信してもフォーム内にデータが残るようにしたのですが、HTMLをこのままにして、PHPの方で$_POST['hoge']の中身を消去したいのですが、どのようにすればいいでしょうか? 記入漏れの時にはそのデータが残り、すべてを記入してデータ送信後は再び何も書かれていない状態にしたいのです。できれば、Javascriptを使わないでやりたいと考えています。よろしくお願い致します。

    • 締切済み
    • PHP
  • ボタンを使用せずにpostでデータを送信する。

    お世話になります。 PHP5.0+Mysql5.0を使用してサイトを構築しています。 表示されているのがa.phpでその中のURLをクリックしてb.phpにデータを表示しようとしています。 そのときに、データをPOSTで送信したいのですが、 デザイン的な問題でボタンを使用せずに、リンクをクリックすることでPOSTデータを送信したいと考えています。 過去の質問を参考にしながらここまでは完成できました。 <form name="form1" action="b.php" method="post"> <input type="hidden" name="select" value=""> </form> <a href="" onclick="document.form1.select.value='datadata';document.form1.submit();return false;"> data</a> ただ、ここで問題が・・・ そのb.phpを新しいウインドウで大きさを使用して開きたいのです。 <a href="" onclick="window.open('b.php','','width=400,height=400'); return false;" > 「data1」を送信します</a> こうすれば出来るのはわかったのですが、上記2つを 同時に実行する方法がわかりません。 また、これはこうした方がいいというアドバイスも大変助かります。 よろしくご回答お願いします。

  • 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
  • リンクをクリックした時にformからPOST送信したい。

    HTML、PHP、JavaScript等でサイトを作っているのですが・・・。 【実現出来ている例】 <form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">  <input type="submit" value="送信"> </form>  submitボタンを一つ置いて、それがクリックされた場合に formの内容をPOSTで送信する。 【実現したい例】 <form name="form1 method="post">  <a href="Next.php" onClick="???">???</a> </form>  formの中のリンクをクリックされた場合に、formの内容を POSTで送信したいのですが、その実現方法がわかりません。 GETで送るという手もあり得ますが、今回はどうしてもPOST したいのですが。

    • ベストアンサー
    • HTML

専門家に質問してみよう