отправка нулевых данных методом GET - PullRequest
1 голос
/ 03 апреля 2011

Я пытаюсь создать очень простую функцию поиска, используя 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 я использую (выбрать) и (опция), чтобы вывести список доступных опций для каждого поля.

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

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

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

Ответы [ 5 ]

1 голос
/ 03 апреля 2011

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

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

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

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

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

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

0 голосов
/ 03 апреля 2011

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

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

Если у меня "NULL", вы можете ввести значение опции по умолчанию, которое есть в ваших выбранных меню.

0 голосов
/ 03 апреля 2011

Вы не можете запретить пользователю отправлять вам данные, особенно данные 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'], которое является пустым, а не нулевым.

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

0 голосов
/ 03 апреля 2011

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

...