Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Не могу вкурить!!!!!
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Не могу вкурить!!!!!

Страниц (2): [1] 2 »
 

1. Хенаро - 13 Сентября, 2015 - 16:53:54 - перейти к сообщению
Здравствуйте! Делаю тестовое для приёма на работу и как всегда на самом простом валюсь!
Задача - сделать регистрацию и авторизацию пользователей. Делаю на "чистом" аяксе без джейкверию Кусочек остался, добавление дополнительных сведений о себе. Смотрите:
PHP:
скопировать код в буфер обмена
  1. namespace reggiAuth;
  2. require 'registrator.php';
  3.  
  4. $user = new registrator();
  5.  
  6. $dateBirth = htmlspecialchars(trim($_POST['dateBirth']));
  7.  
  8. $error     = '';
  9.  
  10. if($dateBirth){
  11.    $error .= $user->validate($dateBirth, '/\d{4}\.\d{1,2}\.\d{1,2}/', 'Неверный формат даты, должна быть в формате 2015.09.11');
  12. }
  13. if($error){
  14.     exit($error);
  15. }
  16. // функция, которая используется::
  17. // проверка введённых данных
  18.     public function validate($value, $pattern, $message){
  19.         if(!empty($value)){
  20.             if(preg_match($pattern, $value)) return '';
  21.         }
  22.         else return $message;
  23.     }
  24.  

И всё дело в том, что не делает проверки, во всех случаях, что ни вводи, $error всё равно пустая строка. Ну почему??? Выручите, пожалуйста!!!
2. Мелкий - 13 Сентября, 2015 - 17:03:02 - перейти к сообщению
Выкиньте ненужные сущности и посмотрите частности.

PHP:
скопировать код в буфер обмена
  1. function validate($value, $pattern, $message){
  2.         if(!empty($value)){
  3.             if(preg_match($pattern, $value)) return '';
  4.         }
  5.         else return $message;
  6.     }
  7.  
  8. var_dump(validate('2015-05-01', '/\d{4}\.\d{1,2}\.\d{1,2}/', 'Неверный формат даты, должна быть в формате 2015.09.11'));

Характерный результат сразу показывает ошибку.
3. Хенаро - 13 Сентября, 2015 - 17:20:10 - перейти к сообщению
Мелкий пишет:
Выкиньте ненужные сущности и посмотрите частности.
Характерный результат сразу показывает ошибку.


Спасибо за ответ. Ничего не понял, конечно, эта функция отлично работала и работает в других файлах. Обьясни, пожалуйста, как сделать, чтоб работало??

Ну пи**ец!! Ну вчера ж только проверял, работала ****!! Какого беса NULL? Откуда бЛ***
4. Мелкий - 13 Сентября, 2015 - 17:42:38 - перейти к сообщению
Хенаро пишет:
Делаю тестовое для приёма на работу

Нет, готового кода я не дам принципиально.

Хенаро пишет:
эта функция отлично работала и работает в других файлах

Это высказывание ложно.


С указанным набором аргументов, как легко заметить, функция возвращает NULL.
При конкатенации строки с NULL результатом будет что? Объясните самому себе, почему наблюдаемое вами дальнейшее поведение системы является логичным и единственно-возможным.

NULL же из функции можно получить в 3 случаях:
0) если сделан return значения NULL.
1) если сделан return без аргумента, "return;" т.е.
2) если return не был вызван вовсе.
Найдите свой случай.
5. Хенаро - 13 Сентября, 2015 - 17:51:01 - перейти к сообщению
Мелкий пишет:

Хенаро пишет:
эта функция отлично работала и работает в других файлах

Это высказывание ложно.

Как же ложно, отключаю яваскрипт, делаю регистрацию, возвращается
1Неправильный логин, только английские буквы и цифры
Неправильный формат E-mail
Пароль содержит пробелы

Ну если не дашь принципиально, тогда поздравляю
6. Мелкий - 13 Сентября, 2015 - 18:44:44 - перейти к сообщению
Хенаро пишет:
Как же ложно

Потому что отклонение от желаемого поведения стабильно воспроизводится на каждом запуске. Поведение кода стабильно. Значит, в других местах функция ведёт себя идентично либо там вызывается другая функция.
Следовательно с отключенным JS или другие параметры передаются (например, что-то, приводимое к empty) или вызывается другая функция.
7. Хенаро - 13 Сентября, 2015 - 19:05:36 - перейти к сообщению
Мелкий пишет:
Хенаро пишет:
Как же ложно

Потому что отклонение от желаемого поведения стабильно воспроизводится на каждом запуске. Поведение кода стабильно. Значит, в других местах функция ведёт себя идентично либо там вызывается другая функция.
Следовательно с отключенным JS или другие параметры передаются (например, что-то, приводимое к empty) или вызывается другая функция.


Да в том-то и дело, нет там другой функции validate. С этим кодом бляха, и так обидно, всегда на чём-то самом простом Огорчение
8. Panoptik - 13 Сентября, 2015 - 23:18:21 - перейти к сообщению
обходя расставленные грабли - теряешь бесценный опыт (с)

ищите ошибку. там всего 3 строчки и советов дано уже более чем
9. Хенаро - 15 Сентября, 2015 - 20:51:29 - перейти к сообщению
Panoptik пишет:
обходя расставленные грабли - теряешь бесценный опыт (с)

ищите ошибку. там всего 3 строчки и советов дано уже более чем

Я просто не понимаю, почему сегодня функция работает, а завтра уже нет..
И даже не знаю как начать думать чтоб до этого додуматься. В самом деле, ну откуда? ну откуда в функции на 3 строки может взяться ошибка, причём скрытая без сигналов.
Проверено: везде работает как надо, только в одном файле косяк выходит Огорчение
10. Мелкий - 15 Сентября, 2015 - 22:26:10 - перейти к сообщению
Серьёзно?
Мелкий пишет:
NULL же из функции можно получить в 3 случаях:
0) если сделан return значения NULL.
1) если сделан return без аргумента, "return;" т.е.
2) если return не был вызван вовсе.
Найдите свой случай.

Вы за столько времени не смогли проверить всего 3 причины? В коде из 3 строк?
11. DelphinPRO - 15 Сентября, 2015 - 22:30:15 - перейти к сообщению
смотреть что приходить на вход функции не пробовали?
Если данные не проходят валидацию - изучите, что за данные приходят. Залогируйте если нужно ошибочные проверки в файл и посмотрите.
12. andrewkard - 15 Сентября, 2015 - 23:21:20 - перейти к сообщению
Пишите операторы ветвления с фигурными скобками, так код более понятен.
PHP:
скопировать код в буфер обмена
  1.  
  2. function validate($value, $pattern, $message){
  3.     if(!empty($value)){
  4.         if(preg_match($pattern, $value)){
  5.             return '';
  6.         }
  7.     } else {
  8.         return $message;
  9.     }
  10. }
  11.  

Логичнее, что бы данная функция выдавала не сообщение, а true либо false, как результат проверки.
13. DelphinPRO - 16 Сентября, 2015 - 01:51:48 - перейти к сообщению
andrewkard так вот где собака зарыта )
действительно, с правильным форматированием сразу видно почему функция может вернуть null
14. Panoptik - 16 Сентября, 2015 - 11:58:03 - перейти к сообщению
всем кто помог дать прямой ответ - жирный минус.
как минимум помогли человеку НЕ научиться разбираться с кодом, искать ошибки, отлаживать, и приучили бегать на форум по любому мелочному поводу
15. Хенаро - 16 Сентября, 2015 - 13:47:52 - перейти к сообщению
Panoptik пишет:
всем кто помог дать прямой ответ - жирный минус.
как минимум помогли человеку НЕ научиться разбираться с кодом, искать ошибки, отлаживать, и приучили бегать на форум по любому мелочному поводу


Ничёсе мелочи! И никто не дал, не волнуйся ты так

И я в жизни никогда, слышите, НИКОГДА не пойму почему в ней получается пустое value

Голимая МИСТИКА брошу всё и уйду в монархи

 

Powered by ExBB FM 1.0 RC1