アプリ版:「スタンプのみでお礼する」機能のリリースについて

ありますでしょうか?

以下、例をあげます。
検索画面を作成し、検索フォームに入力された値で、検索結果を表示する画面を作りたい。しかし、POSTで渡すのは避けたい。
GETで渡すとしても、formのsubmitをGETにすると、検索項目分URL表示されるので避けたい。どうしても必要なら、GETの引数は1つまでにしたい。

こういう場合、具体的にどのようにすると良いでしょうか?

A 回答 (4件)

>GETの引数は1つまで



クライアント側が処理することなのでこれはなんともなりませんが
サーバー側として、2つめ以降は無視するもしくは2つ以上あるときは
2つめ以降を削ってheaderで送っちゃうとか・・・

<?
$str=$_SERVER["REQUEST_URI"];
if(preg_match("/&/",$str)){
$str=preg_replace("/&.*$/","",$str);
header("Location:".$str);
}
?>
    • good
    • 2
この回答へのお礼

ありがとうございました。

お礼日時:2010/01/04 13:36

意図が判りませんが、検索キーワードのみGET、残り項目はURLに残したくない、みたいな事でしょうか?


それともセキュリティ上か何かでGETもPOSTも使いたくないとか?

●GETの引数は1つまでにしたい。
JavaScriptで入力項目全てを1つにまとめてGETの1つの引数として送信し、PHP側でそれを分割すれば可能です。
当然GETですので全ての内容がURLに現れてしまいます。
例えば「;」で項目全てを繋いで1つの文字列にして、PHP側で改めて「;」で分割するなどです。
例)
GETのURL(引数は"query"が1つだけ): test.php?query=yamada;taro;male;tokyoto:chiyodaku;chiyoda1-1-1
PHPでの分割: $gets = explode(";", $_GET["query"]);

●1つのみGETで、残りは全てPOSTで送信
別の方法としてGETとPOSTを混合して送信する手があります。
入力項目の1つのみGETで渡し(送信先URLに入れてしまう)、残りはPOSTで送信させます。
HTML--------------------------------------------------
<script type="text/javascript">
function form_get(){
var url = "test.php" + "?get_text1=" + document.getElementById("get_text1").value;
document.form1.action= url;
document.form1.submit();
}
</script>
</head>
<body>
<form method="post" name="form1">
post1: <input type="text" name="post_text1" value="p1"><br>
post2: <input type="text" name="post_text2" value="p2"><br>
get1: <input type="text" name="get_text1" value="g1" id="get_text1"><br>
get2: <input type="text" name="get_text2" value="g2"><br>
<input type="button" value="送信" onclick="form_get();" >
</form>

PHP(test.php)-----------------------------------------
echo "POST1: [". $_POST["post_text1"]. "]<br>\n";
echo "POST2: [". $_POST["post_text2"]. "]<br>\n";
echo "GET1: [". $_GET[ "get_text1" ]. "]<br>\n";
echo "GET2: [". $_GET[ "get_text2" ]. "]<br>\n";

送信結果(get_text2は送信されていない)---------------------
POST1: [p1]
POST2: [p2]
GET1: [g1]
GET2: []

送信URL(GETの引数はget_text1のみ)-----------------------------
http://xxxxxxx/test.php?get_text1=g1

当然URLエンコードやHTMLエンティティ化など行なって下さい。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2010/01/04 13:36

 postを嫌う理由が、いまひとつよくわからないのですが・・・


 まぁ、解らないなりに回答をするとすれば・・・

 httpプロトコルを使用する限り、できません。
 でも、絶対に出来ないわけでもありません。まず、サーバー側は、アプリケーションサーバーが必要になりますし、仕掛けも大げさになりますが。
 まず、サーバー側で、検索結果を送信する仕組みを、SOAPやXMLPRCなどを使用して、いわゆるWEBサービスの形で組みます。
 その上で、検索フォームの「検索」ボタンをajax(要するに、java script)の手法で画面遷移することなく、自前でwebサービス側に要求を出し、動的に検索結果を組み込んだ形に画面を再構築する。
 と言った形を使えば、そもそも、httpプロトコルを利用していませんから、当然、getもpostも使用せずに、検索結果を表示することが出来ます。

 でも・・・もし、postやgetが、検索要求が平文で流れるから、途中で盗み見されるのが嫌だというセキュリティー方向の動機であれば、どんなプロトコルを利用しようとも、同じ事です。
 これが理由であれば、ネットワークに流すデータを総て暗号化するしか手がありません。現状、一般的な手法でこれに答えられる手段は、httpsしか無いと思います。

 そして、もし、postやgetが、使っているユーザーがちょっと工夫をすれば、送信要求の方法がばれてしまい、サーバーが破られるというのが動機であれば、これは、どんな手法を利用しても防ぐ手段はありません。どんなプロトコルを利用しようとも、ユーザーが自分のコンピューターの通信を監視すれば、アクセス手法は確実にとらえられるからです。(postのデータをちゃんと解析してアクセス手段を理解できるだけのスキルと根気の持ち主なら、とっても簡単なことです。)これを防御できる手段は、サーバー側で不正なアクセスをちゃんと阻止するようにプログラムするしかないということです。getよりpostの方が安全だし・・・の流れで、get・post以外の方法は?なんて考えない方がよろしいかと・・・。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2010/01/04 13:36

>GETの引数は1つまでにしたい。


1回目まではGETでOKなら後はクッキーなりセッションを利用する。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2010/01/04 13:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!