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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Fatall error

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
IncOness
Отправлено: 22 Октября, 2015 - 20:21:39
Post Id


Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




Сколько уже мучаюсь с этой ошибкой, так и не могу понять в чем дело...

Fatal error: Call to a member function prepare() on a non-object in D:\OpenServer\domains\index.ru\include\load_functions.php on line 22
PHP:
скопировать код в буфер обмена
  1. function banUser($login, $moderator, $date, $unban, $reason)
  2.         {
  3.                 include_once("db.php");
  4.                 if($insert_banlist = $connection->prepare("INSERT INTO `banlist` (`login`, `moderator`, `date`, `unban`, `reason`) VALUES (?, ?, ?, ?, ?)")) // 22
  5.                 {
  6.                         if($insert_banlist->bind_param("ssiis", $login1, $moderator1, $date1, $unban1, $reason1))
  7.                         {
  8.                                 $login1 = $login;
  9.                                 $moderator1  = $moderator;
  10.                                 $date1 = $date;
  11.                                 $unban1 = $unban;
  12.                                 $reason1 = $reason;
  13.                                 $insert_banlist->execute();
  14.                         }
  15.                         return true;
  16.                 }
  17.                 else return false;
  18.         }

Использование:
PHP:
скопировать код в буфер обмена
  1. if(banUser($_SESSION['login'], 'Moder', time(), time() + 86400 * 30, 'Обход системы'))                                                                                                                                          {                                                                                                                                                       sendClientMsg("error", "0003", "Вы были забанены на 30 дней за попытку обхода системы");                                                                                                                                                }                                                                                                                                               else                                                                                                                                            {                                                                                                                                               $msg = '<div class="alert alert-danger"><strong>#0004</strong> Недостаточно средств.</div>';                                                                                                                                                                                    }

(Отредактировано автором: 22 Октября, 2015 - 20:22:57)

 
 Top
IncOness
Отправлено: 22 Октября, 2015 - 23:45:03
Post Id


Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




Почитав некоторую информацию по этому вопросу в интернете, решил проблему заменив include_once на просто include. Однако понять не могу, почему так оно есть? include_once ведь и служит для того, чтобы загружать контент всего 1 раз, если ранее он уже был загружен. Тем не менее, с include_once почему-то var_dump($connection) выдавал NULL. Почему?

(Отредактировано автором: 22 Октября, 2015 - 23:48:51)

 
 Top
DeepVarvar Супермодератор
Отправлено: 23 Октября, 2015 - 09:29:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Потому что тупой пых смотрит только в одну область видимости.
А писать на каждый чих эти богомерзкие global внутри каждого скопа (ф-ции) -- себя не уважать.

Принцип "глобализации переменных" быстро пронюхали -- любая статика (ф-ция или статический метод) всегда глобальны.
Но выбирается именно статический метод, т.к. у классов/объектов есть изкоробочный бонус -- сохранение внутреннего состояния.

PHP:
скопировать код в буфер обмена
  1. class MyInstances
  2. {
  3.     private static $_instances = array();
  4.     public static function getInstance($className)
  5.     {
  6.         if (!array_key_exists($className, self::$_instances)) {
  7.             require_once $className;
  8.             self::$_instances[$className] = new $className();
  9.         }
  10.  
  11.         return self::$_instances[$className];
  12.     }
  13. }

Писать про передачу аргументов в конструируемые экземпляры объектов мне влом.
Так же влом сейчас писать про рефлексию и способы передачи там аргументов по ссылке.
Оно тебе и жирновато будет сразу.


Ну и да:

CODE (htmlphp):
скопировать код в буфер обмена
  1. Я                                   думаю
  2.      что
  3. тебе
  4.  
  5.                     нужно
  6.  
  7.  
  8. учиться
  9.  
  10.                                         форматировать
  11. текст
  12.             программы
 
 Top
IncOness
Отправлено: 23 Октября, 2015 - 14:57:30
Post Id


Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




DeepVarvar пишет:
Ну и да:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Я                                   думаю
  2.      что
  3. тебе
  4.  
  5.                     нужно
  6.  
  7.  
  8. учиться
  9.  
  10.                                         форматировать
  11. текст
  12.             программы

Текст в самом файле у меня полностью отформатирован (табуляция), не знаю почему при копировании скрипта на сайт получается так. Спасибо.
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Октября, 2015 - 10:49:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Потому что пхп пишут по PSR кодинг стандартам:

1) 4 пробела замест одного таба.
2) function<тут должен быть перевод строки и отступы (в 4 пробела каждый) до буквы f>{
3) if<циклы, условия, свитчи, тут должен быть один пробел>(
4) xxx (...)<циклы, условия, свитчи, пробел без перевода строки>{
5) $reason1<выравнивание пробелами, так же и для ассоциативного массива>= $reason
6) максимальная длина строки 80 символов, критическая 120. Если ты влез в 80, то молодец, если вылез за 80 -- ты хоть и какашка, но вот тебе поблажка. Ну а если вылез за 120, то ты дрыщ позорный и макаронный монстр ))

Есть отступы (табуляция, в PSR она делается пробелами), а есть выравнивание, оно всегда делается пробелами.
И не надо путать эти два понятия.
Отступы всегда от левого края строки, а выравнивания могут идти только в центре строки.

Смирись.
Я тоже смирился.
Уже даже привык.
Нет, уже даже других гоняю ))

Еще можно поговорить по оформлению алгоритмов.

Делать как можно меньше "ступенек".
И еще было дело мы тут недавно обсуждали где-то, что делать несколько ретурнов из ф-ции с разных глубин вложенных условий это некошерно.
В таком куске кода нужно пораскинуть мозгами и развернуть эти макароны в идеале в односложную одноуровневую последовательность действий.
И "опускать руки" только в том случае, если улучшить уже невозможно.

Если определено, что ф-ция возвращает массив, то она всегда должна возвращать массив.
Не нашлось что вернуть? Ну так возвращай пустой массив.

Так же, ты используешь *_once для единоразового подключения файлов.
Но, это хрень. Нет, оно конечно свое дело делает.
Но, нужно использовать хранилище инстансов, которое инкапсулирует в себе все эти инклюды и проверки.
Ну я написал простейший пример в своем предыдущем сообщении.
 
 Top
Мелкий Супермодератор
Отправлено: 24 Октября, 2015 - 11:20:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DeepVarvar пишет:
максимальная длина строки 80 символов, критическая 120

PSR говорит "There MUST NOT be a hard limit on line length."

Требования выравнивания пробелами присвоения так же нет. Это может рулиться более местными стандартами кодирования, но в psr этого нет.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB