Re: iterate javascript verification

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sounds good! Thanks Ken. Very clear now.

Tim

Sent from my iPhone

On May 27, 2013, at 1:57 PM, Ken Robinson <kenrbnsn@xxxxxxxxx> wrote:

> 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 <
>> tamouse.lists@xxxxxxxxx> wrote:
>> 
>> > On Fri, May 24, 2013 at 9:51 PM, Ken Robinson <kenrbnsn@xxxxxxxxx> 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 <bluethundr@xxxxxxxxx>
>> > 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
> 
> 
> -- 
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
> 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php






[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux