flex101 Posted October 19, 2009 Share Posted October 19, 2009 Hi, Im new here, im currently doing a website for a friend, and I have designed using snippets from different pages a contact form. The contact form performs all my needs at the moment and it has client side validation through the use of jquery. However I need to account for when javascript is turned off so that no bogus entries are put through. So I am trying to do the validation thing however I just keep getting a blank page and I dont see where I am going wrong here. Here is the code that works however has no server side validation: <?php if(isset($_POST['submit']) || isset( $_POST["submit_x"])) { $to = ""; //has email address that is getting sent to but im not putting in for obvious reasons lol $subject = "Art Epona Reply From: " . trim($_POST['name']) . " - " . trim($_POST['enqtype']); $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $dropdown = $_POST['enqtype']; $emailfrom = ""; //ditto above $headers = "From: --\r\n"; //^^ $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; $Body = '<body><center>'; $Body .= '<table width="450" border="1" rules="all" cellpadding="10">'; $Body .= '<center>'; $Body .= '<tr><td bgcolor="#666666"><h1><font face="Georgia, Times New Roman, Times, serif" size="3">New ' . trim($_POST['enqtype']) . ' from Art Epona Website!</font></h1></td></tr>'; $Body .= '<tr><td bgcolor="#cccccc"><p><font face="Tw Cen MT" color="#000000"><b>' . trim($_POST['name']) . '</b> will like to make a <b> ' . trim($_POST['enqtype']) . '</b>. <br /> Here are the contents of the Enquiry:<br /></font></p>'; $Body .= '<table width="430" border="1" cellpadding="10" rules="all">'; $Body .= '<tr><td width="60" bgcolor="#666666"><font face="Tw Cen MT" color="#000000"><b>Name:</b></font></td>'; $Body .= '<td width="288" bgcolor="#ffffff"><font face="Tw Cen MT" color="#000000">' . trim($_POST['name']) .'</font></td></tr>'; $Body .= '<tr><td width="60" bgcolor="#666666"><font face="Tw Cen MT" color="#000000"><b>Email:</b></font></td>'; $Body .= '<td bgcolor="#ffffff"><font face="Tw Cen MT" color="#000000">' . trim($_POST['email']) .'</font></td></tr>'; $Body .= '<tr><td width="60" bgcolor="#666666"><font face="Tw Cen MT" color="#000000"><b>Message:</b></font></td>'; $Body .= '<td bgcolor="#ffffff"><font face="Tw Cen MT" color="#000000">' . trim($_POST['message']) .'</font></td></tr>'; $Body .= '<tr><td colspan="2" align="center"><font face="Tw Cen MT" color="#000000"><a href="mailto:' . trim($_POST['email']) . '">Click here to reply to the sender</a></font></td></tr>'; $Body .= "</table></td></tr></center></table></center></body></html>"; mail($to, $subject, $Body, $headers); header('Location: contactthanks.html'); } else { header('Location: contacterror.html'); } ?> Here is the code that I want to implement, however it is not working: <?php if(isset($_POST['submit'])) || isset( $_POST["submit_x"])) { //Check to make sure that the name field is not empty if(strip_tags($_POST['name']) == '') { $hasError = true; } else { $name = strip_tags($_POST['name']); } //Check to make sure sure that a valid email address is submitted if(strip_tags($_POST['email']) == '') { $hasError = true; } elseif (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", strip_tags($_POST['email']))) { $hasError = true; } else { $email = strip_tags($_POST['email']); } //Check to make sure message was entered if(strip_tags($_POST['message']) == '') { $hasError = true; } else { $message = strip_tags($_POST['message']); } if(isset($hasError)) { header('Location: contacterror.html');} else { $to = ""; //^^ $headers = "From: \r\n"; //^^ $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; $emailfrom = ""; //^^ $dropdown = $_POST['enqtype']; $subject = "Art Epona Reply From: " . $name . " - " . $dropdown; $Body = '<body><center>'; $Body .= '<table width="450" border="1" rules="all" cellpadding="10">'; $Body .= '<center>'; $Body .= '<tr><td bgcolor="#666666"><h1><font face="Georgia, Times New Roman, Times, serif" size="3">New ' . $dropdown . ' from Art Epona Website!</font></h1></td></tr>'; $Body .= '<tr><td bgcolor="#cccccc"><p><font face="Tw Cen MT" color="#000000"><b>' . $name . '</b> will like to make a <b> ' . $dropdown . '</b>. <br /> Here are the contents of the Enquiry:<br /></font></p>'; $Body .= '<table width="430" border="1" cellpadding="10" rules="all">'; $Body .= '<tr><td width="60" bgcolor="#666666"><font face="Tw Cen MT" color="#000000"><b>Name:</b></font></td>'; $Body .= '<td width="288" bgcolor="#ffffff"><font face="Tw Cen MT" color="#000000">' . $name .'</font></td></tr>'; $Body .= '<tr><td width="60" bgcolor="#666666"><font face="Tw Cen MT" color="#000000"><b>Email:</b></font></td>'; $Body .= '<td bgcolor="#ffffff"><font face="Tw Cen MT" color="#000000">' . $email .'</font></td></tr>'; $Body .= '<tr><td width="60" bgcolor="#666666"><font face="Tw Cen MT" color="#000000"><b>Message:</b></font></td>'; $Body .= '<td bgcolor="#ffffff"><font face="Tw Cen MT" color="#000000">' . $message .'</font></td></tr>'; $Body .= '<tr><td colspan="2" align="center"><font face="Tw Cen MT" color="#000000"><a href="mailto:' . $email . '">Click here to reply to the sender</a></font></td></tr>'; $Body .= "</table></td></tr></center></table></center></body></html>"; mail($to, $subject, $Body, $headers); header('Location: contactthanks.html'); } } else { header('Location: contacterror.html'); } ?> I dont see where I am going wrong (well obviously since i am nooby lol ) but yeah if anyone has a solution, ill gladly accept it pleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeease and also if an explanation could be given too because i am still in the learning process lol Thanks in advance Felix Quote Link to comment https://forums.phpfreaks.com/topic/178273-html-form-server-side-validation/ Share on other sites More sharing options...
MadTechie Posted October 20, 2009 Share Posted October 20, 2009 Okay I have taken your first code and added some basic error checking, I have kept it simple so it should make sense <?php if(isset($_POST['submit']) || isset( $_POST["submit_x"])) { $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $dropdown = $_POST['enqtype']; //*******************************************************************************// //Validate $hasError = false; //check all have data if(empty($name)) $hasError = true; if(empty($email)) $hasError = true; if(empty($message)) $hasError = true; //check email syntax if (!preg_match('/^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$/m', $email))$hasError = true; //any errors goto error page if(isset($hasError)) header('Location: contacterror.html'); //*******************************************************************************// $to = ""; //has email address that is getting sent to but im not putting in for obvious reasons lol $subject = "Art Epona Reply From: " . trim($_POST['name']) . " - " . trim($_POST['enqtype']); $emailfrom = ""; //ditto above $headers = "From: --\r\n"; //^^ $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; $Body = '<body><center>'; $Body .= '<table width="450" border="1" rules="all" cellpadding="10">'; $Body .= '<center>'; $Body .= '<tr><td bgcolor="#666666"><h1><font face="Georgia, Times New Roman, Times, serif" size="3">New ' . trim($_POST['enqtype']) . ' from Art Epona Website!</font></h1></td></tr>'; $Body .= '<tr><td bgcolor="#cccccc"><p><font face="Tw Cen MT" color="#000000"><b>' . trim($_POST['name']) . '</b> will like to make a <b> ' . trim($_POST['enqtype']) . '</b>. <br /> Here are the contents of the Enquiry:<br /></font></p>'; $Body .= '<table width="430" border="1" cellpadding="10" rules="all">'; $Body .= '<tr><td width="60" bgcolor="#666666"><font face="Tw Cen MT" color="#000000"><b>Name:</b></font></td>'; $Body .= '<td width="288" bgcolor="#ffffff"><font face="Tw Cen MT" color="#000000">' . trim($_POST['name']) .'</font></td></tr>'; $Body .= '<tr><td width="60" bgcolor="#666666"><font face="Tw Cen MT" color="#000000"><b>Email:</b></font></td>'; $Body .= '<td bgcolor="#ffffff"><font face="Tw Cen MT" color="#000000">' . trim($_POST['email']) .'</font></td></tr>'; $Body .= '<tr><td width="60" bgcolor="#666666"><font face="Tw Cen MT" color="#000000"><b>Message:</b></font></td>'; $Body .= '<td bgcolor="#ffffff"><font face="Tw Cen MT" color="#000000">' . trim($_POST['message']) .'</font></td></tr>'; $Body .= '<tr><td colspan="2" align="center"><font face="Tw Cen MT" color="#000000"><a href="mailto:' . trim($_POST['email']) . '">Click here to reply to the sender</a></font></td></tr>'; $Body .= "</table></td></tr></center></table></center></body></html>"; mail($to, $subject, $Body, $headers); header('Location: contactthanks.html'); } else { header('Location: contacterror.html'); } ?> Quote Link to comment https://forums.phpfreaks.com/topic/178273-html-form-server-side-validation/#findComment-940130 Share on other sites More sharing options...
mikesta707 Posted October 20, 2009 Share Posted October 20, 2009 since you already defined $hasError to false before any validation, this may not be what you want: if(isset($hasError)) header('Location: contacterror.html'); since regardless of whether or not there was an error, $hasError is always set perhaps you meant this if ($hasError){ header('Location: contacterror.html'); } Quote Link to comment https://forums.phpfreaks.com/topic/178273-html-form-server-side-validation/#findComment-940142 Share on other sites More sharing options...
MadTechie Posted October 20, 2009 Share Posted October 20, 2009 Nice catch mikesta707, that what I get for being lazy and copying and pasting from buggy code Quote Link to comment https://forums.phpfreaks.com/topic/178273-html-form-server-side-validation/#findComment-940143 Share on other sites More sharing options...
flex101 Posted October 20, 2009 Author Share Posted October 20, 2009 Hi guys, thanks for the quick reply, I have put in your solution however, it always goes to the thanks page regardless of me not typing in a name or typing in a bogus message, i put in mikesta's solution but that meant that everything always went to the error page. I tried putting in an else statement after mikesta's fix but that didnt work either.. confused Quote Link to comment https://forums.phpfreaks.com/topic/178273-html-form-server-side-validation/#findComment-940227 Share on other sites More sharing options...
MadTechie Posted October 20, 2009 Share Posted October 20, 2009 can you post your updated code, the only problem i can see is if(isset($hasError)) header('Location: contacterror.html'); should be if($hasError) header('Location: contacterror.html'); it maybe worth posting the form as well Quote Link to comment https://forums.phpfreaks.com/topic/178273-html-form-server-side-validation/#findComment-940727 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.