Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Не пойму что означает эта ошибка?


Автор: terya 6.9.2010, 20:09
есть у меня в .htaccess такие строчки
Код

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?params=$1 [L]

в index.php
Код

<?php
$GET = array();
$params = explode('/', trim($_GET['params'], '/'));    
for($x=0; $x<=count($params); $x++)$GET[] = $params[$x];
    if ($GET[0] == 'auth'){include 'pages/auth.php';}
    elseif ($GET[0] == 'about'){include 'about.php';}    
    else include 'pages/main.php';
?>

я использую это для того, чтобы был "красивее урл"
И у меня появляется ошибка
Notice: Undefined index: params in /srv/www/vhosts/site.ru/httpdocs/index.php on line 3 Notice: Undefined offset: 1 in /srv/www/vhosts/site.ru/httpdocs/index.php on line 4 

Что это такое? И как это исправить?

Автор: Muerto 6.9.2010, 20:15
Код

error_reporting(0);


Или менять код...

Код

$GET = array();


нафиг убрать register_globals в Ini ->off

И добавить проверку на 
Код

if(isset($_GET['params'])){
//сюда ваш код
}

Автор: SneG0K 6.9.2010, 20:22
terya, смотри. Ты в начале скрипта присвоил $_GET пустой массив. Строкой ниже обратился к $_GET['params'], которой не существует. Отсюда и Нотис

Добавлено через 1 минуту и 36 секунд
Ой туплю. Ты присвоил $GET = array(). Но всеравно, эта ошибка обозначает что индекс params не существует в массиве $_GET

Добавлено через 2 минуты и 32 секунды
То-же самое и со вторым нотисом. Элемент под номером 1 не существует в массиве $params

Автор: enoff 6.9.2010, 20:26
terya, 
Цитата(Muerto @  6.9.2010,  21:15 Найти цитируемый пост)
error_reporting(0);

при разработке ни в коем случае.
Во второй строчке вы массив $_GET делаете пустым, а потом пытаетесь использовать get параметры из этого массива.
Зачем трогать массив $_GET? Сохраните значение в переменную и дальше используйте ее.
Проверяйте на наличие значения в массиве - isset().

Цитата(terya @  6.9.2010,  21:09 Найти цитируемый пост)
$params

register_globals?

Автор: SneG0K 6.9.2010, 20:28
Цитата(enoff @  6.9.2010,  19:26 Найти цитируемый пост)
Во второй строчке вы массив $_GET делаете пустым

Обратите внимание, что там $GET без префикса.
Цитата(enoff @  6.9.2010,  19:26 Найти цитируемый пост)
register_globals? 

Нет, массив $params в третьей строчке вполне естественным путем появляется

Автор: terya 6.9.2010, 20:28
Цитата

эта ошибка обозначает что индекс params не существует в массиве $_GET

с этой ошибкой вроде разобрался проверкой
Код

if(isset($_GET['params'])){

а с этой никак
Notice: Undefined offset: 1 in /srv/www/vhosts/site.ru/httpdocs/index.php on line 4
она указывает на строчку
Код

for($x=0; $x<=count($params); $x++)$GET[] = $params[$x];

Автор: SneG0K 6.9.2010, 20:31
Смотри. В массивах отсчет элементов начинается с нуля. Т.е. если в массиве $params три элемента, то у первого элемента индекс будет 0, у второго 1, у третьего 2.
Код

<?php
$array = array('one', 'two', 'three');
echo 'Array length:' . count($array);
echo $array[0];
echo $array[1];
echo $array[2];
?>

Проще говоря в твоем коде
Код

for($x=0; $x<=count($params) - 1; $x++)$GET[] = $params[$x];

Автор: Muerto 6.9.2010, 20:33
terya, 
С токи зрения оптимизации стоит делать
Код

$arlength=count($params);
for($x=0; $x<$arlength; $x++)$GET[] = $params[$x];


А вообще имхо здесь умней использовать foreach

Код

foreach ($params as $key=>$value){
$GET[] = $value;
}


Кстати пардон за $GET=array(); проблем нету...
Не заметил что это не $_GET

Автор: terya 6.9.2010, 20:38
Спасибо, все получилось. Сделал, и как рукой сняло
Код

foreach ($params as $key=>$value){
$GET[] = $value;
}

Автор: IgorIV 6.9.2010, 20:39
Я только прочитать успел smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)