как передать переменную POST по ссылкам на собственные страницы?

Привет i wannna получает переменную $ _POST по ссылке на собственные страницы. Пример :

<?PHP $var = 'PIG'; echo "<a href='test.php?var=$var'>link</a>"; if (isset($_POST['var'])) { echo $_POST['var']); } ?> 

он ссылается на собственные страницы. (test.php) Это не работает, кто может мне помочь. благодаря

Ссылка не может POST данные POST , только GET .

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

В принципе, POST требует два запроса: 1) сервер получает «обычный» запрос с дополнительным значением заголовка, указывающим, что нужно отправлять больше данных. В этот момент сервер отправляет подтверждение и 2) клиент отправляет тело POST . Такое поведение невозможно достичь только по ссылке.

Тем не менее, есть решения для этого, и я видел некоторую технику, среди прочего, вывод form с 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> 

что привело бы к вызову page.php с этими аргументами

 $_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> 

Наверное, это то, что вам нужно.

Элементы в строке запроса доступны через $_GET , а не $_POST , так как они фактически не POSTED. Если вы хотите использовать POST, вы должны либо использовать форму со method post , либо выполнить XHR как POST.

К сожалению, вы действительно не можете этого сделать. Если вам нужно использовать привязку для отправки значения, вам нужно будет получить доступ к переменным через $_GET или $_REQUEST .

Если это должно быть $_POST (если вы настроены в этом дизайнерском решении, потому что $_GET самом деле там гораздо больше смысла), вы можете использовать форму и стиль кнопки отправки, чтобы она выглядела очень похоже на ссылку , Поместите этот код в текстовый редактор и проверьте его.

 <!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> 

Если у вас несколько ссылок и вы не хотите переписывать их все, просто добавьте одну фальшивую форму:

 <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 отключен), ссылка работает правильно, но значение не передается!

Этот код ниже демонстрирует работу 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"] = ""; ?>