This question already has answers here:
Get Text From <option> Tag Using PHP
(6 answers)
Closed 8 years ago.
in the following:
<form action="test.php" method="POST">
<select id="test" name="test">
<option value="1">Test One</option>
<option value="2">Test Two</option>
</select>
</form>
in test.php, I can get 1 or 2 as follow:
$result=$_POST['test'];
How can I get the text of the selected option (i.e. "Test One" or "Test Two") using php
This is not something that can be done through PHP alone. The PHP script can only "see" the information which is posted (the value for the selected option that is posted). You can use javascript to alter a hidden input field with the text contents of a selected option, and this will be included in the $_POST array:
<form action="test.php" method="POST">
<select id="test" onchange="document.getElementById('text_content').value=this.options[this.selectedIndex].text">
<option value="1">Test One</option>
<option value="2">Test Two</option>
</select>
<input type="hidden" name="test_text" id="text_content" value="" />
</form>
This will make the $_POST['test_text'] available with the selected index (but you should also force the onchange() function when the page loads so that it will be populated even if the user leaves the select field at the default value.
Only the value of the form control will be sent to the server. An easy way to send both is to simply include both in the the value:
<select name="test">
<option value="1|Test one">Test one</option>
<option value="2|Test two">Test two</option>
</select>
And then:
$test = explode('|', $_POST['test']);
Then you'll end up with $test[0] being "1" and $test[1] being "Test one".
You can't; that information is not sent back to the server. You will need to look at how you generated the HTML in the first place and get the text from there.
It is not sent so the only way to get it is having an array mapping values to titles in your PHP code.
This is a solution I could use except I already have the onChange calling a function to show a hidden block based on the selected building type in a statement.
I have building types I need the user to select. Several building types have a unique set of questions, e.g. Bank Branch, Data Center, Courtroom, etc. But there are many that have the same set of questions which I call Other Type. Each option has their associated value, e.g. Bank Branch has a value of "Bank_Branch", Data Center has "Data_Center", but Other Type has a value of "Other_Type". The text for "Other_Type" differs based on the building type, such as Convention Center, Museum, Performing Arts, etc. So I need the value "Other_Type" to "show" the questions in the "Other_Type" DIV block while using the text value to send in an email identifying the type of building, e.g. Convention Center, Museum, Performing Arts, etc.
Any way to use PHP to get the text value of the selected item? I'm already using the following inside the HTML
var sele = document.getElementById('building_type');
var seleVal = sele.options[sele.selectedIndex].value;
var seleTxt = sele.options[sele.selectedIndex].text;
document.getElementById("other_text").innerHTML = seleTxt;
I'm not seeing a way to do this.
SOLVED: I can simply create the hidden div and in my check for Other Type set the innerHTML for the hidden div.
The text for the selected option is not passed through the HTML form. If you want the text, you have to store that in a hidden HTML input on your page, or you need to add some business logic in your PHP code to translate the value of ìd into the text (through a switch statement, or by querying a database, etc.)
Unfortunately when you submit a form and a variable it only takes one parameter which is it's value. You would need to make the value. Test One the value in order for it to pass on to the PHP script. What is the purpose of value="1" cause you can probably use it in a different attribute?
Im not a experienced php programer, but u can check the value selected in SELECT tag with php.
i dont know why people say u can not.
if ( $_POST['test'] == 1)
{ do something }
else
{ option value 2 is selected, do something else }
Im sure this will work.
Try it if 1, 2 not needed. you will get required text as value
<form action="test.php" method="POST">
<select id="test" name="test">
<option value="Test One">Test One</option>
<option value="Test Two">Test Two</option>
</select>
</form>
Related
I have a simple GET form that a user can submit to search for posts (real estates) on my WordPress website.
My HTML search form looks a little like this:
<form method="get" action="estates">
<select name="city[]" multiple>
<option value="">Select an option</option>
<option value="city-1">City 1</option>
<option value="city-2">City 2</option>
</select>
<select name="purpose[]" multiple>
<option value="1">For sale</option>
<option value="2">For rent</option>
</select>
<input type="submit" value="Search">
</form>
Let's say a user selects no other option for city and selects a purpose with value '1'.
The 'purpose'value is correctly added to the URL, and the 'city' field has a value of "".
The URL that is generated would look like this: mysite.com/estates/?city%5B%5D=&purpose%5B%5D=1
Now the problem is with the 'city' field in this example. Because I use a default option for 'city', with a value of "", it is added to the URL but without a value.
However, when I do my PHP checks and build up to search query on my posts page, the empty($GET["city"]) is not returning true, and my query is not working correctly.
I have tried many things, including $GET["city"] == "" and array_key_exists('city', $_GET) but my PHP code always says that $GET["city"] is not empty and should be added to my search query, which then results in a bad query result.
Am I missing something, or is there another way to check if a value is set for this parameter?
When I do print_r($_GET['city']), I get the following return:
Array ( [0] => )
Html: a good practice is to have a default value that is disabled
<option disabled selected value> -- select an option -- </option>
default select option as blank
*Prefer not to pass empty value.
How I usually approach this:
Use the html disabled selected value
Use isset($_GET[.etc.]) then
Sanitize and trim your input
Check if it's a valid option in_array() or other method and then
Allow it to reach your DB
The behavior can vary on your liking. For instance if there is not value you want to inform the user, look for everything or both etc. Consider this, someone passes an argument from url, a city that does not exist. What you want then to happen?
I have searched many solutions and almost all over the internet but found no answer.
I am having a form like:
<form action="index.php" method="get">
<select id="store" type="text" name="s">
<option valA="value1" valB="value2">Selection 1</option>
<option valA="value3" valB="value4">Selection 2</option>
</select>
<input id="submit" type="submit" value="Submit" />
</form>
This form is extended via PHP with MySQL which takes valA and valB from database for each "Selection" in while loop and generate form with that form (given above).
I know that sending it via POST will reload my website with value given by value name. But I need to do it with two values.
So my link when I select one of the options will be:
http://mywebsite.com/index.php?valA=value1&valB=value2
Form is still active every time website reloads, so when I choose another option, I want to change it with submit and change URL.
Everything I found is to use multiple option and send two of them at the same time, but I have no multiple selection, but one selection with many parameters each (for me - two).
Is it possible to do it via HTML/Form, or I need to use PHP, but how?
I need to reload website - not change it only, because based on valA and valB website will load datatables script based on it and will produce table from database one of the values is just a key to table, another to database.
Maybe you can join your required values with some delimiter, for example:
<select id="store" type="text" name="s">
<option value="value1:value2">Selection 1</option>
<option value="value3:value4">Selection 2</option>
</select>
Your url becomes:
http://mywebsite.com/index.php?s=value1:value2
On server side you can:
$parts = explode(':', $_GET['s']);
You will need javascript to achieve that without php
If your php is whats receiving the call then why don't you have a value seperated by a delmiter value="value1|value2"
then in your php I would do the following
$values = explode("|",$_GET['s']);
then you have $values[0] and $values[1] - containing the two values
I am doing PHP validation, and I was reading w3.org on forms. Can anyone clarify this statement
"When no options are selected, the control is not successful and neither the name nor any values are submitted to the server when the form is submitted". To test this, I have created
<form method="get" action="#">
<select name="select_name" >
<option value="">Select one</option>
<option value="one">Choice one</option>
<option value="two" >Choice two</option>
<option value="three">Choice three</option>
</select>
</form>
When I print the GET array, I see that the name "select_name" always passed to the server. For radio and checkbox, this is not true. But I do not understand what that statement trying to say. Is it possible for "neither name nor value" to be passed during select option?
The specification you quoted:
When no options are selected, the control is not successful and neither the name nor any values are submitted to the server when the form is submitted.
...indicates what to do when no options are selected, but by default most browsers will automatically select the first option of a (drop-down) select element. Do you not see on your test page that the first option "Select one" is automatically selected when the page loads? In your case where the first option has an empty string as its value if you then submitted the form with that option selected you should have a request parameter with the name "select_name" and a value that is an empty string.
In the case of a (non-drop-down) select multiple element:
<select name="select_name" multiple>
...no option is selected by default so then if you submit without selecting any options you should see that you don't get a "select_name" request parameter.
NOTE: You tagged your question with "PHP", but this is not a PHP thing. It's the browser that forms the request according to the state of the form controls at the time.
I've 2 select boxes with same id's as well as names but at a time only one is shown.
But when form is posted i do not get the exact value.It only displays the first value from the dropdown.
Following is a sample code of the same.
<?php
var_dump($_POST)
?>
<form method="POST" action="">
<select name="test" id="test">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="test" id="test" style="display:none" >
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="submit" value="Add"/>
</form>
I even tried surrounding the select box with a div and then hidding it.
Not sure why you have two select's with the same name, but when you hide one you also need to disable it too (disabled="disabled").
As per HTML specification, disabled fields are not submitted so you should have your true value posted from the select that isn't disabled.
Presumably you're using some javascript to switch which select is displayed?
If that's the case, then start off with
<select name="test" id="test"></select>
<select name="test_dummy" id="test_dummy" style="display:none" ></select>
And whichever code changes the style attribute will also have to change the name and id attributes
Even when one of these is hidden at every point, they should have different names in the markup so you can identify which one is which.
Otherwise it'll pass only the last element's (in the markup) value through the form (no matter if it's hidden via CSS or not).
I'm not quite sure why your hiding/showing only one of these at a time anyway. It'd likely be better if you replaced the <option>'s inside the select to the new ones, instead of using show/hide.
You would have to have different id's and in your code conditionally check which select box value is visible fetch it's value.
When you submit a form, the POST data contains data basing on the attribute name. If they have the same name, the value of the second select overwrites the value chosen from the first one. Even if you hide it in the page.
If you want to have just the value of the first select, you should disable the second one, by adding disabled="disabled" or by changing its name.
If I have a combobBox with values red/white/blue and the users chooses blue then I want my form action php page to use the value 2, not `blue. I hope you see what I mean.
Is there any easy way to do that?
<form action='phpPage.php' name='bsForm' method='POST'>
<select name='TheColor' onSelect="bsForm.submit()">
<option value='0'>red</option>
<option value='1'>white</option>
<option value='2'>blue</option>
</select>
</form>
If your form looks anything like that, then your phpPage should easily be able to get the value 2 from $_POST['TheColor']
You do this by constructing your form appropriately and supplying a value attribute:
<option value="2">blue</option>