У меня есть класс Checker, в нем статическая функция Require, мне нужно, чтобы он проверял все поля таким образом, которые не включены в массив исключений, вот код: PHP: class Checker extends \Core { public static $error; public static function Required($array, $execption=[]) { foreach ($array as $key => $value) { if( empty($value) ) { if(in_array(true, $execption)) { die(ErrorThrow::print('error_Required_' . $key)); } } else true; } } } И потом условия на деле: PHP: if( Checker::Required($array) !== false ) { //Дальнейшее выполнение, если не False выдаст ошибку, которая находиться в классе Checker; } В чем проблема: Если я внесу в условие Checker::Required($array, ['login']), то он будет игнорировать массив с ключём Login и выполнять остальные проверки, но если сделать условие таким образом Checker::Required($array), то он будет игнорировать все ключи массива.
ДОМА БУДУ, ПОКА https://php.ru/manual/function.array-filter.html#example-5580 --- Добавлено --- TRUE != LOGIN
ломал ломал голову что ты там хочешь, так и не доламал. Одно противоречит другому. во функции: PHP: die(ErrorThrow::print('error_Required_' . $key)); в условие Код (Text): //Дальнейшее выполнение, если не False выдаст ошибку, которая находиться в классе Checker; если не false то вовсе пхп завершается. Но это не смотря на саму логику хуйни в методе Required
Вот у тебя ник "не скажу", если бы ты своему совету следовал... Пришёл в чужую тему, написал бред. Круто. К твоему сведению, мне известно, что строчка делает, и почему у него не работает. Просто лучше, если чувак сам догадается, что бред написал, и почему то, что он написал - бред
нет, не проще. У меня такой запрос, например: Register::reg([ 'login'=>Core::xss($_POST['login']), 'email'=>Core::xss($_POST['email']), 'password'=>Core::xss($_POST['password']), 'confirm'=>Core::xss($_POST['confirm']), 'terms'=>Core::xss($_POST['terms']) ]); Я просто напишу Checker::Required($arrray) и он все поля проверит. --- Добавлено --- Там Ajax запрос. Поэтому все не закрывает, а лишь эту функцию.
пых у тебя завершается при достижение die (), а не функция. функция завершается return ом. метод reg () записывает результат в переменную public static $error; ?? что в $arrray находится ? он все поля проверит - поля? с зернами ? или на существовании ключа ?
Auhorization.php PHP: use Base\App; use Base\Auth\Register; use Base\Auth\Login; use Base\Auth\Forgot; include( $_SERVER['DOCUMENT_ROOT'] . '/system/core/Core.php' ); if(isset($_GET['register'])) { Register::reg([ 'login'=>Core::xss($_POST['login']), 'email'=>Core::xss($_POST['email']), 'password'=>Core::xss($_POST['password']), 'confirm'=>Core::xss($_POST['confirm']), 'terms'=>Core::xss($_POST['terms']) ]); } Checker.php PHP: namespace Base\App; use db\MySQL; use Base\db\SQL_Placeholders; use Base\db\SQL_Request; class Checker extends \Core { public static $error; public static function Required($array, $execption=[]) { foreach ($array as $key => $value) { if( empty($value) ) { if(in_array(true, $execption)) { die(ErrorThrow::print('error_Required_' . $key)); } } else true; } } public static function Validation($type, $str, $length='') { if( $type == 'email' ) if( filter_var($str, FILTER_VALIDATE_EMAIL) ) return true; else die(ErrorThrow::print('error_Validation_email')); } public static function DataBase_Availability_check($array) { foreach ($array as $key => $value) { if( SQL_Request::getOne_DataBase_Availability_check() == null ) return ture; else die(ErrorThrow::print('error_RDataBase_'.$key)); } } public static function DataBase_Validation_check($array) { if( !SQL_Request::getAll_DataBase_Validation_check($array) ) die(ErrorThrow::print('error_LDataBase_login-or-password')); else true; } public static function DataBase_Validation_RememberMe($salt) { if( SQL_Request::getOne_DataBase_Validation_RememberMe($salt) ) { return true; } } public static function DataBase_Validation_Authorization($array) { foreach ($array as $key => $value) { $array[$key]=base64_decode($value); } if( $array != '' ) { if( SQL_Request::getOne_DataBase_Validation_Authorization($array) ) { return true; } else return false; } } } PHP: namespace Base\Auth; use Base\App\Checker; use Base\App\SuccessMsg; use Base\App\ErrorThrow; use Base\db\SQL_Placeholders; use Base\db\SQL_Request; class Register extends \Core { public static function reg($array) { if( Checker::Required($array) !== false ) { if( Checker::Validation('email', $array['email']) !== false ) { if( strlen($array['password'])>=4 ) { if( $array['password'] == $array['confirm'] ) { if( Checker::DataBase_Availability_check(['user'=>$array['login'], 'email'=>$array['email']]) !== true ) { $password=\Core::en_password($array['confirm']); SQL_Request::Insert_Register($array, $password); echo SuccessMsg::print('success_Register'); } } else echo ErrorThrow::print('error_Validation_no-matches-password', 'Пароли'); } else echo ErrorThrow::print('error_Validation_length_4', 'Пароль'); } } } А теперь ломай голову. )
PHP: public static function Required( $array, $execption = [] ) { $ak = array_keys ( $array ); foreach ( $execption AS $val ) if ( in_array ( $val, $ak ) ) die ( 'Hi error key' . $val ); return true; } --- Добавлено --- или PHP: public static function Required( $array, $execption = [] ): bool { #$ak = array_keys ( $array ); foreach ( $execption AS $val ) if ( isset ( $array[$val] ) ) return false; return true; }
Есть массив с ключами и значениями, значения нужно проверить на пустоту. Если пусто, то выдаем ошибку. Но есть второй массив, которые отвечает за исключения. То есть если в первом массиве есть ключ со значением Login и в исключении тоже есть, то условие должно игнорировать этот ключ.
Тоже не работает. Я сделал таким образом: PHP: public static function Required($array, $execption=[]) { foreach ($array as $key => $value) { if( empty($value) ) { if(!in_array($key, $execption)) { die(ErrorThrow::print('error_Required_' . $key)); } } else true; } } И теперь все работает.