Использование метода POST для скрытия параметров URL - PullRequest
2 голосов
/ 26 октября 2011

Я понимаю, что могу использовать метод POST для параметров URL для отображения данных в соответствии с определенной переменной, я знаю, как использовать метод GET, но мне говорят, что метод POST можно использовать для скрытиячасть URL-адреса, которая выглядит следующим образом.

/data.php?parameter=1234

В чем разница между двумя методами с точки зрения параметров URL-адреса?

Ниже приведен код, который извлекает данные из базы данных.в соответствии с идентификатором конкретной ссылки

    <?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'];    
    }
?>

На отдельной странице я генерирую ссылки на файл 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

Ответы [ 6 ]

2 голосов
/ 21 июня 2013

Используйте метод "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>
2 голосов
/ 26 октября 2011

Чтобы использовать 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 голосов
/ 26 октября 2011

Чтобы сделать POST, вы должны использовать форму или хитрость javascript / ajax. <a> будет вызывать только запрос GET.

Обратите внимание, что запросы POST могут иметь параметры запроса в URL. Это не «нормально» иметь их, но они разрешены. Основное отличие состоит в том, что при запросе GET (без учета файлов cookie) URL-адрес представляет собой способ ONLY для отправки параметров / данных на сервер. С POST вы можете использовать как URL, так и тело запроса POST, где обычно размещаются данные формы POST.

0 голосов
/ 26 октября 2011

Чтобы использовать POST вместо GET, вам нужно будет использовать HTML-тег HTML в вашем html, например:

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

При отправке ваш URL будет просто /data.php, а параметр = 1234 будет в вашем (скрытом) почтовом буфере.

Имеет смысл?

0 голосов
/ 26 октября 2011

Независимо от того, используете ли вы GET или POST, параметры появятся в $_REQUEST. Критическим отличием является то, что использование POST позволяет переменным НЕ появляться в истории URL. Это уменьшает видимость таких данных, как пароли, которые вы не хотите отображать в истории URL. Чтобы использовать POST вместо GET, просто введите <form method="POST" ...> в документе.

Еще лучше хранить конфиденциальные значения (например, идентификаторы пользователей) в файлах cookie, чтобы они вообще не отображались в $_REQUEST. Поскольку содержимое файлов cookie предоставляется в дополнительных заголовках HTTP-запросов, а не в содержимом, они обычно не сохраняются как часть истории.

0 голосов
/ 26 октября 2011

Для значений POST браузер должен будет использовать форму с method = "post" или javascript, имитирующий форму.Различные инструменты разработчика (fireug и т. Д.) Могут преобразовывать формы GET в формы POST, но обычно форма - это то, что требуется.

Теоретически запросы GET не должны иметь побочных эффектов и «должны» соответствоватьзапрос к запросу.То есть сервер должен возвращать тот же контент.В современном мире, когда все динамично, это может иметь мало практического значения для дизайна.

...