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


Автор: slang 9.8.2005, 15:28
Каким образом можно заменить
Код

$url="../user/login.php?login=name";
require_once($url);

чтобы это заработало. Что-то не получается.

Автор: Mal Hack 9.8.2005, 15:32
И не будет.
Выход просто заранее объявить переменную с параметром а затем использовать ее уже в подключаемом файле.

Автор: slang 9.8.2005, 16:07
Смысл понятен. Спасибо. Но у меня проблемка такая:
В htaccess стоит: ErrorDocument 404 /index.php
Форма отправляет данные на не существующий url и соответственно попадает на index.php
В index.php есть строка:

Код

$menu="../rec.php" //(например)
require_once($menu);

из GET я достал строку: menu_get = login=789&pas=456&B1=%C2%EE%E9%F2%E8
А как ее теперь передать в rec.php.
Т.е. это я тоже понял, должна быть строка $login=789;
Но как это сделать не укладывается в голове.
Код:
Код

    foreach ($_GET as $index => $val)
    {
        print ("<br>$index -> $val");
    }

Ни чего не выводит. Получается, что если на эту страницу ппали не напрямую из формы, а через 404 ошибку, то GET не действителен что ли? Но ведь $REQUEST_URI работает.
Надеюсь, моя задача решаема.
Хотя хотелось бы всетаки не через GET, а через POST из формы передать. Но в этом случае вообще данные ни где не светятся.

Автор: Mal Hack 9.8.2005, 16:36
1. Ты что форму через GET посылаешь, при этом показывая пароль???? Нельзя так делать.

Цитата(slang @ 9.8.2005, 17:07)
Получается, что если на эту страницу ппали не напрямую из формы, а через 404 ошибку, то GET не действителен что ли?

GET действителен всегда, но... ErrorDocument работает по принципу старый запрос -> новый запрос и между собой они никак не взаимодействуют, т.к. параметы от первого запроса ты через ErrorDoxument не пердашь во второй.

2. Тут можно попробовать через mod_rewrite поработать. Он сохранит POST и GET данные от старого запроса.

Смотри тут: http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&target=main_panel§ion=803
Особенно: http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&target=main_panel&article=2835

Автор: slang 9.8.2005, 16:40
Сделал через
Код

$menu=parse_url($REQUEST_URI);

вообще шоколадно. Скрипт, который надо запускать берется из $menu[path].
А вот как обработать $menu[query], которая может быть например равна, опять же,
login=789&pas=789&B1=%C2%EE%E9%F2%E8
черт его знает.

Автор: Mal Hack 9.8.2005, 16:48
slang через mod_rewrite?

Цитата(slang @ 9.8.2005, 17:40)
login=789&pas=789&B1=%C2%EE%E9%F2%E8
черт его знает.

Ну в принципе банально smile
Код
<?php

 $str = "login=789&pas=789&B1=%C2%EE%E9%F2%E8";

 preg_match_all( "#(.+?)=(.+?)(?:&|$)#" , $str , $matches , PREG_PATTERN_ORDER );

 print_r( $matches );

# $matches[1] - ключи
# $matches[2] - значения

?>


Автор: slang 9.8.2005, 17:26
по mod_rewrite - прочитал сообщение позже, чем написал предыдущее. обязательно разберусь с этим модулем. Спасибо.
Про банально:
получается строка:
[quote]
Array ( [0] => Array ( [0] => login=789& [1] => pas=789& [2] => B1=%C2%EE%E9%F2%E8 ) [1] => Array ( [0] => login [1] => pas [2] => B1 ) [2] => Array ( [0] => 789 [1] => 789 [2] => %C2%EE%E9%F2%E8 ) )
[/quote]
Каким образом-то мне сказать rec.php, что $login=789, а $pas=789.
У меня с такой длинной строчкой голова пошла кругом.
получается, что:
matches[0]=Array ( [0] => login=789& [1] => pas=789& [2] => B1=%C2%EE%E9%F2%E8 )
matches[1]=Array ( [0] => login [1] => pas [2] => B1 )
matches[2]=Array ( [0] => 789 [1] => 789 [2] => %C2%EE%E9%F2%E8 )

Вопрос полного тормоза - как получить значение matches[1,0]. Я знаю, что написано не правильно.
Знаю, что можно обработать через foreach, но не вижу смысла в данном контексте.
Главный-то вопрос:

Каким образом-то мне сказать rec.php, что $login=789, а $pas=789.

Кстати по mod_rewrite не нашел про POST. Смотрел, конечно не очень внимательно, но там в основном речь идет о структуризованных запросах типа новостных лент - известна дата и от нее прыгаем, т.е. известно максимальное количество вложений по крайней мере в примерах.
[/quote]
http://news.ru/2005/08/09/news.html - соответствует index.php?y=2005&m=08&d=09&str=news, например
[quote]
Я же пытаюсь сделать наоборот: http://news.ru/2005/08/09/ - соответствует ../2005/08/09.php.
Честно говоря не знаю нафига мне это понадобилось, но раз уж взялся хотелось-бы доделать. Пока стандартными средствами все получилось, заморочка только в GET и/или POST получилась. Все остальное порешаю через сессии.

Автор: Mal Hack 9.8.2005, 17:32
Цитата(slang @ 9.8.2005, 18:26)
Вопрос полного тормоза - как получить значение matches[1,0]. Я знаю, что написано не правильно.
Знаю, что можно обработать через foreach, но не вижу смысла в данном контексте.
Главный-то вопрос:

Код

print $matches[1][$i] . " = " . $matches[2][$i] . "<br />";
// Это в цикле выведешь - поймешь


Цитата(slang @ 9.8.2005, 18:26)
Кстати по mod_rewrite не нашел про POST. Смотрел, конечно не очень внимательно, но там в основном речь идет о структуризованных запросах типа новостных лент - известна дата и от нее прыгаем, т.е. известно максимальное количество вложений по крайней мере в примерах.

И не надо ничего находить. mod_rewrite не делает пересылки на новый GET запрос а просто подменяет его, сохраняя POST параметры. mПри ключе [QSA]

Автор: slang 9.8.2005, 17:52
Все получилось. Спасибо.
Следующий раз через mod_rewrite делать буду.

Автор: slang 9.8.2005, 21:21
Сделал через mod_rewrite. Оказалось даже проще. В htaccess написал:
Код

RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA] 

И все переменные, переданные через POST получаются в массиве $_POST[key].
Просто супер!

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