real_illusions Posted January 23, 2008 Share Posted January 23, 2008 I want to validate some form info, making sure what the user fills out is the right length and only consists of numbers and letters. I found the basic model to work from to validate it, but i want it to echo an error message if its filled out wrong. If its filled out correctly, then it needs to be passed to a variable for processing later on in the script to be written to a database. However this produces errors and i cant work out whats causing them...This at the moment causes this error - Parse error: syntax error, unexpected T_ELSE in form.php on line 14Line 14 is the 'else'// validate form infoif ((strlen($name)<3) ||(strlen($name)>15) ||(!ctype_isalpha($name)))echo "Your name must be between 3 and 15 characters long. And only contain numbers or letters";{else ($name = $_POST["name"]}What am i doing wrong? (and dont say 'everything' :) ) Link to comment Share on other sites More sharing options...
Lulzim Posted January 23, 2008 Share Posted January 23, 2008 you misplaced the curly bracketsopen the curly brace before first echo and remove the last onelike this if ((strlen($name)<3) || (strlen($name)>15) || (!ctype_isalpha($name)) ){ echo "Your name must be between 3 and 15 characters long. And only contain numbers or letters";}else( $name = $_POST["name"];) "Your name must be between 3 and 15 characters long. And only contain numbers or letters"ctype_alpha checks if all characters are alphabetic, if you want to allow users to write numbers and letters you should use ctype_alnum Link to comment Share on other sites More sharing options...
real_illusions Posted January 23, 2008 Author Share Posted January 23, 2008 Thanks..but its still making errorsif (((strlen($name)<3) ||(strlen($name)>15) ||(!ctype_alpha($name))){echo "Your name must be between 3 and 15 characters long. And only contain letters";}else ($name = $_POST["name"];)Such as the { just before the echo...says its a parse error - unexpected { on that line.Isn't there one too many ( in there? Link to comment Share on other sites More sharing options...
Lulzim Posted January 23, 2008 Share Posted January 23, 2008 remove the red colored (if (((strlen($name)<3) ||(strlen($name)>15) ||(!ctype_alpha($name))){echo "Your name must be between 3 and 15 characters long. And only contain letters";}else ($name = $_POST["name"] Link to comment Share on other sites More sharing options...
real_illusions Posted January 23, 2008 Author Share Posted January 23, 2008 Now an unexpected ; on this line$name = $_POST["name"];But surely the ; needs to be there?I cant see anything else wrong with the statement? Link to comment Share on other sites More sharing options...
Ingolme Posted January 24, 2008 Share Posted January 24, 2008 You've put round brackets instead of curly brackets here:else($name = $_POST["name"];)It should be:else{$name = $_POST["name"];} Link to comment Share on other sites More sharing options...
jhecht Posted January 24, 2008 Share Posted January 24, 2008 Adding in my two cents, why not just validate on the javascript side? And couldn't preg_match be used instead of all of those checks? If i'm not mistaken, something like $name = preg_replace('/([0-9]+)/', '',$name);if(preg_match('/[a-z]{3,15}/i',$name)){ echo "Good Name";} Would do the exact same thing as all 3 of those other checks... Link to comment Share on other sites More sharing options...
real_illusions Posted January 24, 2008 Author Share Posted January 24, 2008 Jhecht - I want to do this server side as javascript can be turned off :)Its still not working. I type in some test fields, press submit, but yet the error lines appear, despite the fields having the right number of characters, and it also processes the info and sends it.How do you stop the information been sent if the error messages are displayed? Link to comment Share on other sites More sharing options...
justsomeguy Posted January 24, 2008 Share Posted January 24, 2008 Instead of echoing the error messages, add them to an error string. Once the processing is finished you can check the error string. If it's empty then there were no errors, if it's not empty then there was at least one error. Link to comment Share on other sites More sharing options...
real_illusions Posted January 25, 2008 Author Share Posted January 25, 2008 Ok..how would i go about this?I've looked over the error strings and various error functions on php.net but not seem to be getting anywhere with it. All the examples on there seem to be about creating custom error messages to do with developing php scripts and not validating information coming from another page. Link to comment Share on other sites More sharing options...
Matpatnik Posted January 26, 2008 Share Posted January 26, 2008 I think here: if ((strlen($name)<3) || (strlen($name)>15) || (!ctype_isalpha($name)) ) it should by this: if ((strlen($_POST['name'])<3) || (strlen($_POST['name'])>15) || (!ctype_isalpha($_POST['name'])) ) Link to comment Share on other sites More sharing options...
jhecht Posted January 26, 2008 Share Posted January 26, 2008 here's a script, I'll assume you just want to validate the username so that its only letters and is between 3 and 15 characters long. <?php $errorString = ''; if(sizeof($_POST)==0){ $errorString .= 'No form data submitted<br />'; die($errorString); } if(!preg_match('/^([a-z]{3,15}$/',$_POST['user_name'])){ $errorString .= "Username is not long enough<br />"; } //You could potentially add more checks before echoing out this string. just put $errorString.= ' Your error Message Here<br />'; if(strlen($errorString)!=0){ die($errorString); }else{ //Whatever you need to do now, insert DB and so on. }?> Link to comment Share on other sites More sharing options...
real_illusions Posted January 27, 2008 Author Share Posted January 27, 2008 Warning: preg_match() [function.preg-match]: Compilation failed: missing ) at offset 14 in <filename> on line 12Then it prints the error message for the username, despite the username been long enough.Line 12 in the file is if(!preg_match('/^([a-z]{3,15}$/',$_POST['user_name'])){If i wanted to validate the 3 fields, do i need to do that 3 times but with the various values changed to email and comments and any field lengths that might be different. And in the last bit, where it says}else{ //Whatever you need to do now, insert DB and so on.Can i put in $name = $_POST["name"];?? Or will that not work? Link to comment Share on other sites More sharing options...
jhecht Posted January 27, 2008 Share Posted January 27, 2008 if(!preg_match('/^([a-z]{3,15})$/',$_POST['user_name'])){Change the line to that, i forgot a parentheses. And yes, you can do the $name = $_POST['name'] thing, but why would you? It'd be just as easy to call $_POST['name'];And if there are 3 fields that must be validated differently, then you could just change the regex. I would need to see the form you're using to give you an appropriate file. Link to comment Share on other sites More sharing options...
real_illusions Posted January 28, 2008 Author Share Posted January 28, 2008 Ah ok..thx. I couldn't see where the missing bracket was from. It all looked ok to me.Now it seems to work. However, I think it doesn't seem to recognise the space bar character. If i test the form with the right amount of letters without spaces, it works, but add a space (even after the 3rd character) it doesn't work.How do i go about so it recognises the space bar as a character?Can you explain'/^([a-z]{3,15})$/'to me? As thats the bit that defines what characters are allowed right? Link to comment Share on other sites More sharing options...
Lulzim Posted January 28, 2008 Share Posted January 28, 2008 How do i go about so it recognises the space bar as a character? '/^([a-z[:space:]]{3,15})$/' Link to comment Share on other sites More sharing options...
boen_robot Posted January 28, 2008 Share Posted January 28, 2008 Can you explain'/^([a-z]{3,15})$/'to me? As thats the bit that defines what characters are allowed right? That's a regular expression. There are tons of tutorials on the net for it.To expand the above one to include numbers and spaces, try something like:'/^([a-z0-9\s]{3,15})$/' Link to comment Share on other sites More sharing options...
real_illusions Posted January 28, 2008 Author Share Posted January 28, 2008 Ah...thanks alot:) Link to comment Share on other sites More sharing options...
justsomeguy Posted January 28, 2008 Share Posted January 28, 2008 Ok..how would i go about this?I've looked over the error strings and various error functions on php.net but not seem to be getting anywhere with it. All the examples on there seem to be about creating custom error messages to do with developing php scripts and not validating information coming from another page. $errors = '';if (...) $errors .= 'error 1';if (...) $errors .= 'error 2';if (...) $errors .= 'error 3';if ($errors == ''){ // no errors}else echo $errors; Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.