Is it okay or correct to put a url get parameter in a form action?
<form method='get' action='index.php?do=search'>
<input name='_search' type='text' value='What are you looking for?'>
<button type='submit'> Search </button>
</form>
When I submit the form the URL is changed to:
index.php?_search=What are you looking for? (I've stripped %20)
I'd prefer the URL to read
index.php?do=search&_search=What are you looking for?
Would it be best to add a hidden field into the form
<input type='hidden' name='do' value='search' />
The <input type="submit"> defines a button for submitting the form data to a form-handler. The form-handler is typically a file on the server with a script for processing input data. The form-handler is specified in the form's action attribute.
URL parameter is a way to pass information about a click through its URL. You can insert URL parameters into your URLs so that your URLs track information about a click. URL parameters are made of a key and a value separated by an equals sign (=) and joined by an ampersand (&).
The GET method is the method used by the browser to ask the server to send back a given resource: "Hey server, I want to get this resource." In this case, the browser sends an empty body. Because the body is empty, if a form is sent using this method the data sent to the server is appended to the URL.
In my opinion you should add them as hidden fields. There is no point to try to pass params if you can do it via hidden form field
use that:
<input type='hidden' name='do' value='search' />
A don't see any reason why you can't or shouldn't do it that way. My preferred method of handling it however would be:
<form method='get' action='index.php'>
<input name='_search' type='text' value='What are you looking for?' />
<submit name='do' value='Search'>
</form>
The name/value pair of do/search is passed through the button press, and if you want to create multiple actions on a form you can then have different values for each submit button, handling the form in multiple ways.
if ($_GET['do'] == "Search") {
... do Search ...
} else if ($_GET['do'] == "Foo") {
... do Foo ...
} else if ($_GET['do'] == "Bar") {
... do Bar ...
}
alternatively you can use a case construct:
switch($_GET['do']) {
case "Search":
... do Search ...
case "Foo":
... do Foo ...
break;
case "Bar":
... do Bar ...
break;
}
I normally use post
myself, but I am sure get
would work the same way. Hope that answers your question.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With