Вот моя форма:
<?php echo '<form method="get" action="" name="formulaire">'; echo '<input type="text" name="info1" title="" value="" />'; echo '<input type="text" name="info2" title="" value="" />'; echo '<input type="text" name="info3" title="" value="" />'; echo '<input type="submit" value="Envoyer" />'; echo '</form>'; echo '$info1 = '.$_GET["info1"].'<br />'; echo '$info2 = '.$_GET["info2"].'<br />'; echo '$info3 = '.$_GET["info3"].'<br />'; ?>
Моя проблема в том, что после отправки все переменные отображаются в URL-адресе, даже если они пусты.
Я хочу, чтобы непустые переменные ТОЛЬКО отображались в URL-адресе.
Есть ли способ сделать это с PHP?
Как говорили другие, решение заключается в использовании Javascript для изменения формы при ее отправке. Вот ваш пример с функцией javascript, которая делает это:
<html> <head> <script type="text/javascript"> function myFunction() { var myForm = document.getElementById('form-id'); var allInputs = myForm.getElementsByTagName('input'); var input, i; for(i = 0; input = allInputs[i]; i++) { if(input.getAttribute('name') && !input.value) { input.setAttribute('name', ''); } } } </script> </head> <form id="form-id" method="get" action="" name="formulaire" onsubmit="myFunction()"> <input type="text" name="info1" title="" value="" /> <input type="text" name="info2" title="" value="" /> <input type="text" name="info3" title="" value="" /> <input type="submit" value="Envoyer" /> </form> <?php echo '$info1 = '.$_GET["info1"].'<br />'; echo '$info2 = '.$_GET["info2"].'<br />'; echo '$info3 = '.$_GET["info3"].'<br />'; ?> </html>
Это не проблема PHP, ее то, что заполняет форму. Все значения в форме отправляются. Вам нужно будет использовать Javascript, чтобы проверить это.
Если элемент формы отключен, его обычно не отправляют
<script> $(function() { $('form').submit(function() { $(':input[value=""]').attr('disabled', true); } }); </script>
http://api.jquery.com/ready/ Должен работать, если он размещен в любом месте на странице
Также вам не нужно эхо HTML
<form method="get" action="" name="formulaire"> <input type="text" name="info1" title="" value="" /> <input type="text" name="info2" title="" value="" /> <input type="text" name="info3" title="" value="" /> <input type="submit" value="Envoyer" /> </form> <?php echo '$info1 = '.$_GET["info1"].'<br />'; echo '$info2 = '.$_GET["info2"].'<br />'; echo '$info3 = '.$_GET["info3"].'<br />'; ?>
Отделяет PHP и HTML
Это не может быть сделано с помощью php. Это стандартное поведение формы html. Если вы хотите сделать это, вам придется использовать javascript и onsubmit
формы, onsubmit
цикл и либо удалить пустые элементы, либо построить строку запроса и location.href=myQueryString
.
При нажатии кнопки отправки браузер отобразит URL. Невозможно изменить функциональность браузера с помощью PHP. Однако вы можете попробовать изменить метод формы на POST
.
Кроме того, вы можете использовать JavaScript для перехвата отправки формы и создания URL-адреса для пересылки с помощью JavaScript.
Вероятно, можно оптимизировать, но вот мое предложение, используя PHP:
if (!isset($_GET['clean'])) { $_GET['clean'] = 1; redirect($_SERVER['SCRIPT_URL'] . '?' . http_build_query(array_filter($_GET))); } unset($_GET['clean']);
мы можем легко сделать url пустым без javascript или другого плагина здесь код положить его в верхней части кода после кода сессии, но обратите внимание, что мы должны использовать только метод post. это безопасно и не сложнее
header("Cache-Control: no cache"); session_cache_limiter("private_no_expire");