3

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

/data.php?parameter=1234

URL パラメータに関して、2 つの方法の実際の違いは何ですか?

以下は、特定のリンクの ID に従ってデータベースからデータをフェッチするコードです。

    <?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 に従って data.php ファイルへのリンクを生成します。

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

上記のコードによって SQL インジェクションが発生する可能性があることを忘れてしまった場合、POST メソッドを使用して URL パラメーターを非表示にしたり、少なくとも次のように表示したりしないようにするにはどうすればよいでしょうか。

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

6 に答える 6

2

フォームにメソッド「POST」を使用します。私は同じ問題を抱えていました.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>
于 2013-06-21T12:13:57.143 に答える
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) する必要があることに注意してください。

parameterJavaScript を使用すると、フォームを送信する前に入力を別の値に設定できます。

于 2011-10-26T17:22:59.910 に答える
0

値を POST するには、ブラウザーは method="post" を含むフォームを使用するか、フォームをシミュレートする JavaScript を使用する必要があります。さまざまな開発者ツール (fireug など) で GET フォームを POST フォームに変換できますが、通常はフォームが必要です。

理論的には、GET リクエストには副作用があってはならず、リクエストごとに一貫していなければなりません。つまり、サーバーは同じコンテンツを返す必要があります。ほぼすべてが動的である今日の世界では、これは実用的な設計上の重要性をほとんど持たない可能性があります。

于 2011-10-26T17:23:14.593 に答える
0

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

さらに良いのは、機密性の高い値 (ユーザー ID など) を Cookie に保存して、まったく表示されないようにすることです$_REQUEST。Cookie のコンテンツはコンテンツではなく追加の HTTP リクエスト ヘッダーで提供されるため、通常、Cookie は履歴の一部として保存されません。

于 2011-10-26T17:23:16.373 に答える
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 はそのままになり/data.php、parameter=1234 は (非表示の) 投稿バッファーになります。

わかる?

于 2011-10-26T17:23:25.867 に答える
0

POST を実行するには、フォームを使用するか、javascript/ajax のトリックを使用する必要があります。An<a>は GET リクエストのみを引き起こします。

POST リクエストでは、引き続き URL にクエリ パラメータを含めることができることに注意してください。それらを持つことは「正常」ではありませんが、許可されています。主な違いは、GET 要求 (Cookie を無視) では、URL がパラメーター/データをサーバーに送信する唯一の方法であることです。POST では、URL と、POST されたフォーム データが通常配置される POST 要求の本文の両方を使用できます。

于 2011-10-26T17:24:45.770 に答える