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

Форум PHP

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

 

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

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

тема: Помогите исправить проблему с функцией обработки ошибок - теряются GET-параметры
 
 автор: Z3RO   (03.05.2011 в 18:21)   письмо автору
 
 

Вобщем у меня есть следующая функция:
function error($n, $url=''){
global $home;
global $absolutpath;
if($url == '')
$url = $absolutpath;
if(substr_count($url, '?') > 0)
$end = '&error=' . $n;
else
$end = '?error=' . $n;
$out = $home . $url . $end;
$result = header("Location: " . $out . "");
return $result;
}

Почему при передаче $url = '/guestbook/?admclub';
Функция переадресовывает на просто /guestbook

  Ответить  
 
 автор: Z3RO   (03.05.2011 в 18:27)   письмо автору
 
   для: Z3RO   (03.05.2011 в 18:21)
 

$home -- адрес сайта (http://site.ru)
$absolutpath -- путь к текущей страницы от корневой директории

  Ответить  
 
 автор: cheops   (03.05.2011 в 18:45)   письмо автору
 
   для: Z3RO   (03.05.2011 в 18:21)
 

Действительно страннно, у меня функция, после минимальной модификации (убрал header), возвращает http://site.ru/guestbook/?admclub&error=1
<?php
function error($n$url=''){ 
  global 
$home
  global 
$absolutpath
  if(
$url == ''
    
$url $absolutpath
  if(
substr_count($url'?') > 0
    
$end '&error=' $n
  else 
    
$end '?error=' $n
  
$out $home $url $end
  
$result "Location: " $out
  return 
$result
}
$home "http://site.ru";
$url '/guestbook/?admclub';
echo 
error(1$url);
?>

  Ответить  
 
 автор: Z3RO   (03.05.2011 в 18:55)   письмо автору
 
   для: cheops   (03.05.2011 в 18:45)
 

Вот проблемное обращение к функции:

$type = (isset($_GET['admclub']) ? '2' : '1');
$t = ($type == 2 ? '?admclub' : '');
echo error('15', '/guestbook/index.php' . $t .'');

  Ответить  
 
 автор: Z3RO   (03.05.2011 в 19:52)   письмо автору
 
   для: Z3RO   (03.05.2011 в 18:55)
 

Помогите пожалуйста если кто знает как исправить проблему...

  Ответить  
 
 автор: cheops   (03.05.2011 в 20:13)   письмо автору
 
   для: Z3RO   (03.05.2011 в 19:52)
 

Скорее всего дело не в этой функции. Возьмите следующий скрипт и обратитесь к нему задав GET-параметр ?admclub. Что он возвращает?
<?php 
function error($n$url=''){  
  global 
$home;  
  global 
$absolutpath;  
  if(
$url == '')  
    
$url $absolutpath;  
  if(
substr_count($url'?') > 0)  
    
$end '&error=' $n;  
  else  
    
$end '?error=' $n;  
  
$out $home $url $end;  
  
$result "Location: " $out;  
  return 
$result;  

$home "http://site.ru"
$type = (isset($_GET['admclub']) ? '2' '1'); 
$t = ($type == '?admclub' ''); 
echo 
error('15''/guestbook/index.php' $t .'');
?>

  Ответить  
 
 автор: Z3RO   (03.05.2011 в 20:21)   письмо автору
 
   для: cheops   (03.05.2011 в 20:13)
 

Выводит ошибку
EntityRef: expecting ';'
При изменении 7 строки на
$end = '&amp;error=' . $n;
Возвращает строку
Location: http://site/guestbook/index.php?admclub&error=1

  Ответить  
 
 автор: cheops   (03.05.2011 в 20:28)   письмо автору
 
   для: Z3RO   (03.05.2011 в 20:21)
 

Вам такой URL и нужен?

  Ответить  
 
 автор: Z3RO   (03.05.2011 в 20:29)   письмо автору
 
   для: cheops   (03.05.2011 в 20:28)
 

Да, но функция перекидывает на /guestbook/index.php?
Может скинуть вам весь код?

  Ответить  
 
 автор: cheops   (03.05.2011 в 20:33)   письмо автору
 
   для: Z3RO   (03.05.2011 в 20:29)
 

Значит где-то теряется параметр admclub, нужно его проверять до вызова функции.

  Ответить  
 
 автор: Z3RO   (03.05.2011 в 20:41)   письмо автору
 
   для: cheops   (03.05.2011 в 20:33)
 

Может больший кусок кода скажет вам больше?

// Уничтожение сообщений из базы после устарения
mysql_query("DELETE FROM `guestbook` WHERE (`del` < $time - $fulldel) AND (`del` != '');");

// Проверка режима(обычный/админ-клуб)
$type = (isset($_GET['admclub']) ? '2' : '1');
$t = ($type == 2 ? '?admclub' : '');
if($type == 2)
echo error('1');
// Если режим админклуба, делаем проверку на права доступа
if($type == 1 || ($type == 2 && $rights >= 1))
{
// Добавление новых сообщений
if(($user_id && $_POST['text']) || (!$user_id && $_POST['text'] && $_POST['name']))
{
$text = escstr($_POST['text']);
$name = escstr($_POST['name']);
$type = $_POST['type'];
// Проверка на существование сообщения
$prov = mysql_num_rows(mysql_query("SELECT * FROM `guestbook` WHERE `text` = '" . $text . "' AND `from` = '" . $user_id . "';"));
if(!$prov)
{
// Проверка на флуд
$timeprov = mysql_num_rows(mysql_query("SELECT * FROM `guestbook` WHERE `date` >= $time - 5 AND `from` = $user_id;"));
if(!$timeprov)
{
if($user_id)
$req = mysql_query("INSERT INTO `guestbook` VALUES(0, '" . $user_id . "', '', '" . $text . "', '" . $time . "', '', '" . $type . "', '" . $user_ip . "', '" . $agn . "', '');");
else
$req = mysql_query("INSERT INTO `guestbook` VALUES(0, '', '" . $name . "', '" . $text . "', '" . $time . "', '', '1', '" . $user_ip . "', '" . $agn . "', '');");
if($req)
{
mysql_query("UPDATE `users` SET `guestbook` = `guestbook`+1 WHERE `id` = $user_id;");
if($type == 2)
header("Location: " . $home . "/guestbook/?admclub");
else
header("Location: " . $home . "/guestbook");
}
// Вывод ошибок
else
echo error('4');
}
else
//////////////////////
// ПРОБЛЕМНЫЙ УЧАСТОК 1
//////////////////////
echo error('15', '/guestbook/index.php' . $t .'');
}
else
//////////////////////
// ПРОБЛЕМНЫЙ УЧАСТОК 2
//////////////////////
echo error('14', '/guestbook/index.php' . $t .'');
}
else{
// Переключатель режимов
if($rights >= 1)
{
if($type == 1)
echo '<div class="zag">Гостевая | <a href="?admclub">Админ-клуб</a></div>';
else
echo '<div class="alarm"><a href="?">Гостевая</a> | Админ-клуб</div>';
}

  Ответить  
 
 автор: cheops   (03.05.2011 в 20:45)   письмо автору
 
   для: Z3RO   (03.05.2011 в 20:41)
 

Вот перед этим проблемным участком напишите
<?php
  
echo "t = ".$t;
  exit();
?>
Каково состояние переменной $t?

  Ответить  
 
 автор: Z3RO   (03.05.2011 в 20:53)   письмо автору
 
   для: cheops   (03.05.2011 в 20:45)
 

Да, вы правы. Проблема с $t значение $t = NULL;

  Ответить  
 
 автор: Z3RO   (03.05.2011 в 20:55)   письмо автору
 
   для: Z3RO   (03.05.2011 в 20:53)
 

Нашел где ошибка.
Если
$t = ($type == 2 ? '?admclub' : '');
заменить на
$t = '?admclub';, то всё ОК.
Спасибо за помощь.

  Ответить  
 
 автор: cheops   (03.05.2011 в 20:58)   письмо автору
 
   для: Z3RO   (03.05.2011 в 20:55)
 

Тогда независимо от того, есть установлен параметр $_GET['admclub'] или нет, он будет передаваться. У вас достаточно хитрая и запутанная система проверки существования ?admclub. Хотя на мой взгляд вроде бы рабочая, странно, что у вас параметр admclub теряется (если он, конечно, изначально передается скрипту).

  Ответить  
 
 автор: Z3RO   (03.05.2011 в 21:02)   письмо автору
 
   для: cheops   (03.05.2011 в 20:58)
 

Изначально он передаётся, поскольку переключатель режимов работает без ошибок.

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

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