Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Array ( ) Notice: Undefined index: id in
 
 автор: BlueWolf   (05.02.2011 в 15:00)   письмо автору
 
 

$id = $_GET['id']
if($id){ echo "поймал id<br/>";} else {echo "нет id<br/>";}

Вот так работает без ошибок на php5.31 А на хостинге php5.33 выдаёт ошибки.
Вопрос. Из-за чего так?
Виноват плохой скрипт, версия php или настройки хостинга?

  Ответить  
 
 автор: neadekvat   (05.02.2011 в 15:05)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 15:00)
 

Если _GET['id'] не существует, то предупреждения от интерпитатора вполне предсказуемы.
Плюс, не стоит использовать if ($id), используйте if ( ! empty($id)), так ваш код будет основываться на четкой логике, а не на ошибке (а в первом случаи false получается, по сути, в результате ошибки)

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 15:25)   письмо автору
 
   для: neadekvat   (05.02.2011 в 15:05)
 

А как отключить вывод этих ошибок?

  Ответить  
 
 автор: Trianon   (05.02.2011 в 15:25)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 15:25)
 

их включить нужно, а не выключить.
А сами ошибки - исправить.

  Ответить  
 
 автор: Красная_шляпа   (05.02.2011 в 15:05)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 15:00)
 

потому что не существует элемента массива $_GET с индексом id.


<?php

$id 
= isset($_GET["id"]) ? abs((int) $_GET["id"])  : null;
if (
$id) {
    
// ...
}
else {
    
// ...
}

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 15:21)   письмо автору
 
   для: Красная_шляпа   (05.02.2011 в 15:05)
 

потому что не существует элемента массива $_GET с индексом id.

Даже если передать index.php?id=2
На том хостинге где php 5.33 Возникает ошибка.
С isset($_GET["id"]) не возникает.

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 15:21)   письмо автору
 
   для: Красная_шляпа   (05.02.2011 в 15:05)
 

потому что не существует элемента массива $_GET с индексом id.

Даже если передать index.php?id=2
На том хостинге где php 5.33 Возникает ошибка.
С isset($_GET["id"]) не возникает.

  Ответить  
 
 автор: neadekvat   (05.02.2011 в 15:22)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 15:21)
 

Может, уже покажите ошибку?

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 15:24)   письмо автору
 
   для: neadekvat   (05.02.2011 в 15:22)
 

Notice: Undefined index: id

Хотя index.php?id=2 id я передавал

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 15:22)   письмо автору
 
   для: Красная_шляпа   (05.02.2011 в 15:05)
 

удал. повторное сообщение.

  Ответить  
 
 автор: Косорылый   (05.02.2011 в 15:13)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 15:00)
 

Где-то уже писал:
$id=!empty($_GET['id']) ? intval($_GET['id']) : NULL;

  Ответить  
 
 автор: Trianon   (05.02.2011 в 15:25)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 15:00)
 

диагностика ошибок от версии php не зависит.
А скрипт плохой, уж коль скоро обращается к элементу массива без предварительной проверки, существует этот элемент или нет.

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 15:28)   письмо автору
 
   для: Trianon   (05.02.2011 в 15:25)
 

Скрипт я сразу подправил.
Но на домашнем компьютере и на хостинге бестхостер ошибки не выходят.
А на тот который я перешёл вчера эти ошибки выводятся. Весь мой сайт покрылся одними ошибками =)

  Ответить  
 
 автор: Trianon   (05.02.2011 в 15:33)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 15:28)
 

То что на хостинге ошибки не выводятся - это еще можно как-то по обывательски оправдать.
Все же вываливать на ни в чем неповинного посетителя сайта кучу ошибок как минимум странно, да и вредно - уйдет же и не вернется, и будет прав.

А вот то, что ошибки не выводятся на собственном компе - не оправдывается ничем.

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

И тут одно из двух.
Либо регистрировать ошибки в лог-файл, подавляя вывод. И тогда этот лог-файл придется регулярно просматривать.
Либо таки оставлять вывод ошибок открытым.

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 15:41)   письмо автору
 
   для: Trianon   (05.02.2011 в 15:33)
 

На хостинге и на компе вывод ошибок включён. Так же в скрипте в самом начале стоит строчка error_reporting(E_ALL);

И ошибки выводятся. Но нет никаких ошибок связанных с тем что я писал в начале.

  Ответить  
 
 автор: Trianon   (05.02.2011 в 15:43)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 15:41)
 

>На хостинге и на компе вывод ошибок включён. Так же в скрипте в самом начале стоит строчка error_reporting(E_ALL);
>
>И ошибки выводятся. Но нет никаких ошибок связанных с тем что я писал в начале.

Был бы включен - выводились бы и на компе.

И включать, кстати, нужно не функцией в скритпе, а строкой в конфиге.
В крайнем случае - в .htaccess

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 15:55)   письмо автору
 
   для: Trianon   (05.02.2011 в 15:43)
 

Домашний компьютер. Денвер 3:

<?
ini_set
('error_reporting'1);
error_reporting(E_ALL|E_NOTICE); 
$id=$_GET['id'];
?>

Ошибок нет

Хостинг с php 5.33:


<?
ini_set
('error_reporting'1);
error_reporting(E_ALL|E_NOTICE); 
$id=$_GET['id'];
?>

ошибка Notice: Undefined index: id in /usr/home/webcam/htdocs/test2.php on line 4

  Ответить  
 
 автор: neadekvat   (05.02.2011 в 16:02)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 15:55)
 

Вам несколько раз показали, как надо исправить.

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 16:07)   письмо автору
 
   для: neadekvat   (05.02.2011 в 16:02)
 

я спрашиваю не как исправить. А почему на домашнем компьютере с php 5.31 И на хостинге бестхостер с php 5(не помню точно) Ошибок из-за $id=$_GET['id']; не возникает А на новом с php они есть?

  Ответить  
 
 автор: neadekvat   (05.02.2011 в 16:09)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 16:07)
 

И на это вам тоже ответили.
Это не ошибка, а предупреждение, что вы обращаетесь к несуществующему индексу.
Сделайте print_r($_GET), и если там есть элемент с индексом id, значит, баг, что ж еще остается.

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 16:14)   письмо автору
 
   для: neadekvat   (05.02.2011 в 16:09)
 

вывело:

Array ( ) Notice: Undefined index: id in /usr/home/webcam/htdocs/test2.php on line 5

  Ответить  
 
 автор: neadekvat   (05.02.2011 в 16:15)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 16:14)
 

Ну, пустой массив - предупреждение по делу.

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 16:18)   письмо автору
 
   для: neadekvat   (05.02.2011 в 16:15)
 

А как отключить вывод этих ошибок? И как включить вывод на своём компьютере?

  Ответить  
 
 автор: neadekvat   (05.02.2011 в 16:22)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 16:18)
 

На рабочем (на хосте) ставите error_reporting(0); На домашнем - error_reporting(E_ALL);

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 16:24)   письмо автору
 
   для: neadekvat   (05.02.2011 в 16:22)
 

На рабочем (на хосте) ставите error_reporting(0); - так я не буду видеть другие важные ошибки
На домашнем - error_reporting(E_ALL); - Пробовал эти ошибки не отображаются

  Ответить  
 
 автор: neadekvat   (05.02.2011 в 16:27)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 16:24)
 

Не понял.. Вы же на домашнем будете отрабатывать, зачем на хосте выводить ошибки и предупреждения?

Вам предложили еще одну форму записи - тоже не работает?
Создайте отдельную страницу, новую, чистую, девственную test.php
Введите такие строки:
<?php
error_reporting
(E_ALL);
echo 
$var;
$var = array();
echo 
$var['id'];

Что выводит?

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 16:30)   письмо автору
 
   для: neadekvat   (05.02.2011 в 16:27)
 

Notice: Undefined variable: var in Z:\home\proekt9.ru\www\test2.php on line 3
Notice: Undefined index: id in Z:\home\proekt9.ru\www\test2.php on line 5

  Ответить  
 
 автор: neadekvat   (05.02.2011 в 16:31)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 16:30)
 

Вот видите. Все у вас выводит на компе.
А значит, вы неправильно выставляете уровень предупреждений.
Либо, например, выставляете в начале файлв в E_ALL, а потом где-то в середине у вас выставляется в 0 или еще во что-нибудь.

  Ответить  
 
 автор: cheops   (05.02.2011 в 16:28)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 16:18)
 

Найдите конфигурационный файл php.ini, а в нем директиву error_reporting, отключить вывод сообщений можно исправив значение директивы на
error_reporting = E_ALL & ~E_NOTICE

включить
error_reporting = E_ALL

На хостинге, редактирование файла php.ini недоступно, можно управлять уровнем ошибок через функцию error_reporting()
<?php
  error_reporting
(E_ALL & ~E_NOTICE); 
?>


ветку от сюда перенес

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 16:44)   письмо автору
 
   для: cheops   (05.02.2011 в 16:28)
 

У меня в компьютере в php.ini error_reporting = E_ALL & ~E_NOTICE
А на хостинге error_reporting = E_ALL
Правильно я понял?

  Ответить  
 
 автор: cheops   (05.02.2011 в 16:45)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 16:44)
 

Да, правильно.

  Ответить  
 
 автор: Trianon   (05.02.2011 в 18:46)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 15:55)
 

попробуйте переписать тестовый скрипт следующим образом:
<?php
ini_set
('display_errors'1);
error_reporting(E_ALL|E_NOTICE);
$id=$_GET['id'];
echo 
'<br>php version: '.PHP_VERSION.'<br>$_GET: ';
var_dump($_GET);

?>



BTW. Как именно у Вас по умолчанию расставлены переменные конфигурации, можно узнать с помощью функции ini_get() .
Или посмотреть в фиолетовой странице php_info() - так даже проще.

  Ответить  
 
 автор: BlueWolf   (05.02.2011 в 16:22)   письмо автору
 
   для: Trianon   (05.02.2011 в 15:43)
 

Как включить через .htaccess?

  Ответить  
 
 автор: neadekvat   (05.02.2011 в 15:45)   письмо автору
 
   для: BlueWolf   (05.02.2011 в 15:41)
 

У вас там не несколько ли копий скрипта?
А то и ошибки то включины - а не видно, и скрипт вы исправляете - а предупреждение все равно лезет.
Не бывает таких чудес. Только невнимательность.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования