Я знаю, что страница результатов, использующая метод GET, может быть отмечена закладкой, а тот, кто использует POST, не может быть. Я также знаю об ограничениях методов GET.
Теперь предположим, что я хочу создать поисковую систему, которая по умолчанию использует GET, позволяющую пользователям добавлять закладки, но когда длина поисковой фразы превышает лимит, переключитесь на POST. На стороне сервера я использую $ _GET или $ _POST в зависимости от установленного.
Это выполнимо?
Если нет, то почему?
Если да, предоставьте краткое описание.
благодаря
Это выполнимо, без проблем.
Существует массив $_REQUEST
который объединяет значения GET, POST и COOKIE, но лучше всего будет обрабатывать GET и POST вручную в вашем скрипте.
Просто попросите свой движок проверить $_GET["variable"]
и $_POST["variable"]
и использовать в зависимости от того, что установлено. Если переменная задана в обоих методах, вам нужно решить, какой из них вы хотите отдать приоритет.
Единственная заметная разница между этими двумя методами заключается в том, что параметр GET имеет ограничения по размеру в зависимости от браузера и принимающего веб-сервера (у POST также есть ограничения, но они обычно находятся в диапазоне от нескольких мегабайт). Я думаю, что общее правило состоит в том, что строка GET никогда не должна превышать 1024 символа.
Вот как вы могли бы использовать GET и POST в одном:
<form action="myfile.php?var1=get1&var2=get2&var3=get3" method="post"> <input type="hidden" name="var1" value="post1" /> <input type="hidden" name="var2" value="post2" /> <input type="submit" /> </form>
PHP:
print_r($_REQUEST); // var1 = "post1" // var2 = "post2" // var3 = "get3" print_r($_GET) // var1 = "get1" // var2 = "get2" // var3 = "get3" print_r($_POST); // var1 = "post1" // var2 = "post2"
Вы можете использовать что-то вроде следующего:
<?php function getParam($key) { switch (true) { case isset($_GET[$key]): return $_GET[$key]; case isset($_POST[$key]): return $_POST[$key]; case isset($_COOKIE[$key]): return $_COOKIE[$key]; case isset($_SERVER[$key]): return $_SERVER[$key]; case isset($_ENV[$key]): return $_ENV[$key]; default: return null; } }
Также следует помнить, что использование GET открывает соблазн среди определенных групп пользователей, чтобы манипулировать URL-адресом, чтобы «видеть, что происходит», поэтому абсолютно необходимо обеспечить, чтобы ваш код надлежащим образом обрабатывал входные переменные.
Конечно, вы все равно это делали ;-). Но, если у него получится быть вдвойне параноидальным.
Если я использую GET, я, как правило, также создаю куки-файл, и в нем должен быть присвоен какой-то идентификатор, а затем перекрестно сопоставьте это с переменной в списке GET, чтобы убедиться, что нет никаких проблем с пользователем. ввод и разрешение им увидеть что-либо, происходящее с пользователем B.
Да, его выполнимость, хотя (IMHO) предел, при котором GET становится громоздким, значительно превышает порог, при котором пользовательский интерфейс для предоставления этой большой информации становится непригодным. Кроме того, чем сложнее запрос, который вы отправляете в обычную поисковую систему, тем эффективнее он может быть разрешен.
Но я предполагаю, что у вас есть свои причины.
Простейший путь – из предоставленной вами информации – добиться изменения метода формы во время выполнения от GET до POST с помощью javascript, например
<form method='GET' id='searchform' target='search.php' onsubmit=' if (document.getElementById("searchdata")) { if ((document.getElementById("searchdata").length >$some_threshold) && (document.getElementById("searchform"))) { // 2nd if in case this moved to action for button document.getElementById("searchform").method="POST"; } } return true;'> <textarea name='searchdata' id='searchdata'> </textarea> <input type='submit' value='go get it'> </form>
Это также отлично подходит для клиентов, не являющихся javascript.
C.
function getQVar($key){ return isset($_GET[$key]) ? $_GET[$key] : (isset($_POST[$key]) ? $_POST[$key] : null); } echo getQVar("name");
Переключитесь на $ _GET и $ _POST, чтобы назначить приоритет POST через GET vars.