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

Форум PHP

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

 

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

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

тема: Проблема с ПЕРЕМЕННЫМИ ГЕТ или отделяя мух от котлет, не могу понять где мухи а где котлеты
 
 автор: BMW   (16.07.2009 в 15:39)   письмо автору
 
 

Здравствуйте! При настройке вывода ошибки с помощью .htaccess то
получил на нормально работающем сайте scansorium.com целый букет 'страшных' ошибок!!!
одного типа:
Use of undefined constant xxxxx - assumed
Я подумал что это как то связано с выводом ошибок, а вернее с файлом
.хтаксэс, но после удаления желаемого результата не последовало. и до
сих пор не могу понять как ГЕТ переменная не может быть
определенна??! это ж не джава ее VARом объявлять!! Помогите,
пожалуйста! СПАСИБО

  Ответить  
 
 автор: Волки   (16.07.2009 в 16:31)   письмо автору
 
   для: BMW   (16.07.2009 в 15:39)
 

Грамотно надо писать потому что.
Данная "ошибка" появляется если использовть $_GET[alpha] вместо $_GET['alpha'].

  Ответить  
 
 автор: BMW   (16.07.2009 в 16:39)   письмо автору
 
   для: Волки   (16.07.2009 в 16:31)
 

это же не приципиально??! тем более не помогло!!!

  Ответить  
 
 автор: BMW   (16.07.2009 в 17:17)   письмо автору
 
   для: BMW   (16.07.2009 в 16:39)
 

Сначала думал это из-за сложности скрипта.... однако написав совсем
ерундовый скрипт вида
<?
if (!$_GET[y])
$_GET[y]='uuuuuuБЛИН';
echo 'lf';
echo $_GET[y];
?>

Выводит:
Notice: Use of undefined constant y - assumed 'y' in /home/www/test.php on line 2

Notice: Undefined index: y in /home/www/test.php on line 2

Notice: Use of undefined constant y - assumed 'y' in /home/www/test.php on line 3
lf
Notice: Use of undefined constant y - assumed 'y' in /www/test.php on line 5
uuuuuuБЛИН

  Ответить  
 
 автор: Valick   (16.07.2009 в 17:27)   письмо автору
 
   для: BMW   (16.07.2009 в 17:17)
 

Котлет нет... мухи погрызли
<?php
if(isset($_GET['y'])) $y=$_GET['y']; else $y="uuuuuBLIN";
echo 
$y;
?>

  Ответить  
 
 автор: BMW   (16.07.2009 в 19:26)   письмо автору
 
   для: Valick   (16.07.2009 в 17:27)
 

а как это переписать?
if($_GET['id_menu']){$_GET['main_type']='article';}

  Ответить  
 
 автор: aetern   (16.07.2009 в 20:22)   письмо автору
 
   для: BMW   (16.07.2009 в 19:26)
 

код написан верно зачем его переписывать? вопрос в том, насколько это необходимо присваивать переменной GET значение в коде, а не стандартным путем: file.php?main_type=article, может проще использовать обычные переменные, а не глобальные?

  Ответить  
 
 автор: root   (16.07.2009 в 20:26)   письмо автору
 
   для: aetern   (16.07.2009 в 20:22)
 

Вы тоже из племени не боящихся notice?

  Ответить  
 
 автор: aetern   (16.07.2009 в 20:37)   письмо автору
 
   для: root   (16.07.2009 в 20:26)
 

Я не вижу смысла в изменении значения переменной GET
if($_GET['id_menu']){$_GET['main_type']='article';}


а к вопросу о переписать, то может вот так:

if($_GET['id_menu'])
  {
  $main_type = 'article';
  }
  else
      {
    $main_type = $_GET['main_type'];
    }

  Ответить  
 
 автор: root   (16.07.2009 в 20:45)   письмо автору
 
   для: aetern   (16.07.2009 в 20:37)
 

Вы видели что выше написал Valick?
Тяжело сделать по аналогии?

hint:
А если не будет ключа id_menu в массиве $_GET?

  Ответить  
 
 автор: BMW   (16.07.2009 в 20:35)   письмо автору
 
   для: aetern   (16.07.2009 в 20:22)
 

дело в том что все отлично работало, когда хостился у одного провайдера, потом решил на более лучший хостинг перейти к другому провайдеру....сначало все хорошо было, однако как только попытался экранизировать ошибки через .htaccess появились проблемы с переменными, тогда я его удалил а проблемы остались....Я б конечно переписал, но скрипт довольно сложный многосоставный....я все таки еще верю что существуют более щядящие способы... может что-либо можно сделать через .htaccss ??

  Ответить  
 
 автор: Valick   (16.07.2009 в 23:21)   письмо автору
 
   для: BMW   (16.07.2009 в 19:26)
 

смысла в {$_GET['main_type']='article';} вообще я не вижу... для меня $_GET - это всё то что пришло из браузера, а присваивать ему какое-то значение несколько бредово.
Переписать трудно, ибо осмыслить это трудновато.
но вот то что в большинстве случаев вместо if($_GET['id_menu']) должно быть if(isset($_GET['id_menu'])) - л.д.м. аксиома.

  Ответить  
 
 автор: BMW   (16.07.2009 в 23:34)   письмо автору
 
   для: Valick   (16.07.2009 в 23:21)
 

спасибо с этим понял, а вот как быть с отрицанием? if(!isset($_GET['id_menu'])) это снова выдает ошибку!!! как же сказать условие по всем канонам ЕСЛИ НЕ СУЩЕСТВУЕТ ПЕРЕМЕННОЙ ТО..?

  Ответить  
 
 автор: sim5   (16.07.2009 в 23:47)   письмо автору
 
   для: BMW   (16.07.2009 в 23:34)
 

Какую ошибку? В if(!isset($_GET['id_menu'])) как таковой ошибки нет. Вы можете вообще написать так: if(!$_GET['id_menu']), и это будет тоже самое при ее отсутствии.

  Ответить  
 
 автор: Trianon   (16.07.2009 в 23:55)   письмо автору
 
   для: BMW   (16.07.2009 в 23:34)
 

>спасибо с этим понял, а вот как быть с отрицанием? if(!isset($_GET['id_menu'])) это снова выдает ошибку!!! как же сказать условие по всем канонам ЕСЛИ НЕ СУЩЕСТВУЕТ ПЕРЕМЕННОЙ ТО..?

Абсолютно правильно пишете. Если после этой строки стоит хоть какой нибудь оператор - никакой ошибки не будет.

  Ответить  
 
 автор: BMW   (17.07.2009 в 07:38)   письмо автору
 
   для: Trianon   (16.07.2009 в 23:55)
 

Уважаемые! Так что же делать? имею "правильный" скрипт:
<?session_start();
include(
"$_SERVER[DOCUMENT_ROOT]/server.info");
if(!(
$_GET))$_GET['main_type']='main';
if(
$_GET['id_menu']){$_GET['main_type']='article';}
if(
$_GET['id'])$_GET['main_type']='katalog';
if(
$_GET['id_name']){$_GET['main_type']='katalog';$_GET['main']=$_GET['id_name'];}
include(
"$_SERVER[DOCUMENT_ROOT]/login/admin/function/show_function.php");
include(
"$_SERVER[DOCUMENT_ROOT]/login/admin/function/serv_function.php");
datebase($exe_db);
?>


и на этом участке выходят следующие ошибки:
Notice: Undefined index: id_menu in /home/u188993/www/index.php on line 4

Notice: Undefined index: id in /home/u188993/www/index.php on line 5

Notice: Undefined index: id_name in /home/u188993//www/index.php on line 6

Notice: Undefined index: id_menu in /home/u188993/www/part_html_new/title/article.php on line 2

Notice: Undefined index: id_menu in /home/u188993/www/part_html_new/title/article.php on line 3

Notice: Undefined index: page in /home/u188993/www/part_html_new/title/article.php on line 3

Notice: Undefined index: id_name in /home/u188993/www/part_html_new/title/article.php on line 3

  Ответить  
 
 автор: Trianon   (17.07.2009 в 08:38)   письмо автору
 
   для: BMW   (17.07.2009 в 07:38)
 

так а где во всех этих проверках isset() ?

  Ответить  
 
 автор: BMW   (17.07.2009 в 09:19)   письмо автору
 
   для: Trianon   (17.07.2009 в 08:38)
 

...неужели это так важно!?... я всегда считал что альтернатива записи:
if(isset($_GET['bla-bla']))
является
if($_GET['bla-bla'])
И мои предположения практическим путем были потвеждены....однако вчера....Неужели теперь это не так???

  Ответить  
 
 автор: BMW   (17.07.2009 в 07:39)   письмо автору
 
   для: Trianon   (16.07.2009 в 23:55)
 

Уважаемые! Так что же делать? имею "правильный" скрипт:
<?session_start();
include(
"$_SERVER[DOCUMENT_ROOT]/server.info");
if(!(
$_GET))$_GET['main_type']='main';
if(
$_GET['id_menu']){$_GET['main_type']='article';}
if(
$_GET['id'])$_GET['main_type']='katalog';
if(
$_GET['id_name']){$_GET['main_type']='katalog';$_GET['main']=$_GET['id_name'];}
include(
"$_SERVER[DOCUMENT_ROOT]/login/admin/function/show_function.php");
include(
"$_SERVER[DOCUMENT_ROOT]/login/admin/function/serv_function.php");
datebase($exe_db);
?>


и на этом участке выходят следующие ошибки:
Notice: Undefined index: id_menu in /home/u188993/www/index.php on line 4

Notice: Undefined index: id in /home/u188993/www/index.php on line 5

Notice: Undefined index: id_name in /home/u188993//www/index.php on line 6

Notice: Undefined index: id_menu in /home/u188993/www/part_html_new/title/article.php on line 2

Notice: Undefined index: id_menu in /home/u188993/www/part_html_new/title/article.php on line 3

Notice: Undefined index: page in /home/u188993/www/part_html_new/title/article.php on line 3

Notice: Undefined index: id_name in /home/u188993/www/part_html_new/title/article.php on line 3

Я уже и не знаю что и думать...тех поддержка попыталась это связать с несовпадением версий пхп, но на удивлении они совпадают... Что же МНЕ делать!??

  Ответить  
 
 автор: sim5   (17.07.2009 в 07:49)   письмо автору
 
   для: BMW   (17.07.2009 в 07:39)
 

if($_GET['id_menu']){$_GET['main_type']='article';}
if($_GET['id'])$_GET['main_type']='katalog';
if($_GET['id_name']){$_GET['main_type']='katalog';$_GET['main']=$_GET['id_name'];}
Вы считаете правильным? В смысле синтаксиса да, в смысле логики полная глупость.
А что делать, так вместо всего этого вывести массив $_GET на экран, вы хотя бы получаете его?

  Ответить  
 
 автор: BMW   (17.07.2009 в 08:04)   письмо автору
 
   для: sim5   (17.07.2009 в 07:49)
 

Я соглашусь на счет логики...но данный момент у меня единственная задача восстановить работу сайта, пока не обращая внимание на нерациональность скрипта... Ответ про массив: добавив следующие строчку:
print_r($_GET);

получил

Array ( [main_type] => main ) 1 

  Ответить  
 
 автор: sim5   (17.07.2009 в 08:06)   письмо автору
 
   для: BMW   (17.07.2009 в 08:04)
 

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

  Ответить  
 
 автор: BMW   (17.07.2009 в 08:10)   письмо автору
 
   для: sim5   (17.07.2009 в 08:06)
 

А если запрос например:
id_menu=25&ssd=41&type_ssd=1

То:
Array ( [id_menu] => 25 [ssd] => 41 [type_ssd] => 1 [main_type] => article ) 1

Однако те вышеописанные ошибки не пропадают...

  Ответить  
 
 автор: sim5   (17.07.2009 в 08:27)   письмо автору
 
   для: BMW   (17.07.2009 в 08:10)
 

Вы напишите простой отдельный файлик, все лишь с несколькими строками:
<?
if ($_GET['as']) echo $_GET['as'];
?>
<a href="?as=25">Test</a>

забросьте на сервер, и посмотрите, тоже будет ругаться на переменную $_GET['as']?

  Ответить  
 
 автор: BMW   (17.07.2009 в 08:55)   письмо автору
 
   для: sim5   (17.07.2009 в 08:27)
 

Да ругается тем же матом при загрузки в браузере:
Notice: Undefined index: as in /home/u188993/www/index_33.php on line 2
Test

Однако при клике на ссылку пишет:
25 Test

  Ответить  
 
 автор: sim5   (17.07.2009 в 08:57)   письмо автору
 
   для: BMW   (17.07.2009 в 08:55)
 

Значит приходит все, не чего на сервер пенять, а вот так:
<?
if (isset($_GET['as'])) echo $_GET['as'];
?>

не должно и ругаться на неопределенную переменную.

PS. А какая версия РНР у вас?

  Ответить  
 
 автор: BMW   (17.07.2009 в 09:16)   письмо автору
 
   для: sim5   (17.07.2009 в 08:57)
 

да действительно не ругается....спасибо...получается надо все условия переписать.... а Версия 5.2.9.... Но меня все таки еще мучает тот вопрос...А ПОЧЕМУ ТАК СЛУЧИЛОСЬ? СКРИПТ ПРЕКРАСНО РАБОТАЛ НА МНОГИХ СЕРВЕРАХ РАЗНЫХ КОМПАНИЙ, А ТУТ РАЗ И К ПЕРЕМЕННЫМ ПРИДРАЛСЯ!?

  Ответить  
 
 автор: sim5   (17.07.2009 в 09:31)   письмо автору
 
   для: BMW   (17.07.2009 в 09:16)
 

Значит так. Не могу сказать сейчас точно о версии, но вроде бы как это была 4-ая с хвостиком. В ней, если, например, не объявить массив до цикла, а непосредственно в цикле начать загружать этот массив данными, то есть:
for(...) {
$array[] = ...
}
получим ошибку о неопределенной переменной.
Есть isset, проверяйте. А то, что у вас даже при isset есть ошибки, говорит о том, что у вас бардак в логике переменных. От сюда и проблемы.
Вы сами подумайте, какой смысл отправлять в запросе переменную, если вы потом в скрипте присваиваете ей иной параметр? Можно еще понять, когда вы обработали принятую переменную, и результат этой обработки присвоили ей же, но то что вы делаете, ни в какие ворота.

  Ответить  
 
 автор: ride   (17.07.2009 в 08:35)   письмо автору
 
   для: BMW   (17.07.2009 в 08:10)
 

<?session_start();
include(
"$_SERVER[DOCUMENT_ROOT]/server.info");
if(!(
$_GET))$_GET['main_type']='main';
if(isset(
$_GET['id_menu'])){$_GET['main_type']='article';}
if(isset(
$_GET['id']))$_GET['main_type']='katalog';
if(isset(
$_GET['id_name'])){$_GET['main_type']='katalog';$_GET['main']=$_GET['id_name'];}
include(
"$_SERVER[DOCUMENT_ROOT]/login/admin/function/show_function.php");
include(
"$_SERVER[DOCUMENT_ROOT]/login/admin/function/serv_function.php");
datebase($exe_db);
?> 


PS А что вы ожидали от приведенного вами примера?

  Ответить  
 
 автор: BMW   (17.07.2009 в 08:57)   письмо автору
 
   для: ride   (17.07.2009 в 08:35)
 

Я ожидал только одного: отсутствие ошибок!!! но этого не происходиТ

  Ответить  
 
 автор: ride   (17.07.2009 в 09:23)   письмо автору
 
   для: BMW   (17.07.2009 в 08:57)
 

А если запрос например:
id_menu=25&ssd=41&type_ssd=1


То:

//у вас буду доступны 
$_GET['id_menu'],$_GET['ssd'],$_GET['type_ssd']

//и если вы допишите 
$id_menu=$_GET['id_menu'];
$ssd=$_GET['ssd'];
$type_ssd=$_GET['type_ssd'];
//то проблем у вас не будет


А если запрос например:
id_menu=25&ssd=41


То:

//у вас буду доступны только
$_GET['id_menu'],$_GET['ssd']

//и если вы допишите 
$id_menu=$_GET['id_menu'];
$ssd=_GET['ssd'];
$type_ssd=$_GET['type_ssd'];//Здесь ваш notice, так как инденс type_ssd  в $_GET не определен
//поэтому, прежде чем работать с переменной, вы должны проверить доступна ли она вообще:
if(isset($_GET['type_ssd']))//
  $type_ssd=$_GET['type_ssd'];
else $type_ssd=1;
//

  Ответить  
 
 автор: BMW   (17.07.2009 в 09:33)   письмо автору
 
   для: BMW   (16.07.2009 в 15:39)
 

Я попытался исправить в соответсвии с советами которые ВЫ мне посоветовывали и написал следующее:
<?session_start();
if(isset(
$_GET['id_menu']))$_GET['main_type']='article';
else
if(isset(
$_GET['id']))$_GET['main_type']='katalog';
else
if(isset(
$_GET['id_name'])){$_GET['main_type']='katalog';$_GET['main']=$_GET['id_name'];}
else
$_GET['main_type']='main';
?>

Ошибка неопределенной переменной пропала, однако экранизируется следующее:
Notice: Undefined index: id_menu in /home/u188993/www/part_html_new/title/article.php on line 2

Notice: Undefined index: id_menu in /home/u188993/www/part_html_new/title/article.php on line 3

Notice: Undefined index: page in /home/u188993/www/part_html_new/title/article.php on line 3

Notice: Undefined index: id_name in /home/u188993/www/part_html_new/title/article.php on line 3

  Ответить  
 
 автор: sim5   (17.07.2009 в 09:35)   письмо автору
 
   для: BMW   (17.07.2009 в 09:33)
 

Опять у вас все через задницу.

  Ответить  
 
 автор: BMW   (17.07.2009 в 09:41)   письмо автору
 
   для: sim5   (17.07.2009 в 09:35)
 

блин, ну почему? я же делаю проверку isset-ом всё(...

  Ответить  
 
 автор: sim5   (17.07.2009 в 09:44)   письмо автору
 
   для: BMW   (17.07.2009 в 09:41)
 

Я вам выше сказал почему. У вас вместо логики бардак. Переписывайте и не смешите людей. )

  Ответить  
 
 автор: ride   (17.07.2009 в 09:50)   письмо автору
 
   для: BMW   (17.07.2009 в 09:33)
 

<?session_start();
if(isset(
$_GET['id_menu']))
//вместо $_GET['main_type']='article' пишите
$main_type='article';// и дальше работайте не с  $_GET['main_type'] а с $main_type
?> 


а по поводу ошибок - думаю, ошибки вызывают другие строки - не те, которые вы привели.
покажите первые строки из файла article.php

  Ответить  
 
 автор: BMW   (17.07.2009 в 09:59)   письмо автору
 
   для: ride   (17.07.2009 в 09:50)
 

<?
$id_menu
=$_GET['id_menu'];
if(!(
$_GET['id_menu']) and !($_GET['page']) and !($_GET['id_name'])){$id_menu=4;}
if(
$id_menu){
echo 
'<title>'.$name_menu_n.'|'.$d_name.'|'.$description_menu_n.'</title>';
}
?>
ТОесть сначала нужно переменную проверять прежде ее присваивать?? так японимаю?

  Ответить  
 
 автор: sim5   (17.07.2009 в 10:01)   письмо автору
 
   для: BMW   (17.07.2009 в 09:59)
 

$id_menu не может равно $_GET['id_menu'], пока это $_GET['id_menu'] не придет от клиента - нету до этого времени такой переменной! А это значит что?

  Ответить  
 
 автор: BMW   (17.07.2009 в 10:29)   письмо автору
 
   для: sim5   (17.07.2009 в 10:01)
 

Ну это значит будет ошибка) Я ВСЕ ПОНЯЛ, СПАСИБО ))) ТЕПЕРЬ С ЭТИМИ ОШИБКАМИ ПОКОНЧЕННО....однако одна всего осталась.. но она довольно не информативная:
Fatal error: Cannot redeclare datebase() (previously declared in /home/u188993/www/login/admin/function/serv_function.php:5) in /home/u188993/login/admin/function/serv_function.php on line 26

При функции:
<?
/////////////////////////////////////////////////////////////////////////////////////////////
//////////////////&#244;&#243;&#237;&#234;&#246;&#232;&#255; &#226;&#251;&#225;&#238;&#240;&#224; &#225;&#224;&#231;&#251;/////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
function datebase($name_base)
  {
$host "xxxxxxxxxx";
$user "u188993";
$pswd "xxxxxxxxx";

// &#200;&#236;&#255; &#225;&#224;&#231;&#251; &#228;&#224;&#237;&#237;&#251;&#245;
$database $name_base;


// &#211;&#241;&#242;&#224;&#237;&#238;&#226;&#232;&#242;&#252; &#241;&#238;&#229;&#228;&#232;&#237;&#229;&#237;&#232;&#229; &#241; &#241;&#229;&#240;&#226;&#229;&#240;&#238;&#236; MySQL
@mysql_pconnect($host$user$pswd) or die("Couldn't connect to MySQL server!");
mysql_query("SET NAMES 'cp1251'"); 
mysql_query("SET collation_connection = 'cp1251_general_ci'"); 
mysql_query("SET collation_server = 'cp1251_general_ci'"); 
mysql_query("SET character_set_client = 'cp1251'"); 
mysql_query("SET character_set_connection = 'cp1251'"); 
mysql_query("SET character_set_results = 'cp1251'"); 
mysql_query("SET character_set_server = 'cp1251'");
// &#194;&#251;&#225;&#240;&#224;&#242;&#252; &#225;&#224;&#231;&#243; &#228;&#224;&#237;&#237;&#251;&#245;
@mysql_select_db($database) or die("Couldn't select database database!");
}

  Ответить  
 
 автор: ride   (17.07.2009 в 10:33)   письмо автору
 
   для: BMW   (17.07.2009 в 10:29)
 

у вас функция datebase() определена не один раз
или же вы не один раз подлючаете файл /home/u188993/login/admin/function/serv_function.php

  Ответить  
 
 автор: BMW   (17.07.2009 в 13:17)   письмо автору
 
   для: ride   (17.07.2009 в 10:33)
 

_

  Ответить  
 
 автор: BMW   (17.07.2009 в 13:17)   письмо автору
 
   для: ride   (17.07.2009 в 10:33)
 

спасииииииииииибо))) ВАМ большое - РАЗОБРАЛСЯ))

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

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