Capturing HTML form field names even when they are blank

J

JDS

Hi, all. I'd like to do the following, preferably *without* resorting to
JavaScript:

I have a long, dynamically-generated form questionnaire. Not all of the
form fields are dynamically generated, though.

I'd like to capture the NAME of every HTML form field element on the
server, even if that element is submitted blank. The trouble is, with,
say, radio buttons or checkboxes for example, a *blank* element does not
get submitted at all.

Example:
<form action="text.php">
<input type="radio" name="firstbutton" value="1">
<input type="radio" name="firstbutton" value="2">
<input type="radio" name="firstbutton" value="2">
<input type="text" name="thetextbox">
</form>

text.php
<?php
print_r($_REQUEST);
?>

If the form is submitted completely blank, text.php prints out:

Array
(
[thetextbox] =>
)

ONLY if I click a value on one of the radio buttons do I get the field
"firstbutton", e.g.:

Array
(
[thetextbox] =>
[firstbutton] => 1
)

How can I get the names of all of the fields in the HTML form even if they
are sent blank? I am considering using JavaScript onSubmit() to put fake
values in for blank fields, but using JS is not desirable. I had been
putting hidden fields in with the field name "field_names[nameoffield]"
for each form field but this does not scale well for any non-dynamic form
fields.

Any other ideas?
 
D

DH

JDS said:
Hi, all. I'd like to do the following, preferably *without* resorting to
JavaScript:

I have a long, dynamically-generated form questionnaire. Not all of the
form fields are dynamically generated, though.

I'd like to capture the NAME of every HTML form field element on the
server, even if that element is submitted blank. The trouble is, with,
say, radio buttons or checkboxes for example, a *blank* element does not
get submitted at all.

Example:
<form action="text.php">
<input type="radio" name="firstbutton" value="1">
<input type="radio" name="firstbutton" value="2">
<input type="radio" name="firstbutton" value="2">
<input type="text" name="thetextbox">
</form>

text.php
<?php
print_r($_REQUEST);
?>

If the form is submitted completely blank, text.php prints out:

Array
(
[thetextbox] =>
)

ONLY if I click a value on one of the radio buttons do I get the field
"firstbutton", e.g.:

Array
(
[thetextbox] =>
[firstbutton] => 1
)

How can I get the names of all of the fields in the HTML form even if they
are sent blank? I am considering using JavaScript onSubmit() to put fake
values in for blank fields, but using JS is not desirable. I had been
putting hidden fields in with the field name "field_names[nameoffield]"
for each form field but this does not scale well for any non-dynamic form
fields.

Any other ideas?

Perhaps this will help, or give you some ideas:

$buffer = '';

while(list($key, $val) = each($_POST)){
if(!is_array($val)){
$val = stripslashes(trim($val));
$buffer .= $key.': '.$val."\n";
}else{
foreach(array_keys($val) as $key){
$val[$key] = stripslashes(trim($val));
$buffer .= $val[$key].': '.$val."\n";
}
}
}

echo "\n".nl2br($buffer);
 
K

Ken Robinson

JDS wrote:

[snip]
Example:
<form action="text.php">
<input type="radio" name="firstbutton" value="1">
<input type="radio" name="firstbutton" value="2">
<input type="radio" name="firstbutton" value="2">
<input type="text" name="thetextbox">
</form>

To do what you want, you have to initialize the fields using
"type=hidden". For example, using your example code:
<form action="text.php" method="POST">
<input type="hidden" name="firstbutton" value="0">
<input type="radio" name="firstbutton" value="1">
<input type="radio" name="firstbutton" value="2">
<input type="radio" name="firstbutton" value="3">
<input type="text" name="thetextbox">
</form>

Now when someone submits the form without selecting anything, you will
get a value of "0" in the variable $_POST['firstbutton'].

You should be able to extend this technique to your real form.

Ken
 
T

Toby Inkster

JDS said:
I'd like to capture the NAME of every HTML form field element on the
server, even if that element is submitted blank. The trouble is, with,
say, radio buttons or checkboxes for example, a *blank* element does not
get submitted at all.

Well sorry, you can't.
Example:
<form action="text.php">
<input type="radio" name="firstbutton" value="1">
<input type="radio" name="firstbutton" value="2">
<input type="radio" name="firstbutton" value="2">
<input type="text" name="thetextbox">
</form>

<form action="text.php">
<input type="radio" name="firstbutton" value="1">
<input type="radio" name="firstbutton" value="2">
<input type="radio" name="firstbutton" value="2">
<input type="text" name="thetextbox">
<input type="hidden" name="FIELDS" value="thetextbox,firstbutton">
</form>
 
A

Andy Hassall

Hi, all. I'd like to do the following, preferably *without* resorting to
JavaScript:

I have a long, dynamically-generated form questionnaire. Not all of the
form fields are dynamically generated, though.

I'd like to capture the NAME of every HTML form field element on the
server, even if that element is submitted blank. The trouble is, with,
say, radio buttons or checkboxes for example, a *blank* element does not
get submitted at all.

This behaviour is required by the HTML standard:

http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2
http://www.w3.org/TR/html401/interact/forms.html#radio
Example:
<form action="text.php">
<input type="radio" name="firstbutton" value="1">
<input type="radio" name="firstbutton" value="2">
<input type="radio" name="firstbutton" value="2">
<input type="text" name="thetextbox">
</form>

If the form is submitted completely blank, text.php prints out:

Array
(
[thetextbox] =>
)

ONLY if I click a value on one of the radio buttons do I get the field
"firstbutton", e.g.:

Array
(
[thetextbox] =>
[firstbutton] => 1
)

How can I get the names of all of the fields in the HTML form even if they
are sent blank? I am considering using JavaScript onSubmit() to put fake
values in for blank fields, but using JS is not desirable. I had been
putting hidden fields in with the field name "field_names[nameoffield]"
for each form field but this does not scale well for any non-dynamic form
fields.

Adding extra elements is AFAIK the only method, given that HTML requires that
non-selected radio buttons are not successful.
 
J

JDS

Well sorry, you can't.

Allright. Thanks all. I had been using hidden fields, anyways, which was
fine for the dynamically-generated form fields because I can just have the
hidden fields dynamically generated as well.

However, manually putting in hiddens for the other fields does not scale
well and is prone to errors. Oh well, I'll figure something out.

Yum, coffee.
 
F

Fred Oz

JDS said:
Allright. Thanks all. I had been using hidden fields, anyways, which was
fine for the dynamically-generated form fields because I can just have the
hidden fields dynamically generated as well.

However, manually putting in hiddens for the other fields does not scale
well and is prone to errors. Oh well, I'll figure something out.

Read the HTML spec. For radio buttons, one option must *always*
be selected. Therefore, the case you site should not happen,
there should always be one selected and so one should always be
submitted.

<URL:http://www.w3.org/TR/html401/interact/forms.html#radio>

radio buttons

Radio buttons are like checkboxes except that when several share
the same control name , they are mutually exclusive: when one is
switched "on", all others with the same name are switched "off".
The INPUT element is used to create a radio button control.

If no radio button in a set sharing the same control name is
initially "on", user agent behavior for choosing which control
is initially "on" is undefined. Note. Since existing
implementations handle this case differently, the current
specification differs from RFC 1866 ( [RFC1866] section
8.1.2.4), which states:

At all times, exactly one of the radio buttons in a set is
checked. If none of the <INPUT> elements of a set of radio
buttons specifies `CHECKED', then the user agent must check
the first radio button of the set initially.

Since user agent behavior differs, authors should ensure that in
each set of radio buttons that one is initially "on".

*Note the last sentence.*
 
J

JDS

Since user agent behavior differs, authors should ensure that in each
set of radio buttons that one is initially "on".

*Note the last sentence.*

Great! Thanks for the info! This is very enlightening.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top