отправка нулевых данных с использованием метода GET

Я пытаюсь создать очень первичную функцию поиска, используя php / sql. В основном, я использую метод GET для отправки запроса формы по нескольким полям в /search.php.

Таким образом, запрос будет передан в следующем виде:

 clothes.php?type=sometype&color=somecolor&mat=somemat&pat=somepattern&uprc=price&brand=brand 

Тем не менее, у меня есть сценарий clothes.php, так что все поля не должны заполняться для успешного запроса.

clothes.php?type=sometype вернет одежду указанного типа.

Для всех моих полей в search.php я использую (select) и (опция), чтобы перечислять доступные параметры в каждом поле.

Проблема в /search.php , я хочу, чтобы search.php не отправлял данные формы, если определенное поле пусто.

Я попытался создать <select name="type"><option value = ""></option>...</select> как первый параметр в каждом раскрывающемся списке, но он по-прежнему отправляет некоторые данные в этом поле.

Есть ли обходной путь для этого?

  1. Форма HTML отправит все, что было заполнено или установлено. Пустое значение так же хорошо, как и любое другое.

  2. вы можете использовать javascript, чтобы проверить, не заполнены ли какие-либо поля.

  3. Однако вы не можете запретить браузеру пользователя отправлять любые данные. Это их браузер, и они могут отправлять что угодно по желанию. Например, отключив JS.

  4. Вы не можете запретить пользователю отправлять недопустимые данные, но вы можете и должны проверить его на стороне сервера. В файле clothes.php вы можете проверить наличие пустых полей и отобразить некоторые ошибки вместо результатов поиска.

Лучшее, что вы можете сделать, используя чистый HTML, – это отправить пустые строки ( "" ) для пустых значений, например foo=&bar=baz . null невозможно в любом случае, HTTP не имеет понятия null значений. Если вы хотите удалить пустую строку foo из этой строки запроса, вам нужно будет сделать это, используя Javascript на клиенте, когда будет отправлена ​​форма. Так как всегда есть клиенты без Javascript, всегда будут случаи, когда вы получаете пустое foo , поэтому вам все равно нужно быть готовым к этому.

Если вы настаиваете на «чистых» URL-адресах, независимо от того, что вы можете перенаправить на сервер и отфильтровать пустые параметры. Например, отправьте форму поиска через POST, затем создайте URL-адрес GET с непустыми параметрами и перенаправьте его. Тем не менее, это будет иметь дополнительные накладные расходы на дополнительный HTTP-запрос.

Я не думаю, что есть способ предотвратить отправку HTML-формы пустым элементом данных для пустых полей формы, не зацепляя событие отправки в javascript и создавая сообщение формы вручную.

Вы не можете запретить пользователю отправлять вам данные, особенно данные GET как в вашем примере.

Вы можете попробовать добавить обработчик onclick к вашей кнопке отправки или что-то еще, но у ваших пользователей может быть отключен JavaScript. Даже если бы у них был включен JavaScript, нет ничего, что помешало бы кому-то перейти в их адресную строку и вручную напечатать www.example.com/file.php?var=value . Черт, даже если вы измените свой метод с GET на POST, все еще есть способы отправить данные, не используя вашу страницу.

Единственное, что вы действительно можете сделать, это проверить, имеет ли поле значение, и, если это так, перенаправит пользователя на страницу поиска с ошибкой, чтобы повторить попытку.

 if (!isset($_GET['field']) || empty($_GET['field])) { // regenerate page with error } 

Ваше название неточно. Вы никогда не получите нулевые данные из формы. Что касается PHP, то включена либо переменная, либо нет. Если он включен, то самое худшее, что может быть, пусто. Например, www.example.com/file.php?field приводит к значению $_GET['field'] , которое пусто, а не null.

Существуют некоторые типы – например, переключатели и флажки – которые не будут отправлять значения, если они пустые, но PHP не будет создавать для них значение $_GET . Они просто провалили бы проверку isset() , вместо того, чтобы иметь null значение.

Вам нужно будет использовать условный оператор PHP следующим образом:

 if($_GET['field_name'] != NULL) { // do sql stuff here } else { echo "Please select a field"; } 

Когда у меня есть «NULL», вы можете ввести значение параметра по умолчанию, которое имеют выбранные вами меню.