Как може да стане проверката с мулти-масивите?

Ticketa

Registered
PHP:
<?php
$errors = array();
if(isSet($_POST['submit'])) {
	$arraya = array (
		"required" => array (
			"username" => 'Полето потребител е задължително',
			"email" => 'Полето Мейл е задължително'
		),
		"sMinimum" => array (
			"username" => 'Потребителското име трябва да е над Х символа'
		),
		"oCheckMeil" => array (
			"email" => 'Въведи правилен мейл'
		)
	);
	foreach ($_POST['data'] AS $field => $value) {
		$temp = is_array($value) ? $value : trim($value);
		if (empty($temp) && in_array(array($field), $arraya)) { //проверяваме за празни полета
			array_push($errors, $field);
		}
		if ((strlen($temp) < 2) && in_array(array($field), $arraya)) { //проверяваме за минимум X символа
			array_push($errors, $field);
		}
	}
	#var_dump(in_multiarray($field, $arraya));
}
if(isset($errors)) {
	echo "Грешки във формата:";
	foreach ($errors as $key => $value) {
		echo $key . $value;
	}
}
?>
<form method="POST" action="">
	Username: <input type="text" name="data[username]" />
	<?php if (isset($errors) && in_array('username', $errors)) { ?>
		<div class="red">Полето е задължително.</div>  
	<?php } ?>
	<br />
	E-mail: <input type="text" name="data[email]" />
	<?php if (isset($errors) && in_array('email', $errors)) { ?>
		<div class="red">Полето е задължително.</div>  
	<?php } ?>
	<br />
	<input type="submit" value="submit" name="submit" />
</form>

Искам да изкарам грешките, допуснати във формата, като "полето е задължително" да излиза само до INPUT , а останалите грешки над формата?
 
Не мога да разбера къде бъркам.

Ето до къде стигнах:
Полето потребител е задължително = username
Полето Мейл е задължително = username
Потребителското име трябва да е над Х символа = username
Полето потребител е задължително = email
Полето Мейл е задължително = email
Потребителското име трябва да е над Х символа = email

Тоест това е резултата от функцията какво всъщност сравнява.

Вместо да проверява самите полета, то сравнява грешката с полето.

А тази грешка трябва да се "набие"/вкара в $errors.. Идеи?

PHP:
<?php
header('Content-Type: text/html; charset=windows-1251');
$errors = array();
function in_multiarray($str, $array) {
    $exists = false;
    if (is_array($array)) {
       foreach ($array as $arr):
           $exists = in_multiarray($str, $arr);
       endforeach;
    } else {
		echo $array . ' = ' . $str . "\n";
        if (strpos($array, $str) !== false) $exists = true;
    }
    return $exists;
}
if(isSet($_POST['submit'])) {
	$arraya = array (
		"required" => array (
			"username" => 'Полето потребител е задължително',
			"email" => 'Полето Мейл е задължително'
		),
		"sMinimum" => array (
			"username" => 'Потребителското име трябва да е над Х символа'
		),
		"oCheckMeil" => array (
			"email" => 'Въведи правилен мейл'
		)
	);
	foreach ($_POST['data'] AS $field => $value) {
		$temp = is_array($value) ? $value : trim($value);
		if (empty($temp) && in_multiarray($field, $arraya["required"])) { //проверяваме за празни полета
			array_push($errors, $field);
		}
		if ((strlen($temp) < 2) && in_multiarray($field, $arraya["sMinimum"])) { //проверяваме за минимум X символа
			array_push($errors, $field);
		}
	}
	if (empty($errors)) {
		unset($errors);
	}
}
if(isset($errors)) {
	foreach ($errors as $key => $value) {
		echo $value;
	}
}
?>
<form method="POST" action="">
	Username: <input type="text" name="data[username]" />
	<br />
	E-mail: <input type="text" name="data[email]" />
	<br />
	<input type="submit" value="submit" name="submit" />
</form>
 
empty връща true когато е вярно.
Един знак ! от пред , ще го обърне и ще ти свърши работа.
Предопредих те на лични съобщения за това нещо на фукнцията и как можеш да го избекнеш с == null или просто if($var)
Ето го кода който работи при мен ( леко го моднах , да ми е по-удобно да ти влезна в логиката )
PHP:
<?php
header('Content-Type: text/html; charset=windows-1251');
$errors = array();
var_dump($_POST);

function in_multiarray($str, $array) {
    $exists = false;
    if (is_array($array)) {
        foreach ($array as $arr):
            $exists = in_multiarray($str, $arr);
        endforeach;
    } else {
        echo "<br/>inMultyArray [" . $array . ' = ' . $str . "]<br>\n";
        if (strpos($array, $str) !== false)
            $exists = true;
    }
    return $exists;
}

if ($_POST['data']) {
    $arraya = array(
        "required" => array(
            "username" => 'Полето потребител е задължително',
            "email" => 'Полето Мейл е задължително'
        ),
        "sMinimum" => array(
            "username" => 'Потребителското име трябва да е над Х символа'
        ),
        "oCheckMeil" => array(
            "email" => 'Въведи правилен мейл'
        )
    );
    foreach ($_POST['data'] AS $field => $value) {
        $temp = is_array($value) ? $value : trim($value);
        if (!empty($temp) && in_multiarray($field, $arraya["required"])) { //проверяваме за празни полета
            array_push($errors, $field);
        }
        if ((strlen($temp) < 2) && in_multiarray($field, $arraya["sMinimum"])) { //проверяваме за минимум X символа
            array_push($errors, $field);
        }
    }
    /*
     * sled kato e prazno nqma nujda go  izprazvash :d
      if (empty($errors)) {
      unset($errors);
      }
     * 
     */
}
var_dump($errors); /*
  if(isset($errors)) {
  foreach ($errors as $key => $value) {
  echo "<p>{$value}</p>";
  }
  }
 * 
 */
?>
<form method="POST" action="">
    Username: <input type="text" name="data[username]" />
    <br />
    E-mail: <input type="text" name="data[email]" />
    <br />
    <input type="submit" value="submit" name="submit" />
</form>
 
Хахаха, това за empty - вярно! :D Обаче, пак не ми изкарва грешките като мина масива през foreach. :idea:
 
Пусни ми утре ЛС . за да ме подсетиш да го погледна. СЕга съм уморен много.

Edit :::////
Реших сега да го направя.
Доста преправих кода. Като лично аз смятам ,че така е най-добре.
PHP:
<?php
header('Content-Type: text/html; charset=windows-1251');
$errors = array();
//var_dump($_POST);

$arr = array(
    'username' => array(
        'required' => 'Полето е задължително',
        'sMinimum' => 'Потребителското име трябва да е над Х символа'),
    'email' => array(
        'oCheckMeil' => 'Въведи правилен мейл',
        'required' => 'Полето е задължително'
    )
);

function isRequired($data) {
    return ($data != null) ? true : false;
}

//isRequired

function isValidEmail($data) {
    return preg_match("/^[_a-z0-9-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i", $data);
}

//isValidEmail

function isInMin($data) {
    return (strlen($data) > 5) ? true : false;
}

//isInMin

function in_multiarray($str) {
    global $arr;
    global $errors;
    if (is_array($str)) {
        foreach ($str as $key => $value) {
            if (key_exists($key, $arr)) {
                // Голямата проверка започва тука
//                echo "<h1>ST</h1>";
 //               echo "<p>" . var_dump($key) . "</p>";
   //             echo "<p>" . var_dump($arr[$key]) . "</p>";
                foreach ($arr[$key] as $k => $v) {
                  //  echo "$k => $v ||  $value <br>";
                    if ($k === 'required')
                        if (!isRequired($value))
                            $errors[$key][] = array('required' => $v);

                    if ($k === 'sMinimum')
                        if (!isInMin($value))
                            $errors[$key][] = array('sMinimum' => $v);
                        
                    if ($k === 'oCheckMeil')
                        if (!isInMin($value))
                            $errors[$key][] = array('oCheckMeil' => $v);
                }
                // И свършва тук
            } else {
                $errors[] = array('nonExistingKey' => 'Опитвате да въведете  инфорамция която не е дефинирана за тази страница.');
            }
            //in_multiarray($value);
        }
        return;
    }//if

    echo "<hr/><p>" . print_r($str) . "</p>";
}

//in_multiarray

if ($_POST['data']) {
    in_multiarray($_POST['data']);
}//if posted data
var_dump($errors);
?>
<form method="POST" action="">
    Username: <input type="text" name="data[username]" />
    <br />
    E-mail: <input type="text" name="data[email]" />
    <br />
    <input type="submit" value="submit" name="submit" />
</form>
 

Back
Горе