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 :: Собака в php

 PHP.SU

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


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

> Без описания
RickMan
Отправлено: 26 Мая, 2012 - 23:47:35
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


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




Здрасти....слышал что собаки (@) перед переменными не к добру и избавляться надо...

Но у меня два вопроса:
1) что они означают
2) как их заменить...

на примере:


Заранее благодарен за ясные и интересные ответы....

(Отредактировано автором: 26 Мая, 2012 - 23:47:54)

 
 Top
OrmaJever Модератор
Отправлено: 26 Мая, 2012 - 23:53:13
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




1)Собака заглушает ошибки имено этого токена, в даном случае не будет ошибки о неопределёном индексе масива. Мжите сразу взять на заметку - собака замедляет скрипт в 10 раз, показания условные, но лучше думать имено о этих цыфрах когда хотите её влепить. Она используется крайне редко.
2) В некторых случаях её можно просто убрать, а даном случае

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


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
RickMan
Отправлено: 27 Мая, 2012 - 00:05:29
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


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




хм, ясно...а к примеру в такой записи?

$roba = mysql_fetch_array(@mysql_query("SELECT * FROM `inventory` WHERE `owner` = '{$_SESSION['uid']}' AND `type` = 27 AND `id` = '{$user['rybax']}' LIMIT 1;"));

и

if(!@in_array($row['id'],@array_keys($_SESSION['flowers']))) {

(Отредактировано автором: 27 Мая, 2012 - 00:08:34)

 
 Top
etoYA
Отправлено: 27 Мая, 2012 - 01:27:22
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


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




RickMan, тоже самое.
 
 Top
RickMan
Отправлено: 27 Мая, 2012 - 09:04:25
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


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




etoYA пишет:
RickMan, тоже самое.


тоесть:

$roba = mysql_fetch_array(isset(mysql_query("SELECT * FROM `inventory` WHERE `owner` = '{$_SESSION['uid']}' AND `type` = 27 AND `id` = '{$user['rybax']}' LIMIT 1;")));

и

if(!isset(in_array($row['id'],@array_keys($_SESSION['flowers'])))) {

так???
 
 Top
Green
Отправлено: 27 Мая, 2012 - 11:19:13
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Апр. 2012  
Откуда: Кисловодск


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




RickMan пишет:
1) что они означают

Подавление ошибок. Смотрим такой пример:

Как мы видим, переменной $a - не существует. Появится сообщения: Notice: Undefined variable: a in. Чтобы этого избежать, подавим ошибку:

И видим, что сообщение об ошибке - исчезло. Но это не значит, что проблема устранена. Ни в коем случае не используйте подавления ошибок. Вы не только замедлите работу скрипта, так еще и затрудните себе работу. Например, у Вас на сайте что-то перестало работать. И как Вы узнайте, где проблема? Ведь все ошибки подавляются.

Если Вы все же решили избавиться от ошибок, то рекомендую использовать такую конструкцию:

А потом в нужный момент заменить 0 на E_ALL, чтобы отображать все ошибки.
А если же подавлять каждую переменную, функцию - это сколько потом файлов надо пересмотреть, чтобы удалить все @?

RickMan пишет:
if(!isset(in_array($row['id'],@array_keys($_SESSION['flowers'])))) {

Вы в курсе, что isset, это конструкция, которая проверяет, существует ли переменная? Вы не можете передать ничего кроме переменной.

RickMan пишет:
$roba = mysql_fetch_array(isset(mysql_query("SELECT * FROM `inventory` WHERE `owner` = '{$_SESSION['uid']}' AND `type` = 27 AND `id` = '{$user['rybax']}' LIMIT 1;")));

Тоже самое. Вы вообще свой код тестировали? Не понял

RickMan пишет:
2) как их заменить...

Запомните, их не надо ничем заменять! Их вообще использовать не рекомендуется!
Если Вы хотите избавиться от Notice которых могут вызывать переменные, то Вы просто проверяйте, существует ли переменная. И только если существует, выводите её.

Пример:


Надеюсь, мой пост Вам поможет. Улыбка

(Отредактировано автором: 27 Мая, 2012 - 11:21:35)

 
 Top
OrmaJever Модератор
Отправлено: 27 Мая, 2012 - 11:36:36
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




RickMan пишет:
PHP:
скопировать код в буфер обмена
  1. $roba = mysql_fetch_array(@mysql_query("SELECT * FROM `inventory` WHERE `owner` = '{$_SESSION['uid']}' AND `type` = 27 AND `id` = '{$user['rybax']}' LIMIT 1;"));

Это точно новичёк писал. mysql_query будет ругатся только если будет ошибка синтаксиса, а при правельном запросе и правельной фильтрации её впринципе быть не должно. Здесь собаку можно просто убрать.
RickMan пишет:
if(!@in_array($row['id'],@array_keys($_SESSION['flowers']))) {

Это я воще кодер 80лвл. Как я понимаю ошибка может быть из-за отсутствия $row['id'] или $_SESSION['flowers'], но блин их полюбому проверять надо перед подачей в функцию.
PHP:
скопировать код в буфер обмена
  1. if(isset($row['id'], $_SESSION['flowers']) && !in_array($row['id'], array_keys($_SESSION['flowers']))) {

Тоесть просто проверяем существуют ли эти переменые иил индексы масивов и затем уже идёт проверка на наличие в масиве.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 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