Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Траблы с присоединением 
:(
    Опции темы
doctor2k
Дата 1.6.2011, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



Здравствуйте.
Такая проблемка вылезла - присоединённые скрипты не видят содержимого $_GET. Есть сайт самописный, он содержит некоторые заметки. Я кликаю например на имя автора заметки, и сылка переправляет на 'index.php?author=username' наример. Сам index.php имеет такой вид:

Код

<%хтмл head title meta и прочее%>

<?php
здесь читается $_GET
?>

<?php
здесь формируется запрос к базе в зависимости от имени автора задаётся условие выбора, т.е. если $_GET['author'] задано, то запрос к базе принимает вид:
"SELECT * FROM posts WHERE author='username'" например. Там не только по автору сортировка идёт, но для примера сгодится. 
?>

<%хтмл head title meta и прочее%>


Так вот, второй блок <?php ?> большой, тут и запросы к мускулу, и форматирование внешнего вида получаемых данных, и т.д. Неудобно форматировать страницу в целом. И я решил вынести содержимое этого блока в отдельный файл, с последующим подключением через require_once. И вот когда я это сделал, стали отваливаться условия сортировки. То есть когда открываю index.php, всё работает. Но когда кликаю на имя автора, например, и это имя передаётся через GET, у меня открывается только один шаблон поста, причём пустой. В какую сторону копать? Открыл гугл, повтыкал на страницу, и осознал, что даже не представляю как составить запрос. Вся надежда на вас, уважаемые коллеги) заранее спасибо.
PM MAIL ICQ Skype   Вверх
bars80080
Дата 1.6.2011, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



прежде всего, стоит расписать, как происходит переход от $_GET к запросу
вот это поподробнее:
Цитата(doctor2k @  1.6.2011,  18:17 Найти цитируемый пост)
т.е. если $_GET['author'] задано, то запрос к базе принимает вид:
"SELECT * FROM posts WHERE author='username'" например



во-вторых, попробуйте навскидку заменить вставку кода с require_once() на require()
PM MAIL WWW   Вверх
doctor2k
Дата 1.6.2011, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



Цитата(bars80080 @  1.6.2011,  18:42 Найти цитируемый пост)
прежде всего, стоит расписать, как происходит переход от $_GET к запросу


Вот так:
Код

/* Сортировка по автору, категории, отправителю */
if ($_GET['tag']!='') {
    $query = "select * from ".MAIN_TABLE." WHERE tag=".$_GET['tag']; // категория
}
elseif ($_GET['pub']!='') {
    $query = "select * from ".MAIN_TABLE." WHERE publisher=".$_GET['pub']; // имя отправителя
}
elseif ($_GET['author']!='') {
    $query = "select * from ".MAIN_TABLE." WHERE author=".$_GET['author']; // имя автора
}
else {
    $query = "select * from ".MAIN_TABLE;
}
$result = mysql_query($query);

// ну и так далее
// MAIN_TABLE - константа, отвечающая за имя таблицы, вместе с другими настройками базы объявлена в conf.php который инклудится отдельно
// знаю что этот кусок кода можно и нужно оптимизировать, но пока куча других дел - потом всё будет)) так что на этот недостаток прошу не указывать и палками не бить)




Цитата(bars80080 @  1.6.2011,  18:42 Найти цитируемый пост)
во-вторых, попробуйте навскидку заменить вставку кода с require_once() на require() 

Попробую, НО: в данном конкретном случае никаких различий не вижу.. require_once() более универсальна

PM MAIL ICQ Skype   Вверх
bars80080
Дата 1.6.2011, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



теперь вставляем проверки и смотрим, что происходит:

Код

error_reporting(E_ALL|E_NOTICE);
var_dump($_GET);

if ($_GET['tag']!='') {
    $query = "select * from ".MAIN_TABLE." WHERE tag=".$_GET['tag']; // категория
}
elseif ($_GET['pub']!='') {
    $query = "select * from ".MAIN_TABLE." WHERE publisher=".$_GET['pub']; // имя отправителя
}
elseif ($_GET['author']!='') {
    $query = "select * from ".MAIN_TABLE." WHERE author=".$_GET['author']; // имя автора
}
else {
    $query = "select * from ".MAIN_TABLE;
}
$result = mysql_query($query);

var_dump($query);
echo mysql_error();


если не ясно в чём проблема, то результат вывода сюда



п.с. а в коде есть какие-нибудь обработчики $_GET, прежде чем эту переменную засовывать в запрос?
PM MAIL WWW   Вверх
doctor2k
Дата 1.6.2011, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



Блин я идиот!!
Дико извиняюсь, косяк был вовсе не в require_once, просто вместо строки:
Код

 $query = "select * from ".MAIN_TABLE." WHERE author=".$_GET['author'];

надо было писать
Код

 $query = "select * from ".MAIN_TABLE." WHERE author='".$_GET['author']."'";

т.е. одинарные кавычки добавить до и после значения переменной, теперь всё заработало, спасибо за внимание и извините за беспокойство :-[


Цитата(bars80080 @  1.6.2011,  22:15 Найти цитируемый пост)

Код

error_reporting(E_ALL|E_NOTICE);
var_dump($_GET);
/// *** ///
var_dump($query);
echo mysql_error();


Отдельное спасибо) помогло выявить ошибку
PM MAIL ICQ Skype   Вверх
doctor2k
Дата 2.6.2011, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



А кстати, вот ещё вопрос - в месте вставки require добавляется перевод строки, как это вылечить?.. Заранее спасибо.
PM MAIL ICQ Skype   Вверх
bars80080
Дата 2.6.2011, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



не добавлять его.
он вставляется либо при:

<?php шапка хтмл ?>
                                   <- здесь
<?php require 

либо он сидит вначале подключаемого файла. это также может быть не просто перевод, но ещё и BOM-символ.
тогда надо его открыть в редакторе и сохранить "без BOM". notepad++ так умеет
PM MAIL WWW   Вверх
doctor2k
Дата 2.6.2011, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



Я под никсами пользую Geany, файл исходный и подключаемый проверил в первую очередь на факт присутствия <br>-переводов строк. Да и кроме того, HTML же игнорирует переводы строки обычные.
PM MAIL ICQ Skype   Вверх
doctor2k
Дата 5.6.2011, 05:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



Цитата(bars80080 @  2.6.2011,  18:03 Найти цитируемый пост)
тогда надо его открыть в редакторе и сохранить "без BOM". notepad++ так умеет 

Спасибо, убрал BOM-символ, помогло.

Это сообщение отредактировал(а) doctor2k - 5.6.2011, 05:26
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0726 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.