За последние 24 часа нас посетили 31926 программистов и 1362 робота. Сейчас ищут 784 программиста ...

Не могу построить логику.

Тема в разделе "PHP для новичков", создана пользователем Danil005, 23 авг 2017.

  1. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    У меня есть класс Checker, в нем статическая функция Require, мне нужно, чтобы он проверял все поля таким образом, которые не включены в массив исключений, вот код:

    PHP:
    1. class Checker extends \Core {
    2.     public static $error;
    3.  
    4.     public static function Required($array, $execption=[]) {
    5.         foreach ($array as $key => $value) {
    6.             if( empty($value) ) {
    7.               if(in_array(true, $execption)) {
    8.                   die(ErrorThrow::print('error_Required_' . $key));
    9.               }
    10.             } else true;
    11.         }
    12.     }
    13. }
    И потом условия на деле:
    PHP:
    1. if( Checker::Required($array) !== false ) {
    2.    //Дальнейшее выполнение, если не False выдаст ошибку, которая находиться в классе Checker;
    3. }
    В чем проблема:
    Если я внесу в условие Checker::Required($array, ['login']), то он будет игнорировать массив с ключём Login и выполнять остальные проверки, но если сделать условие таким образом Checker::Required($array), то он будет игнорировать все ключи массива.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ну и как эта строчка на русский язык переводится?
     
  4. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Проверка существование массива, когда то читал)
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    ломал ломал голову что ты там хочешь, так и не доламал. Одно противоречит другому.
    во функции:
    PHP:
    1. die(ErrorThrow::print('error_Required_' . $key));
    в условие
    Код (Text):
    1. //Дальнейшее выполнение, если не False выдаст ошибку, которая находиться в классе Checker;
    если не false то вовсе пхп завершается. Но это не смотря на саму логику хуйни в методе Required
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Вот у тебя ник "не скажу", если бы ты своему совету следовал... Пришёл в чужую тему, написал бред. Круто. К твоему сведению, мне известно, что строчка делает, и почему у него не работает. Просто лучше, если чувак сам догадается, что бред написал, и почему то, что он написал - бред
     
    MouseZver нравится это.
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    не проще ли&
    if ( isset ( Checker::$error['login'] ) ) { ... }
     
  8. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
  9. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    нет, не проще. У меня такой запрос, например:
    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 запрос. Поэтому все не закрывает, а лишь эту функцию.
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    пых у тебя завершается при достижение die (), а не функция. функция завершается return ом.

    метод reg () записывает результат в переменную
    public static $error;

    ??

    что в $arrray находится ?

    он все поля проверит - поля? с зернами ? или на существовании ключа ?
     
  11. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Auhorization.php
    PHP:
    1. use Base\App;
    2. use Base\Auth\Register;
    3. use Base\Auth\Login;
    4. use Base\Auth\Forgot;
    5.  
    6. include( $_SERVER['DOCUMENT_ROOT'] . '/system/core/Core.php' );
    7.  
    8. if(isset($_GET['register'])) {
    9.         Register::reg([
    10.             'login'=>Core::xss($_POST['login']),
    11.             'email'=>Core::xss($_POST['email']),
    12.             'password'=>Core::xss($_POST['password']),
    13.             'confirm'=>Core::xss($_POST['confirm']),
    14.             'terms'=>Core::xss($_POST['terms'])
    15.         ]);
    16.        
    17.     }
    Checker.php
    PHP:
    1. namespace Base\App;
    2. use db\MySQL;
    3. use Base\db\SQL_Placeholders;
    4. use Base\db\SQL_Request;
    5.  
    6. class Checker extends \Core {
    7.     public static $error;
    8.  
    9.     public static function Required($array, $execption=[]) {
    10.         foreach ($array as $key => $value) {
    11.             if( empty($value) ) {
    12.               if(in_array(true, $execption)) {
    13.                   die(ErrorThrow::print('error_Required_' . $key));
    14.               }
    15.             } else true;
    16.         }
    17.     }
    18.  
    19.     public static function Validation($type, $str, $length='') {
    20.         if( $type == 'email' ) if( filter_var($str, FILTER_VALIDATE_EMAIL) ) return true; else die(ErrorThrow::print('error_Validation_email'));
    21.  
    22.     }
    23.  
    24.     public static function DataBase_Availability_check($array) {
    25.         foreach ($array as $key => $value) {
    26.             if( SQL_Request::getOne_DataBase_Availability_check() == null ) return ture; else die(ErrorThrow::print('error_RDataBase_'.$key));
    27.         }
    28.     }
    29.  
    30.     public static function DataBase_Validation_check($array) {
    31.         if( !SQL_Request::getAll_DataBase_Validation_check($array) )
    32.             die(ErrorThrow::print('error_LDataBase_login-or-password')); else true;
    33.  
    34.     }
    35.  
    36.     public static function DataBase_Validation_RememberMe($salt) {
    37.         if( SQL_Request::getOne_DataBase_Validation_RememberMe($salt) ) {
    38.             return true;
    39.         }
    40.     }
    41.  
    42.     public static function DataBase_Validation_Authorization($array) {
    43.         foreach ($array as $key => $value) {
    44.             $array[$key]=base64_decode($value);
    45.         }
    46.         if( $array != '' ) {
    47.             if( SQL_Request::getOne_DataBase_Validation_Authorization($array) ) {
    48.                 return true;
    49.             } else return false;
    50.         }
    51.            
    52.     }
    53.  
    54. }
    PHP:
    1. namespace Base\Auth;
    2.  
    3. use Base\App\Checker;
    4. use Base\App\SuccessMsg;
    5. use Base\App\ErrorThrow;
    6. use Base\db\SQL_Placeholders;
    7. use Base\db\SQL_Request;
    8.  
    9. class Register extends \Core {
    10.   public static function reg($array) {
    11.       if( Checker::Required($array) !== false ) {
    12.         if( Checker::Validation('email', $array['email']) !== false ) {
    13.             if( strlen($array['password'])>=4 ) {
    14.               if( $array['password'] == $array['confirm'] ) {
    15.                   if( Checker::DataBase_Availability_check(['user'=>$array['login'], 'email'=>$array['email']]) !== true ) {
    16.                       $password=\Core::en_password($array['confirm']);
    17.                        SQL_Request::Insert_Register($array, $password);
    18.                       echo SuccessMsg::print('success_Register');
    19.                   }
    20.               } else echo ErrorThrow::print('error_Validation_no-matches-password', 'Пароли');
    21.             } else echo ErrorThrow::print('error_Validation_length_4', 'Пароль');
    22.         }
    23.       }
    24.  
    25.   }
    А теперь ломай голову. )
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    PHP:
    1. public static function Required( $array, $execption = [] )
    2. {
    3.     $ak = array_keys ( $array );
    4.  
    5.     foreach ( $execption AS $val )
    6.         if ( in_array ( $val, $ak ) ) die ( 'Hi error key' . $val );
    7.  
    8.    return true;
    9. }
    --- Добавлено ---
    или
    PHP:
    1. public static function Required( $array, $execption = [] ): bool
    2. {
    3.     #$ak = array_keys ( $array );
    4.  
    5.     foreach ( $execption AS $val )
    6.         if ( isset ( $array[$val] ) ) return false;
    7.      
    8.     return true;
    9. }
     
    #12 MouseZver, 23 авг 2017
    Последнее редактирование: 23 авг 2017
    Danil005 нравится это.
  13. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    @MouseZver, нет, ни первый ни второй вариант не работает.
     
  14. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    как понятно было написано в 1 посте
     
  15. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Есть массив с ключами и значениями, значения нужно проверить на пустоту. Если пусто, то выдаем ошибку. Но есть второй массив, которые отвечает за исключения.
    То есть если в первом массиве есть ключ со значением Login и в исключении тоже есть, то условие должно игнорировать этот ключ.
     
  16. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    поменяй isset на empty :) ...
     
  17. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Тоже не работает. Я сделал таким образом:
    PHP:
    1. public static function Required($array, $execption=[]) {
    2.         foreach ($array as $key => $value) {
    3.             if( empty($value) ) {
    4.               if(!in_array($key, $execption)) {
    5.                   die(ErrorThrow::print('error_Required_' . $key));
    6.               }
    7.             } else true;
    8.         }
    9.     }
    И теперь все работает.