Re: [PHP] iterate javascript verification
[email protected] (Ken Robinson)
| Newsgroups | php.general |
|---|---|
| Message-ID | <[email protected]> |
When you do validation of the form in the same script that shows the
form, the normal way to do this is
<?php
if (isset($_POST['submit'])) {
//
// validation here
//
}
?>
This won't work if you're getting to the page via another form, since
the $_POST['submit'] is set. There two ways of avoiding this:
1) use hidden fields in each form to indicate which form was submitted
2) use a different name for each form's submit button and use that in
the above code
Ken
At 12:52 PM 5/27/2013, Tim Dunphy wrote:
>Hey guys,
>
>Thanks for the input! This is pretty nice, and DOES work. I like the fact
>that the fields have been into an iterative array. It's a very elegant
>solution. However the problem with this approach is that if you load the
>page directly it works. But if you call the page from the index.php page
>you get an initial error on all fields as they are all quite naturally
>empty when you first load the page.
>
>Here's the index.php page. All it is is HTML, no php:
>
><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
><head>
> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
> <title>LDAP Request Form</title>
>
><body>
> <center><h3>LDAP Request Form</h3>
> <form name="form_request" method="post" action="ldap.php"
>onsubmit="return validateForm()">
> <label for="requestor_email">Your Email Address:</label><br />
> <input type="text" required id="requestor_email" name="requestor_email"
>/><br /><br />
> <label for="num_forms">How Many Forms Do You Need:</label><br />
> <input type="text" required maxlength="2" size="5" id="num_forms"
>name="num_forms" /><br /><br />
> <input type="submit" name="submit" value="Submit" />
> </form></center>
></body>
></html>
>
>And here is ldap.php as was suggested:
>
><body>
>
> <?php
>
> if (isset($_POST['submit'])) {
> $requestor_email = $_POST['requestor_email'];
> $num_forms = $_POST['num_forms'];
> }
>
>
> echo "<center>You will be creating $num_forms accounts
>today.</center><br />";
> for($counter = 1;$counter<=$num_forms;$counter++) {
> echo '<center><form name="ldap_accounts" method="post"
>action="sendemail.php" onsubmit="return validateForm()">';
> echo '<br /><br />';
> echo "Enter user: $counter<br /><br />";
> echo "<label for=\"first_name_.$counter.\">First Name:</label><br
>/>";
> echo "<input type=\"text\" id=\"first_name_.$counter.\"
>name=\"first_name_.$counter.\" /><br /><br />";
> echo "<label for=\"last_name_.$counter.\">Last Name:</label><br />";
> echo "<input type=\"text\" id=\"last_name_.$counter.\"
>name=\"last_name_.$counter.\" /><br /><br />";
> echo "<label for=\"department_.$counter.\">Department:</label><br
>/>";
> echo "<input type=\"text\" id=\"department_.$counter.\"
>name=\"department_.$counter.\" /><br /><br />";
> echo "<label for=\"title_.$counter.\">Title:</label><br />";
> echo "<input type=\"text\" id=\"title_.$counter.\"
>name=\"title_.$counter.\" /><br /><br />";
> echo "<label for=\"email_.$counter.\">Email:</label><br />";
> echo "<input type=\"text\" id=\"email_.$counter.\"
>name=\"email_.$counter.\" /><br /><br />";
> echo "<label for=\"phone_$counter.\">Phone:</label><br />";
> echo "<input type=\"text\" id=\"phone_.$counter.\"
>name=\"phone_.$counter.\" /><br /><br />";
> }
>
> echo "<input type=\"hidden\" id=\"num_forms\" name=\"num_forms\"
>value=\"$num_forms\" /><br /><br />";
> echo "<input type=\"hidden\" id=\"requestor_email\"
>name=\"requestor_email\" value=\"$requestor_email\" />";
> echo "<input type=\"submit\" name=\"submit\" value=\"Create Ticket\" />";
> echo "</form></center>";
>
>
>
>
> ?>
>
>
>Why this happens when you call the ldap.php page from index.php but not
>when you load the page directly beats me. But maybe someone can shed some
>light on that?
>
>Thanks!
>
>
>
>On Sat, May 25, 2013 at 3:45 AM, tamouse mailing lists <
>[email protected]> wrote:
>
> > On Fri, May 24, 2013 at 9:51 PM, Ken Robinson <[email protected]> wrote:
> > > I took your code and modified it to use HTML5 validation (and few other
> > > changes). You can see the results at
> > > <http://my-testbed.com/test1/form_validation.php>
> > http://my-testbed.com/test1/form_validation.php
> > >
> > > My code follows:
> > >
> > > <?php
> > > $fields =
> > > array('first_name','last_name','department','title','email','phone');
> > > $num_forms = 1;
> > > $tmp = array();
> > > $errors = array();
> > >
> > >
> > > if (isset($_POST['submit'])) {
> > > $requestor_email = $_POST['requestor_email'];
> > > $num_forms = $_POST['num_forms'];
> > > for ($i = 1;$i <= $num_forms; ++$i) {
> > > foreach ($fields as $fld) {
> > > if ($_POST[$fld][$i] == '') {
> > > $errors[] = ucwords(str_replace('_',' ',$fld)) .
> > "
> > > for account $i can not be blank";
> > > }
> > > }
> > > }
> > > }
> > > if (!empty($errors)) {
> > > $tmp[] = "The following fields are in
> > error:<br>";
> > > $tmp[] = implode("<br>\n",$errors);
> > > $tmp[] = "<br>";
> > > }
> > > $tmp[] = "<div style='text-align:center'>You will be creating
> > $num_forms
> > > accounts today.</div><br>";
> > > $tmp[] = '<div style="text-align:center"><form name="ldap_accounts"
> > > method="post" action="">';
> > > $tmp[] = '<br /><br />';
> > >
> > > for($counter = 1;$counter<=$num_forms;$counter++) {
> > > $tmp[] = "Enter user: $counter<br />";
> > > $tmp[] = "<label for='first_name_$counter'>First
> > > Name:</label><br/>";
> > > $tmp[] = "<input type='text' required id='first_name_$counter'
> > > name='first_name[$counter]'><br /><br />";
> > > $tmp[] = "<label for='last_name_$counter'>Last Name:</label><br
> > />";
> > > $tmp[] = "<input type='text' required id='last_name_$counter'
> > > name='last_name[$counter]' /><br /><br />";
> > > $tmp[] = "<label
> > > for='department_$counter'>Department:</label><br/>";
> > > $tmp[] = "<input type='text' required id='department_$counter.'
> > > name='department[$counter]' /><br /><br />";
> > > $tmp[] = "<label for='title_$counter'>Title:</label><br />";
> > > $tmp[] = "<input type='text' required id'title_.$counter'
> > > name='title[$counter]' /><br /><br />";
> > > $tmp[] = "<label for='email_.$counter'>Email:</label><br />";
> > > $tmp[] = "<input type='email' required id='email_.$counter'
> > > name='email[$counter]' /><br /><br />";
> > > $tmp[] = "<label for='phone_$counter'>Phone:</label><br />";
> > > $tmp[] = "<input type='text' required id='phone_$counter'
> > > name='phone[$counter]' /><br /><br />";
> > > }
> >
> >
> > You can DRY this up (the HTML input fields) similarly to the way you
> > did the validation above...
> >
> > for ($i = 1;$i <= $num_forms; ++$i) {
> > foreach ($fields as $fld) {
> > $tmp[]="<label for='$fld_$counter'>" . ucwords(str_replace('_','
> > ',$fld) . ":</label><br />";
> > $tmp[]="<input type='text' required id='$fld_$counter'
> > name='$fld[$counter]' /><br /><br />";
> > }
> > }
> >
> > Further, you could also check the validity of field right at the point
> > of generation and issue the error right next to the field in error,
> > which is usually a better UX.
> >
> > > $tmp[] = "<input type='hidden' id='num_forms' name='num_forms'
> > > value='$num_forms' /><br /><br />";
> > > $tmp[] = "<input type='hidden' id='requestor_email'
> > name='requestor_email'
> > > value='$requestor_email' />";
> > > $tmp[] = "<input type='submit' name='submit' value='Create Ticket' />";
> > > $tmp[] = "</form></div>";
> > >
> > > ?>
> > > <!DOCTYPE html>
> > >
> > > <html>
> > > <head>
> > > <title>LDAP Form</title>
> > > <body>
> > > <?php echo implode("\n",$tmp) . "\n"; ?>
> > > </body>
> > > </html>
> > >
> > > You will notice that I moved the code for the form to above the HTML
> > > section. I believe that very little PHP should be interspersed with the
> > HTML
> > > -- it makes for cleaner code. You can use single quotes around form
> > > attributes so you don't have to escape the double quotes. The names in
> > the
> > > form are now arrays. This makes your life much easier when extracting the
> > > values later in PHP.
> > >
> > > When you check the page in a HTML5 aware brower, you will see how the
> > > validation is done.
> > >
> > > Ken
> > >
> > >
> > > At 10:17 PM 5/24/2013, musicdev wrote:
> > >>
> > >> You can validate via JS if required, for example: (JS CODE):
> > >>
> > >> if(element.value.length == 0){
> > >> // handle 0 length value
> > >> }
> > >>
> > >> I do agree with Ken that you SHOULD NOT perform JS validation. It is
> > >> preferable to use php or the new HTML5 features. JS can be turned-off
> > by
> > >> the user which will make JS validation impossible.
> > >>
> > >>
> > >> On Fri, May 24, 2013 at 8:07 PM, Tim Dunphy <[email protected]>
> > wrote:
> > >>
> > >> > Hello list,
> > >> >
> > >> > I have a php script that creates a variable number of forms based on
> > a
> > >> > $_POST variable from a preceding page. It then takes the data input
> > into
> > >> > the form and neatly packages the result into an email sent to an email
> > >> > address (eventually to be a ticketing system).
> > >> >
> > >> >
> > >> > Almost everything on the page works great. The only thing I can't seem
> > >> > to
> > >> > get working is how to verify that the fields in the form are not left
> > >> > empty
> > >> > using javascript. The syntax I'm using seems like it should work,
> > >> > however
> > >> > when I leave one or more of the fields empty, the email gets sent
> > anyway
> > >> > with the missing data.
> > >> >
> > >> > Here's the app I was hoping someone might be able to suggest a
> > >> > successful
> > >> > approach:
> > >> >
> > >> > <html>
> > >> > <head>
> > >> > <title>LDAP Form</title>
> > >> > <body>
> > >> > <?php
> > >> >
> > >> > if (isset($_POST['submit'])) {
> > >> > $requestor_email = $_POST['requestor_email'];
> > >> > $num_forms = $_POST['num_forms'];
> > >> > }
> > >> >
> > >> > echo "<center>You will be creating $num_forms accounts
> > >> > today.</center><br />";
> > >> > for($counter = 1;$counter<=$num_forms;$counter++) {
> > >> > echo '<center><form name="ldap_accounts" method="post"
> > >> > action="sendemail.php" onsubmit="return validateForm()">';
> > >> > echo '<br /><br />';
> > >> > echo "Enter user: $counter<br />";
> > >> > echo "<label for=\"first_name_.$counter.\">First
> > >> > Name:</label><br
> > >> > />";
> > >> > echo "<input type=\"text\" id=\"first_name_.$counter.\"
> > >> > name=\"first_name_.$counter.\" /><br /><br />";
> > >> > echo "<label for=\"last_name_.$counter.\">Last
> > Name:</label><br
> > >> > />";
> > >> > echo "<input type=\"text\" id=\"last_name_.$counter.\"
> > >> > name=\"last_name_.$counter.\" /><br /><br />";
> > >> > echo "<label
> > >> > for=\"department_.$counter.\">Department:</label><br
> > >> > />";
> > >> > echo "<input type=\"text\" id=\"department_.$counter.\"
> > >> > name=\"department_.$counter.\" /><br /><br />";
> > >> > echo "<label for=\"title_.$counter.\">Title:</label><br />";
> > >> > echo "<input type=\"text\" id=\"title_.$counter.\"
> > >> > name=\"title_.$counter.\" /><br /><br />";
> > >> > echo "<label for=\"email_.$counter.\">Email:</label><br />";
> > >> > echo "<input type=\"text\" id=\"email_.$counter.\"
> > >> > name=\"email_.$counter.\" /><br /><br />";
> > >> > echo "<label for=\"phone_$counter.\">Phone:</label><br />";
> > >> > echo "<input type=\"text\" id=\"phone_.$counter.\"
> > >> > name=\"phone_.$counter.\" /><br /><br />";
> > >> > ?>
> > >> > <script>
> > >> > function validateForm()
> > >> > {
> > >> > var a=document.forms["ldap_accounts"]["first_name_"].value;
> > >> > if (a==null || a=="")
> > >> > {
> > >> > alert("User $counter first name must be filled out.");
> > >> > return false;
> > >> > }
> > >> > var b=document.forms["ldap_accounts"]["last_name_"].value;
> > >> > if (b==null || b=="")
> > >> > {
> > >> > alert("User $counter last name must be filled out.");
> > >> > return false;
> > >> > }
> > >> > var c=document.forms["ldap_accounts"]["department_"].value;
> > >> > if (c==null || c=="")
> > >> > {
> > >> > alert("User $counter department must be filled out.");
> > >> > return false;
> > >> > }
> > >> > var d=document.forms["ldap_accounts"]["title_"].value;
> > >> > if (d==null || d=="")
> > >> > {
> > >> > alert("User $counter title must be filled out.");
> > >> > return false;
> > >> > }
> > >> > var d=document.forms["ldap_accounts"]["email_"].value;
> > >> > if (d==null || d=="")
> > >> > {
> > >> > alert("User $counter address must be filled out.");
> > >> > return false;
> > >> > }
> > >> > var d=document.forms["ldap_accounts"]["phone_"].value;
> > >> > if (d==null || d=="")
> > >> > {
> > >> > alert("User $counter phone name must be filled out.");
> > >> > return false;
> > >> > }
> > >> > }
> > >> > </script>
> > >> > <?php
> > >> > }
> > >> >
> > >> > echo "<input type=\"hidden\" id=\"num_forms\" name=\"num_forms\"
> > >> > value=\"$num_forms\" /><br /><br />";
> > >> > echo "<input type=\"hidden\" id=\"requestor_email\"
> > >> > name=\"requestor_email\" value=\"$requestor_email\" />";
> > >> > echo "<input type=\"submit\" name=\"submit\" value=\"Create Ticket\"
> > >> > />";
> > >> > echo "</form></center>";
> > >> >
> > >> > ?>
> > >> > </body>
> > >> > </html>
> > >> >
> > >> > Thanks,
> > >> > Tim
> > >> >
> > >> > --
> > >> > GPG me!!
> > >> >
> > >> > gpg --keyserver pool.sks-keyservers.net --recv-keys F186197B
> > >> >
> >
> > --
> > PHP General Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> >
>
>
>--
>GPG me!!
>
>gpg --keyserver pool.sks-keyservers.net --recv-keys F186197B