HoTDaWg Posted August 24, 2007 Share Posted August 24, 2007 hi, for the sake of learning i have oversimplified this script. It is merely for my ammusent however it does not seem to be functioning properly. Take a look: <?php error_reporting(E_ALL); function form() { echo '<form name="yes" action="' . $_SERVER['PHP_SELF'] . '" method="POST"> <input type="text" name="name" value="name"><br /><input type="text" value="age" name="age"><br /><br /> <input type="submit" name="submit" value="Submit!">'; } $submit = $_POST['submit']; if (!isset($submit)) { form(); } else { $errorhandler = array(); $name = $_POST['name']; $age = $_POST['age']; $the_form = array('Name' => "$name", 'Age' => "$age"); foreach($the_form as $key => $field) { if (preg_match("/[^a-zA-Z0-9]/", $field)) { $errorhandler = array('Field' => "$key", 'Type' => "Invalid Character", 'Message' =>"An invalid character was found. Only numbers and letters are allowed."); echo "Error, in $field"; } if (preg_match("/^[A-Z]/", $field)) { $errorhandler = array('Field' => "$key",'Type' => "Invalid Character",'Message'=>"An uppercase or capital letter was found. Please keep characters in lower case."); echo "Error, in $field"; } if (strlen($field) > 20) { $errorhandler = array('Field' => "$key", 'Type' => "Too Long", 'Message' =>"Your response is too long in length. The maximum number of characters allowed is 20."); echo "Error, in $field"; } } if(count($errorhandler) > 0) { print_r($errorhandler); form(); } else { echo "no errors."; } } ?> Currently, when the form is submitted, regardless of whether or not it meets requirements, it jumps directly to No Errors. any ideas? this is my first time with multidimensional arrays, so i personally am leaning towards something wrong with the count command...but what?! thanks, HoTDaWg Quote Link to comment https://forums.phpfreaks.com/topic/66575-solved-preg_replace-or-array-where-have-i-gone-wrong/ Share on other sites More sharing options...
lemmin Posted August 24, 2007 Share Posted August 24, 2007 Since an error is printed if it finds a match, whether anything is in the error array or not, I would say your preg_match isn't working. You might want to echo out the value of $field before the preg_match, too, just to make sure it has the characters you are looking for. Quote Link to comment https://forums.phpfreaks.com/topic/66575-solved-preg_replace-or-array-where-have-i-gone-wrong/#findComment-333493 Share on other sites More sharing options...
MadTechie Posted August 24, 2007 Share Posted August 24, 2007 shouldn't $errorhandler = array(blar blar be $errorhandler[] = array(blar blar Quote Link to comment https://forums.phpfreaks.com/topic/66575-solved-preg_replace-or-array-where-have-i-gone-wrong/#findComment-333502 Share on other sites More sharing options...
lemmin Posted August 24, 2007 Share Posted August 24, 2007 Actually, the array() function returns an array and using "[]" creates an array, so using them both will make a two dimensional array. The following would work without using the array function. $errorhandler[] = blar; $errorhandler[] = blar; EDIT: Except that that IS what he is trying to do, so you are right, it should be with a "[]" or else it will be overrighting the previous value; though I don't think that is the cause of his problems because 1 > 0. Quote Link to comment https://forums.phpfreaks.com/topic/66575-solved-preg_replace-or-array-where-have-i-gone-wrong/#findComment-333520 Share on other sites More sharing options...
MadTechie Posted August 24, 2007 Share Posted August 24, 2007 I know it would make a 2D array, thats why i asked, but from the first post this is my first time with multidimensional arrays, Quote Link to comment https://forums.phpfreaks.com/topic/66575-solved-preg_replace-or-array-where-have-i-gone-wrong/#findComment-333523 Share on other sites More sharing options...
HoTDaWg Posted August 24, 2007 Author Share Posted August 24, 2007 hey sorry for the lack of update guys. thanks for the help so i currently change the script around. it worked fine but now i am trying to get it to output the errors properly. take a look at the script. <?php /** * @author x-ecutioner * @copyright 2007 */ error_reporting(E_ALL); function form() { echo '<form name="yes" action="' . $_SERVER['PHP_SELF'] . '" method="POST"> <input type="text" name="name" value="name"><br /><input type="text" value="age" name="age"><br /><br /> <input type="submit" name="submit" value="Submit!">'; } $submit = $_POST['submit']; if (!isset($submit)) { form(); } else { $errorhandler = array(); $name = $_POST['name']; $age = $_POST['age']; $the_form = array('Name' => "$name", 'Age' => "$age"); foreach($the_form as $key => $field) { if (preg_match("/[^a-zA-Z0-9]/", $field)) { $errorhandler[]= array('Field' => "$key", 'Type' => "has an invalid character(s).", 'Message' =>"Only numbers and letters are allowed.<br>"); echo "Error, in $key<br />"; } if (preg_match("/^[A-Z]/", $field)) { $errorhandler[]= array('Field' => "$key",'Type' => "contains (a) capital letter(s).",'Message'=>"Please keep characters in lower case.<br>"); echo "Error, in $key<br />"; } if (strlen($field) > 20) { $errorhandler[]= array('Field' => "$key", 'Type' => "is too long.", 'Message' =>"The maximum number of characters allowed is 20."); echo "Error, in $key<br />"; } } if(count($errorhandler) > 0) { if(count($errorhandler[0]) > 0 ) { echo "<li>The ".$errorhandler[0][0]."field".$errorhandler[0][1].$errorhandler[0][2]."</li>"; } elseif(count($errorhandler[1]) > 0 ) { echo "<li>The ".$errorhandler[1][0]."field".$errorhandler[1][1].$errorhandler[1][2]."</li>"; } else { echo "<li>The ".$errorhandler[2][0]."field".$errorhandler[2][1].$errorhandler[0][2]."</li>"; } form(); } else { echo "no errors."; } } ?> the problem is, i get the following errors: Notice: Undefined offset: 0 in ********* on line 48 Notice: Undefined offset: 1 in ********* on line 48 Notice: Undefined offset: 2 in ********* on line 48 this is getting really confusing. do you think it could have anything to do with the [] which are being put now? or is it the output thats messed thanks for any help possible, HoTDaWg Quote Link to comment https://forums.phpfreaks.com/topic/66575-solved-preg_replace-or-array-where-have-i-gone-wrong/#findComment-333570 Share on other sites More sharing options...
MadTechie Posted August 25, 2007 Share Posted August 25, 2007 you need to refer to the key name not the index id.. i think you want this if(count($errorhandler) > 0) { foreach($errorhandler as $theerror) { echo "<li>The ".$theerror['Field']."field".$theerror['Type'].$theerror['Message']."</li>"; } form(); } Quote Link to comment https://forums.phpfreaks.com/topic/66575-solved-preg_replace-or-array-where-have-i-gone-wrong/#findComment-333582 Share on other sites More sharing options...
HoTDaWg Posted August 25, 2007 Author Share Posted August 25, 2007 alright it works perfectly! thanks so much for your help and also too lemmin! imma mark it solved for now although chances are i am going to try adding more features to this script in which case i will reactive under a different title. thanks for all the help, HoTDaWg Quote Link to comment https://forums.phpfreaks.com/topic/66575-solved-preg_replace-or-array-where-have-i-gone-wrong/#findComment-333599 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.