2011-07-31 3 views

答えて

1

クエリ文字列の項目は、実際にはPOSTされていないため、$_GETではなくで利用できます。あなたが投稿したいなら、あなたはpostmethodでフォームを使用する必要がありますか、あなたはPOSTとしてXHRを実行する必要があります。

4

リンクすることはできませんPOSTデータのみGET。 URLのみとヘッダーがサーバーに 送信されるGET要求方法とは対照的に

、POSTリクエストは、メッセージ本体を含みます。この は任意のタイプの任意の長さのデータをサーバーに送ることができます。

基本的に、は、1)サーバーが、より多くのデータを送信する必要があることを示す余分なヘッダー値を持つ「通常の」要求を受け取ります。その時点で、サーバーは確認応答を送信し、2)クライアントはPOST本文を送信します。この動作は、リンクでのみ達成することはできません。

しかし、この解決策はあると私はこれらの引数でpage.phpを呼び出すに、のautoSubmitてしまう

<form name="frm" method="post" action="http://your.domain.com/path/to/page.php?param1=1&param2=2"> 
<input type="hidden" name="foo" value="bar" /> 
</form> 
<script type="text/javascript"> 
    document.forms["frm"].submit(); 
</script> 

のようなものをformを出力し、他の人の間でいくつかの技術を、見てきました

$_GET = array('param1' => '1', 'param2' => '2'); 
$_POST = array('foo' => 'bar'); 

これは単純な「リダイレクト」方式ですが、実際には代わりに標準のリンクを使用してのようないくつかの隠しフォームをトリガする<a>要素を作成できることに注意してください。 (テストされていないコード)

<a href="http://your.domain.com/path/to/page.php?param1=1&param2=2" onclick="return dopost(this.href, {foo:'bar'});">A simple link</a> 
<script type="text/javascript"> 
    function dopost(url, params) { 
     var pe = ''; 
     for (var param : params) { 
      pe += '<input type="hidden" name="'+param+'" value="'+params[param]+'" />'; 
     } 
     var frmName = "frm" + new Date().getTime(); 
     var form = '<form name="'+frmName+'" method="post" action="'+url'">'+pe+'</form>'; 
     var wrapper = document.createElement("div"); 
     wrapper.innerHTML = form; 
     document.body.appendChild(wrapper); 
     document.forms[frmName].submit(); 
    } 
</script> 

これはおそらく実際に必要なものです。

+0

本当にありがとうございます! –

1

残念ながら、あなたは本当にそれを行うことはできません。アンカーを使用して値を送信する必要がある場合は、$_GETまたは$_REQUESTを介して変数にアクセスする必要があります。それは(あなたがその設計上の決定に設定されている場合$_GETが実際にそこに多くの意味がありますので、)$_POSTなければならない場合、あなたはそれが非常に多くのように見えるようにボタン提出フォームとスタイルを使用することができます

リンク。このコードをテキストエディタに入れて確認してください。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
    <head>  
     <style type="text/css"> 
     .button {border:none;background-color:#FFFFFF} 
     .button:hover{ color:blue; } 
     </style> 
    </head> 
    <body> 
     <form action="test.php"> 
      <input type="hidden" name="var" value="<?php echo $val; ?>" /> 
      This kinda looks like a link: 
       <input type="submit" value="link" class="button" /> 
     </form> 
    </body> 
</html> 
1

あなたが複数のリンクを持っていて、それらのすべてを書き換えたくない場合は、ちょうどこのようなものフォームに追加:

<form id="fakeForm" method="post"> 
    <input type="hidden" name="post_key" value="post_value" /> 
</form> 

と適切なjqueryの設定:

$('a').click(function(event){ 
    event.preventDefault(); 
    $('#fakeForm').attr('action',$(this).attr('href')).submit(); 
}); 

この場合、のいずれかのリンクをクリックすると、ランディングページにpost_value変数。

リンクを左クリック以外でクリックする(またはjsを無効にする)と、リンクは正常に動作しますが、値は渡されません。

1

以下のコードは、T30の考え方を示しています。

私が$ _POST経由で渡す理由は、ここで達成されたURLで特定の変数が公開されないようにすることです。しかし、それらは "ビューソース"を介して引き続き公開されます。

<?php 

/* 
This demonstrates how to set $_POST from a link in .php without ajax based on the idea from http://stackoverflow.com/a/27621672/1827488. The rationale for doing so is to prevent certain variables ('userid') from being exposed in the url via $_GET. However, there does not seem to be a way to avoid those variables being exposed by 'view source'. 
*/ 

echo "<!DOCTYPE html><html lang='en'><head><title>Test Data Link</title></head><body>"; 

// only one hidden form 
echo "<form class='hiddenForm' method='post'> 
     <input class='hiddenFormUserid' type='hidden' name='userid'/> 
     </form>"; 

// as many links as you need 
echo "<p><a class='hiddenFormLink' href='?following=1' data-userid=101>Following</a> &bull; <a class='hiddenFormLink' href='?followers=1' data-userid=101>Followers</a></p>"; 
echo "<p><a class='hiddenFormLink' href='?following=1' data-userid=102>Following</a> &bull; <a class='hiddenFormLink' href='?followers=1' data-userid=102>Followers</a></p>"; 
echo "<p><a class='hiddenFormLink' href='?following=1' data-userid=103>Following</a> &bull; <a class='hiddenFormLink' href='?followers=1' data-userid=103>Followers</a></p>"; 

echo "<script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'></script>"; 

echo "<script type='text/javascript'> 
     console.log('jq'); 
     $('.hiddenFormLink').click(function(e){ 
      console.log('data-userid=' + $(this).attr('data-userid') + ', value=' + $('.hiddenFormUserid').val()); 
      e.preventDefault(); 
      $('.hiddenFormUserid') 
      .val($(this).attr('data-userid')); 
      $('.hiddenForm') 
      .attr('action',$(this).attr('href')) 
      .submit(); 
     }); 
     </script>"; 

if (isset($_GET["following"]) || isset($_GET["followers"])) { 

    if (isset($_GET["following"])) { 
    echo "followed by "; 
    } else { 
    echo "followers of "; 
    } 

    if (isset($_POST["userid"])) { 
    echo $_POST["userid"]."<br>"; 
    } else { 
    echo "no post<br>"; 
    } 

} else { 
    echo "no get<br>"; 
} 

echo "</body></html>"; 

$_POST["userid"] = ""; 

?> 
関連する問題