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