Подскажите, есть строка типа:
PHP |
if ($x==0){$x=7;} |
Цитата |
Notice: Undefined variable: x in C:\WEBServer\www\cal\kalendar.php on line 96 |
Цитата |
Ответ: всегда говорю, что Денвер - это вещь специально искаженная под себя любимого. Постоянно показывает кучу ошибок, хотя на самом деле в НОРМАЛЬНОЙ версии Php и Apache - это не является ошибками. очень много как вы правильно сказали ошибок с определением переменных, типа, если ты ее указал, значит она уже должна быть определена в скрипте ранее. Чушь денверовская, ничего не должно быть определено, если нет переменной, значит нет, либо ее значение 0 либо NULL. И все нормальные версии ЭТО понимают и трактуют одинаково... |
Цитата (ksawl @ 30.07.2009 - 01:58) |
Автор скрипта утверждает |
Цитата (sergeiss @ 30.07.2009 - 00:02) |
Собственно говоря, сообщения об ошибках и предупреждения можно подавить (знак @) smile.gif Либо, можно просто проверять в нужных местах существование переменной (функция isset), и создавать ее в случае отсутствия. |
PHP |
if (empty($x)){$x=7;} |
Цитата (kirik @ 30.07.2009 - 10:26) |
Скажу больше: глушить ошибки "собаками" категорически противопоказанно (кроме конечно совсем клинических случаев) |
Цитата |
Во всех языках программирования ошибки обрабатывают и только в пхп их подавляют |
Цитата (Nikitian @ 30.07.2009 - 11:32) |
Собака - это зло |
PHP |
@mail( $this->to, $this->subject, $this->message, $this->mail_headers ); |
Цитата (sergeiss @ 30.07.2009 - 03:06) |
Потому что я, например, использую "собаку" только в случаях, где мне проще с этим значком отловить потенциальную ошибку, чем с try работать. |
PHP |
if (isset($x) and $x==0){$x=7;}else{ echo "Извените но переменной не существует"; } |
Цитата (S{oRpiO @ 30.07.2009 - 11:51) |
if (isset($x) and $x==0){$x=7;}else{ echo "Извените но переменной не существует"; } |
Цитата |
Например, при работе с БД лучше заглушить "автоматические" ошибки, чтобы можно было самостоятельно (в этом же скрипте) обработать возникшие некорректности. Случай вовсе не клинический, а очень даже нормальный. Потому что иначе юзер может получить информацию о структуре БД, которую ему знать вовсе не обязательно. |
Цитата |
Использую "собаку" в тех случаях, где работа кода зависит от внешних факторов. Например:PHP @mail( $this->to, $this->subject, $this->message, $this->mail_headers ); |
Цитата (twin @ 30.07.2009 - 12:20) |
Приведи плиз пример, когда возникшая некорректность запроса может быть исправлена скриптом... |
SQL |
INSERT INTO `users` (`id`, `username`, `password`) VALUES (NULL, 'user', MD5('pass')) |
PHP |
if(@mysql_query("INSERT INTO `users` (`id`, `username`, `password`) VALUES (NULL, 'user', MD5('pass'))")) |
Цитата (twin @ 30.07.2009 - 21:20) |
Немного не понял... Приведи плиз пример, когда возникшая некорректность запроса может быть исправлена скриптом... Ведь результаты по моему могут быть совсем непредсказуемы. Имхо в таких случаях лучше останавливать скрипт с кучей извинений. А юзер кстати не должен получать никакой информации, для этого есть логи и php_value error_log |
Цитата (kirik @ 30.07.2009 - 20:56) |
PHP if(@mysql_query("INSERT INTO `users` (`id`, `username`, `password`) VALUES (NULL, 'user', MD5('pass'))")) echo 'Вы успешно зарегистрированы'; else echo 'Пользователь с таким именем уже есть'; |
Цитата |
Подавить вывод ошибок можно добавив @ в начало названия функции (@mysql_connect()) |
Цитата (jetistyum @ 30.07.2009 - 13:28) |
ну это тоже, извините, быдлокодинг |
Цитата |
я использовал @ только в случаях проблемы с @mkdir |
Цитата |
Тоже не пойму... Ну если не создалась директория, как скрипту дальше себя вести? Он то откуда знает, сработала или нет функция? А уж ты тем более, если не логируешь ошибки. А если это заведомое условие, то уж луче проверить почву. file_exists(), is_dir() и так далее, в зависимости от логики.. |
Цитата (Sylex @ 31.07.2009 - 05:32) |
да все просто, собачка подавляет ошибки - используйте где хотите, если хотите подавить ошибку, и знаете, что она может быть |