2011-10-26 11 views
2

私は、特定の変数に従ってデータを表示するためにURLパラメータにPOSTメソッドを使用でき、GETメソッドを使用する方法を知っていますが、 POSTメソッドを使用して、このようなURLの部分を隠すことができます。POSTメソッドを使用してURLパラメータを非表示にする

/data.php?parameter=1234 

実際のURLパラメータの違いは何ですか?以下

私はそうのようなIDに係るdata.phpファイルへのリンクを生成する特定のリンク別のページに

<?php 
//This includes the variables, adjusted within the 'config.php file' and the functions from the 'functions.php' - the config variables are adjusted prior to anything else. 
require('configs/config.php'); 
require('configs/functions.php'); 

    //This is the actual interaction with the database, according to the id. 
    $query = mysql_query("SELECT * FROM table WHERE id=" .$_GET['id'] . ";") or die("An error has occurred"); 

      //This re-directs to an error page the user preventing them from viewing the page if there are no rows with data equal to the query. 
    if(mysql_num_rows($query) < 1) 
{ 
    header('Location: 404.php'); 
    exit; 
} 

    //Here each cell in the database is fetched and assigned a variable. 
    while($row = mysql_fetch_array($query)) 
    { 
     $id = $row['id']; 
     $title = $row['title']; 
     $month = $row['month']; 
     $day = $row['day']; 
     $photo = $row['photo']; 
     $text = $row['text'];  
    } 
?> 

のIDに従ってデータベースからデータをフェッチするいくつかのコードである。

<a href="post.php?id=<?php echo $content['id']; ?>"><?php echo $content['title']; ?></a> 

私はURLパラメータを隠すために、POSTメソッドを使用することについては行くだろうか、上記のコードを介して起こり得る潜在的なSQLインジェクションがあることを忘れる、または少なくともこのようにそれらを表示しない:

http://example.com/data.php?id=1 
+0

小さなサイドノート '' 'するmysql_query(からフォームにパラメータをPOSTを削除し追加し、同じ問題を持っていた "テーブルSELECT * FROM WHERE ID ="。$ _ GET [ 'ID'] ";") '' 'はSQLインジェクションに対して脆弱ですので、オンラインにして、データベースに重要なデータが含まれている場合は注意してください。 – Mason

答えて

2

POSTを使用するためには、<form>タグを使用する必要があります、あなたはこれらのURLを引き上げている方法に応じて、助けるためにJavaScriptを使用する方が簡単かもしれません。ここでは基本的な例です:

<form method="post" action="data.php"> 
    <input type="hidden" name="parameter" value="1234" /> 
    <input type="submit" value="Go" /> 
</form> 

Goボタンは、フォームデータをPOSTだろう、と今data.phpであなたが$_POST['parameter']から値を取得することができるようになります。 POSTを使用する場合は、ユーザーが戻るボタンを押すとフォームを再送信するように促されないように、HTTP 302をページにリダイレクトすることをお勧めします。

JavaScriptを使用すると、フォームを転記する前にparameter入力を別の値に設定することができます。

+0

私はレスポンスをお寄せいただきありがとうございます。私は、データをデータベースに挿入してから、ヘッダ( 'Location:../data .php?id = '。$ id);現時点で私が実際に間違ったコードを使用しているということですか? – Alex

+0

これは間違ったことは何もありませんが、URLからIDを削除するためにPOSTを使用する場合は、セッションにIDを格納したい($ _SESSION)。このようにして、ユーザーがdata.php上にいるときは、GETではなく、セッションからIDをルックアップできます。 –

+0

それで、同じファイルにデータベースを更新するためのコードを貼り付ける必要がありますが、挿入された内容も表示されますか?したがって、フォームはそのスクリプトを実行します - データベースに挿入し、ユーザーのために挿入されたデータを表示しますか? – Alex

0

POST値にするには、ブラウザでmethod = "post"のフォームを使用するか、フォームをシミュレートするjavascriptを使用する必要があります。様々なデベロッパーツール(fireugなど)はGETフォームをPOSTフォームに変換できますが、一般的にフォームは必要なものです。

GETリクエストには副作用があってはならず、リクエストからリクエストまで一貫している必要があります。つまり、サーバーは同じコンテンツを返す必要があります。まさにすべてのものが今日の世界ではダイナミックであり、これは実用的なデザインの重要性がないかもしれません。

0

GETまたはPOSTのどちらを使用する場合でも、パラメータは$_REQUESTに表示されます。重要な違いは、POSTを使用すると、変数がURL履歴に表示されないことです。これにより、URL履歴に表示したくないパスワードなどのデータの可視性が低下します。 GETの代わりにPOSTを使用するには、単にドキュメントに<form method="POST" ...>を生成します。

重要な値(ユーザーIDなど)をCookieに保存すると、$_REQUESTには表示されません。クッキーの内容はコンテンツではなく、余分なHTTPリクエストヘッダーで提供されるため、一般的に履歴の一部として保存されません。

0

代わりにGETのPOSTを使用するためには、あなたがそうのように、あなたのHTML内のHTMLフォームタグを使用する必要があります:

<form method="POST" action="/data.php"> 
    <input type="hidden" name="parameter" value="1234" /> 
    <button type="submit">Submit</button> 
</form> 

を提出すると、あなたのURLがちょうど= 1234意志/data.phpとパラメータとなりますあなたの(隠された)ポストバッファーにいてください。

意味がありますか?

0

POSTを実行するには、フォームまたはjavascript/ajaxトリッキーを使用する必要があります。 <a>はGET要求のみを発生させます。

POSTリクエストでもURLにクエリパラメータが残っている可能性があることに注意してください。それは「正常」ではありませんが、許可されています。主な違いは、GETリクエスト(クッキーを無視する)では、URLがONLYのパラメータ/データをサーバーに送信することです。 POSTを使用すると、URLとPOST要求の本文(POSTされたフォームデータが通常配置される場所)の両方を使用できます。

2

フォームにメソッド "POST"を使用します。私はちょうどURL

<form id="abc" name="abc" action="someaction.php" method="post"> 
    <input type="text" id="username" name="username"/> 
    <input type="password" id="password" name="password"/> 
    <input type="submit" id="submit" name="submit" value="submit"/> 
</form> 
関連する問題