I understand that when accessing values of HTML form elements in PHP, we must use the name
attribute within the $_POST
variable. However, I’m not sure I understand why that’s the case. It seems to me like it may have been better for $_POST
to use id
attributes and take advantage of the insured uniqueness, rather than potentially finding multiple values if more than 1 form elements share the same name
. I’m sure there’s a good reason why name
attributes are used instead of id
, but I haven’t been able to dig that up and curious to understand why.
Simple example:
index.html
<html> <form action="./some_script.php" method="post"> <input type='text' id='text_input_id' name ='text_input_name'> <input type='submit'> </form> </html>
some_script.php
<?php $value_from_id = $_POST["text_input_id"]; // will be null $value_from_name = $_POST["text_input_name"]; // will contain text input from form ?>
Advertisement
Answer
The primary reason is that forms were added to HTML before IDs were.
However, an ID must be unique in an HTML document but a name doesn’t. You can have multiple form controls with the same name.
Sometimes this is required e.g. in order to create a radio group:
<form> <input type="radio" name="availability" value="yes" id="availability_yes"> <label for="availability_yes">Yes</label> <input type="radio" name="availability" value="no" id="availability_no"> <label for="availability_no">No</label> <input type="radio" name="availability" value="if need be" id="availability_inb"> <label for="availability_inb">If Need Be</label> </form>
and sometimes it is just useful (e.g. when picking from a list of things).
<form> <fieldset> <legend>Acceptable Colours</legend> <input type="checkbox" name="colours[]" value="red" id="colours_red"> <label for="colours_red">Red</label> <input type="checkbox" name="colours[]" value="green" id="colours_green"> <label for="colours_green">Green</label> <input type="checkbox" name="colours[]" value="blue" id="colours_blue"> <label for="colours_blue">Blue</label> </fieldset> </form>