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

Форум PHP

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

 

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

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

тема: Неопределённые переменные далее Undefined index: (как с ними боротся!)
 
 автор: Санька   (12.11.2007 в 01:52)   письмо автору
 
 

Мне эти ошибки порядком надоели. Допустим у меня не определённая переменная si я пишу так $_POST['si'] мне в ответ новая ошибка Undefined index: si или сразу такая ошибка, как с ними боротся не представляю, помогите разрулить эти ошибки тоже самое в каждой странице скрипта имеются.

   
 
 автор: RV   (12.11.2007 в 06:46)   письмо автору
 
   для: Санька   (12.11.2007 в 01:52)
 


<?
$si 
= isset($_POST['si']) ? $_POST['si'] : FALSE;

таким способом можно обабатывать все внешние переменные

   
 
 автор: Санька   (12.11.2007 в 10:06)   письмо автору
 
   для: RV   (12.11.2007 в 06:46)
 

Такое писать нельзя у меня в одном файле хранятся такие вещи. Пример:
if (isset($_GET['id])) $id=$_GET['id'];
В GET и POST свои в SESSION свои.

   
 
 автор: RV   (12.11.2007 в 10:18)   письмо автору
 
   для: Санька   (12.11.2007 в 10:06)
 

Давайте разные имена переменным. делов то

   
 
 автор: Санька   (12.11.2007 в 10:26)   письмо автору
 
   для: RV   (12.11.2007 в 10:18)
 

Не понял, они у меня разные. Если бы были одинаковые как бы у меня скрипт функционировал.

   
 
 автор: RV   (12.11.2007 в 10:30)   письмо автору
 
   для: Санька   (12.11.2007 в 10:26)
 

Что же тогда нельзя писать?
Я постоянно так пишу и никаких проблем

   
 
 автор: Gemorroj   (12.11.2007 в 10:44)   письмо автору
 
   для: RV   (12.11.2007 в 10:30)
 

@$_POST['si']

   
 
 автор: sim5   (12.11.2007 в 10:46)   письмо автору
 
   для: Gemorroj   (12.11.2007 в 10:44)
 

Да уж тогда лучше подавить вывод ошибок, чем у каждой такое писать.

   
 
 автор: Санька   (12.11.2007 в 10:49)   письмо автору
 
   для: sim5   (12.11.2007 в 10:46)
 

До меня уже подавили, с ума сойти писарь какой то писал, теперь перебирать месяц надо, все под блок втыкнул.

   
 
 автор: Санька   (12.11.2007 в 10:47)   письмо автору
 
   для: RV   (12.11.2007 в 10:30)
 

Не знаю ошибками забрасывает и уже не предупреждениями.

   
 
 автор: Санька   (12.11.2007 в 10:52)   письмо автору
 
   для: Санька   (12.11.2007 в 10:47)
 

За счет этого блока ошибок, уязвимости не будет?

   
 
 автор: sim5   (12.11.2007 в 11:07)   письмо автору
 
   для: Санька   (12.11.2007 в 10:52)
 

Вы с кем рассуждаете Александр ?) Вы можете подавить вывод ошибок на экран:

<?
error_reporting
(E_ALL);
ini_set("display_errors""off");

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

   
 
 автор: Санька   (12.11.2007 в 11:27)   письмо автору
 
   для: sim5   (12.11.2007 в 11:07)
 

Да разговаривать не с кем вот и пишу сам себе. Блочить ошибки мне и самому не хочется скрипт то для себе не будет его не откроется у меня и сайт давай лучше разберёмся с начала. На главной ошибка Undefined variable: id если я не авторизован, после авторизации ошибка изчезает.
Вот то место ошибки:
if ($id=="avtorized" && $login !="" && $pass !="")

   
 
 автор: sim5   (12.11.2007 в 11:37)   письмо автору
 
   для: Санька   (12.11.2007 в 11:27)
 

Ну можно проверить вначале, устновлена ли id, и если установлена, то производить эту проверку. А лучше сразу определить ее еще до авторизации

<?
$id 
'';
//тело кода
//а потом где-то
if ($id=="avtorized" && $login !="" && $pass !="")

Тогда это предупреждение не будет возникать, это не ошибка.

   
 
 автор: Санька   (12.11.2007 в 11:46)   письмо автору
 
   для: sim5   (12.11.2007 в 11:37)
 

Если подставляю $id=""; то ошибка изчезает и я не могу авторизаваться. У меня тут только предупреждения.

   
 
 автор: Loneliness   (12.11.2007 в 11:41)   письмо автору
 
   для: Санька   (12.11.2007 в 11:27)
 

А прописать переменную по умолчанию не вариант разве?

   
 
 автор: Санька   (12.11.2007 в 11:49)   письмо автору
 
   для: Loneliness   (12.11.2007 в 11:41)
 

Как понять по умолчанию? И как прописать?

   
 
 автор: sim5   (12.11.2007 в 12:01)   письмо автору
 
   для: Санька   (12.11.2007 в 11:49)
 

По умолчанию id = '' - пустая. Происходит авторизация и, если авторицазия успешная, то вы этой id присваиваете значение. Собственно и все. Видимо у вас после if неверно или само условие неправльно составлено (не отвечает логике).

   
 
 автор: Санька   (12.11.2007 в 12:09)   письмо автору
 
   для: sim5   (12.11.2007 в 12:01)
 

Ёкаламане, работает, я ник то сменил :) сейчас новое предупреждение напишу.

   
 
 автор: sim5   (12.11.2007 в 12:13)   письмо автору
 
   для: Санька   (12.11.2007 в 12:09)
 

Ну вот этого я не заню :) Проверять код видимо, он ведь ваш и у вас.

   
 
 автор: Санька   (12.11.2007 в 12:19)   письмо автору
 
   для: sim5   (12.11.2007 в 12:13)
 

.

   
 
 автор: Санька   (12.11.2007 в 12:46)   письмо автору
 
   для: sim5   (12.11.2007 в 12:13)
 

Сделал так $id="avtorized";
Теперь все работает, только появилось новое предупреждение Undefined variable: login а с ним что делать?

   
 
 автор: Санька   (12.11.2007 в 12:17)   письмо автору
 
   для: sim5   (12.11.2007 в 12:01)
 

.

   
 
 автор: CrazyAngel   (12.11.2007 в 13:05)   письмо автору
 
   для: Санька   (12.11.2007 в 01:52)
 

эм.... читый код хотите? :)

<?php
$si 
array_key_exists('si'$_POST)  ? $_POST['si'] : false;
?>

и это не ошибки, а предупреждения

   
 
 автор: cheops   (12.11.2007 в 13:35)   письмо автору
 
   для: Санька   (12.11.2007 в 01:52)
 

Поместите в начало скрипта строчку
<?php
  Error_Reporting
(E_ALL & ~E_NOTICE);
?>

   
 
 автор: Санька   (12.11.2007 в 13:53)   письмо автору
 
   для: cheops   (12.11.2007 в 13:35)
 

Любой сможет заблочить предупреждения, а разрулить слабо? :)

   
 
 автор: RV   (12.11.2007 в 14:58)   письмо автору
 
   для: Санька   (12.11.2007 в 13:53)
 

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

   
 
 автор: Gemorroj   (12.11.2007 в 15:48)   письмо автору
 
   для: RV   (12.11.2007 в 14:58)
 

Если ошибки не влияют на надежность скрипта, то вполне можно просто подавить вывод ошибок.

   
 
 автор: Санька   (12.11.2007 в 17:50)   письмо автору
 
   для: Gemorroj   (12.11.2007 в 15:48)
 

Думаю тему закрываем, для себя я нашёл выход.

   
 
 автор: cheops   (12.11.2007 в 17:47)   письмо автору
 
   для: Санька   (12.11.2007 в 13:53)
 

>Любой сможет заблочить предупреждения, а разрулить слабо? :)
Во-первых не предупреждения, а замечания, во-вторых если вам нравится увеличивать объём кода и снижать его читабельность в угоду глупому PHP-интерпретатору - используйте isset(), что уже было посоветовано выше.

   
Rambler's Top100
вверх

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