Jump to content

[SOLVED] preg_replace or array where have i gone wrong?


HoTDaWg

Recommended Posts

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

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.

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.

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

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();		
}

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.:P

 

thanks for all the help,

 

HoTDaWg

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.