Пустые переменные GET, отображаемые в URL-адресе

Вот моя форма:

<?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']); 
  • Это предполагает, что обработка выполняется на той же странице
  • redirect () является настраиваемой функцией перенаправления

мы можем легко сделать url пустым без javascript или другого плагина здесь код положить его в верхней части кода после кода сессии, но обратите внимание, что мы должны использовать только метод post. это безопасно и не сложнее

 header("Cache-Control: no cache"); session_cache_limiter("private_no_expire");