Меняем $_GET/$_POST
Можно ли изменить (дописать) $_GET/$_POST в коде программы?
и/или
Создать в функции переменную, например, $_MyVar которая бы была видна во всей программе?
ну к примеру
$_myvar=$q
}
_getmyvar('проверка');
echo $_myvar;
Выдаст ошибку.
function _getmyvar($q) {
global $_myvar;
$_myvar=$q;
}
_getmyvar('проверка');
echo $_myvar;
хорошо.
давай так, ближе к сетуации.
function.php
$_myvar=$q
}
file.php
index.php
_getmyvar('проверка');
include_once('file.php');
не пашет :)
function _getmyvar($q) {
$GLOBALS["_myvar"]=$q;
// или
global $_myvar;
$_myvar=$q;
}
_getmyvar('проверка');
include_once('file.php');
да ее не "обязательно", а "желательно" объявлять раньше. Просто он опять не так написал, как ему объяснили.
Можно. Никто не мешает сделать так:
function cool()
{
echo $_GET['mama'];
}
cool();
Опять же, какие проблемы:
{
global $mama;
$mama = 'What did you say about my mama?';
}
Cool();
echo $mama;
Прямые ответы на прямые вопросы...
С точки зрения оптимизации, лучше передавать переменную в качестве аргумента по ссылке.
...
...
вот! я пробывал такой вариант, но меня мягко послали, т.к. $_POST и $_GET в программе НЕ МЕНЯЮТСЯ.
[QUOTE=UAS]
а че ему пахать, если переменная раньше не определена??
[/QUOTE]
возможно, но тогда массив, имя переменной объявляется в функции
[QUOTE=first_x]
Просто он опять не так написал, как ему объяснили.
[/QUOTE]
просто забыл написать, он от этого суть не меняется.
[QUOTE=RussianSpy]
Ужас какой... Люди даже не разобрались с элементарнейшими азами. Просто ужас.
[/QUOTE]
так дай ссылку! какой толк от твоего поста?
Кто тебя послал? Кто сказал что не меняются? Возьми, выполни этот код и сделай вывод.
Все там меняется, и довольно прекрасно.
в смысле??
Пишите ТАК, чтобы было понятно и удобно НЕ ВАМ, а ДРУГИМ программистам, которые будут использвать, возможно, ВАШ код.
Это полный идиотизм определить глобальную переменную в функции (причем ранее она не была объявлена), а потом далее её в коде использовать (если это функция не из разряда __set()). Т.е. вот вдруг откуда не возьмись взяла и появилась переменная. Так что все равно выбирайте где-то место в начале программы, где будете определять ваши глобальные переменные - так в разы удобнее и понятнее + ошибок не будет.
php.net - самый лучший учебник + тонна статей и форумов, которых в инете тоннами
function _SetMyVar() {
...
$_MyVar[$name]=$value;
}
echo $_MyVar[$name];
надеюсь теперь будет всем понятно=)
Зачем преобразовывать данные формы? Или вы хотите прямо в строке браузера этот $_GET поменять? Ну т.е. чтобы при отправке формы данные в строке адреса были ЧПУшные? Тогда это только обработчики форм использовать надо (JavaScript). А для переработки данных из ЧПУ в стандартный QUERY_STRING используется mod_rewrite на стороне сервера.
http://www.bhv.ru/books/book.php?id=6643
Покупаешь и читаешь с первых же страниц. Идиотские идеи про назначение переменных в $_GET и $_POST забываем навсегда.
Если вам потребовалось что-либо записать в один из этих массивов - значит программа написана неверно, идеи плохие и пора снова взять в руки книгу и читать с самых азов.
давай разабьём по шагам:
1. http://.../qwe:rwe/sdf:dfgf/dfg:ert/
2. mod_rewrite перенаправляет на http://.../index.php?url=qwe:rwe/sdf:dfgf/dfg:ert
3. обрабатываем переменную $_GET['url'] и получаем следующий вид:
3.1. $qwe='rwe';
3.2. $sdf='dfgf';
3.3. $dfg='ert';
третий шаг выполняет функция _SetMyVar();
ну теперь то понятно?
на самом деле я уже имею представления (объявляю переменную $_MyVar=array(); далее в функции _SetMyVar() заполняю двумерный массив данными и исполюзую в программе) о решении данной проблемы, UAS спасибо за идею.
[QUOTE=UAS]Как $_GET преобразовать к его виду?[/QUOTE]
может ошибусь, пишу на память, без проверки
global $_MyVar;
if(!empty($_GET['url']) {
$arr=explode('/',$_GET['url']);
for($i=count($arr)-1; $i>=0; $i--) {
if(strpos($arr[$i],':')) {
$arr2=explode(':',$arr[$i]);
$_MyVar[$arr2[0]]=@$arr2[1];
}
}
}
}
[QUOTE=RussianSpy]Идиотские идеи про назначение переменных[/QUOTE]
почему же? с ними удобно работать, но у меня почемуто на работает =(
Гадить в штаны тоже удобно, но это не значит, что это правильно.
да, чуть не забыл, может тебе и удобно гадить в штаны, но я предпочитаю и считаю более удобным сходить в сортир =)
да, чуть не забыл, может тебе и удобно гадить в штаны, но я предпочитаю и считаю более удобным сходить в сортир =)
Я ведь не зря сказал читать книгу. А поскольку тебе проще спросить и разрывать мозг людей своими глупыми идеями, то я пойду у тебя на поводу и напишу тебе кусок кода.
{
public $myVar1 = 0;
public $myVar2 = 0;
public $myStr = '';
public $myArr1 = Array();
function __construct()
{
$this->myVar1 = count($_GET);
}
public function CountMyShit()
{
if(isset($_GET['url']))
{
$this->myArr1 = explode('/', $_GET['url']);
return true;
}
else return false;
}
}
$obj = new MySmallClass;
var_dump($obj);
$obj->CountMyShit();
var_dump($obj);
Если запустить то получится "волшебство"! Ни тебе проблем с видимостью внутри класса, не нужны ни глобалы, ни ссылки на переменные, не нужно писать ничего в $_GET и в $_POST.
2Топикстартер: а вы не грубите. Человек вам правильно говорит, надо книгу прочитать. Тем более опыт этого человека в тысячи раз больше вашего и в десятки больше моего)) Вам вот уже написали класс. А переделать его под тот код проблем не составляет
UAS, Топикстартер? Раз так пошло дело, вы тогда топикзасератели, прошу не принимать близко к сердцу!.. Человек спросил конкретный вопрос и ожидает конкретный ответ! А не кучу кала в его сторону...
[COLOR="Red"]МОДЕРАТОРАМ: АВТОР НАШЕЛ ОТВЕТ НА ПОСТАВЛЕННЫЙ ВОПРОС, ПРОШУ ЗАКРЫТЬ ТЕМУ![/COLOR]
Ведь может, мы топикстартеру не ту книжку засоветовали? :D
P.S. Давайте все себя проверим методом CountMyShit()?
Просто топикстартер любит быдлокод. Собственно его "решение" как раз таким и является.
Да я же не спорю.
Это юмор такой...
Может ему просто успокаивающую литературу почитать?
Автор темы уже нашел решение своей надуманной проблемы в том быдло-коде, что он привел. Спасибо UAS за поддержку. Всем также спасибо. Я умываю руки. )
имхо, банить за первое такое сообщение, чтобы неповадно было :) а то смари какие мы нежные на topicstarter обиделись :)
В старой версии (v.4.4.0) не получалось.