Маленький вопросик про globals off

Сенсей

Новичок
Маленький вопросик про globals off

Хочу переписать скрипт что бы работал при globals off , ну то что касается отправки и принятия данных - то тут проблем не возникает ...

У меня вопрос - изменению должны поддаваться только то что я описал выше - или к тому же придется изменять стиль доставания данных с MySQL ?

Ну например если я делаю :

$result = sql_query("select blablabla FROM 4toto", $db);
list($blablabla) = mysql_fetch_row($result, $db);

При лобалс офф ничего не нужно добавлять или изменять как ?

Извините если вопрос покажется тупым ...
 

Altex

Новичок
а почему бы самому не проверить?
эти 2 строчки будут работать нормально
 

Iron

Guest
если конечно $db не берется из GET, POST, сессии или еще откуданить. В чем я, правда, сомневаюсь...
 

Сенсей

Новичок
а почему бы самому не проверить?
Да скрипт большой , при выключенных глобалках вобще не пашет ... хотя да , тормознул ... мог просто запрос проверить в отдельном файле ....

Так вот я и хотел чуть снизить круг виновных ...

И еще тогда в догонку вопрос -

Если переменная хранится в файле который инклудится - то я должен тогда юзать ее как

$_GLOBALS['blablabla']

?

И последний вопрос ....


Например получаю я index.php?one=two

И далее по скрипту я много раз юзаю

$one

Теперь при выключенных глобалках как мне лучше сделать :

1. Везде $one заменить на $_GET['one'] ?
или
2. Сделать в начале скрипта $one = $_GET['one'] и продолжать использовать $one без изменений ?


Над вопросами не смеяться :)
 

Tn

Guest
Советую тебе сначала разобраться, что такое globals off и для чего это придумали, прежде чем начинать это использовать.

Лучше 1-ый вариант: 1. Везде $one заменить на $_GET['one'] ?
В этом случае тебе будет сразу понятно, какая переменная параметр получаемый "из вне", а какая переменная живет сама по себе в твоем скрипте.
 

Сенсей

Новичок
Пасиб за ответы .... Вроде рабоата пошла :) Практика - ничего лучше ее нету :)

Но вот мучает меня вопрос ...

Юзаю я с ковычками одинарными :

PHP:
if (!isset($_GET['file'])) { $file="index"; }
и все нормально , но дальше есть код

PHP:
$blablabla = "dir/$_GET[name]/$_GET[file].php";
все вместе пашет нормально ...
но если я во втором коде тоже заюзаю с ковычками , то есть $_GET[name] и $_GET['file'] - то php выдает

Notice: Undefined index: 'name'


Но ведь в коде
PHP:
[PHP]if (!isset($_GET['file'])) { $file="index"; }
[/PHP] тоже есть ковычки - и не ругается на него ...


Непонятная для меня штука :(
 

fixxxer

К.О.
Партнер клуба
$blablabla = "dir/{$_GET['name']}/{$_GET['file']}.php";

НО! Лучше не юзать такие конструкции (на них довольно прилично тормозит PHP), и писать проще и понятнее (как тебе, так и интерпретатору:)):

$blablabla = 'dir/' . $_GET['name'] . '/' . $_GET['file'] . '.php';
 

fixxxer

К.О.
Партнер клуба
Вообще, судя по твоему сообщению об ошибке, все проще - в GET-запросе не была передана переменная Name. :) Но, все равно, прими во внимание мой предыдущий постинг. ;)
 

Сенсей

Новичок
Вообще, судя по твоему сообщению об ошибке, все проще - в GET-запросе не была передана переменная Name. Но, все равно, прими во внимание мой предыдущий постинг.
Она не может не передаваться ... так как без ковычек - все пашет .. а с ковычками - нет ...

Но за код - спосибо ...

Я просто еще приспосабливаюсь к такому стилю написания скриптов .... и не до конца понимаю где что юзать :)
 

fixxxer

К.О.
Партнер клуба
Без кавычек - это вообще в принципе неправильно. Если бы ты включил вывод всех сообщений PHP, в том числе Notices (для этого в самом начале скрипта напиши

error_reporting(E_ALL);

ты бы увидел такое сообщение:

Notice: Use of undefined constant name - assumed 'name' in ...

Дело здесь в следующем. В PHP есть конструкция [m]define[/m], определяющая константу. Например, можно написать так:

Пример 1.
PHP:
define('name','Test');
echo name;
(Обрати внимание - name без кавычек).
Этот код выведет Test.
Можно написать так:

Пример 2.
PHP:
define('name','Test');
$a['Test'] = 'blablabla';
echo $a[name];
(Опять же, без кавычек). Этот код выведет 'blablabla'. Понятно почему?

А теперь, что же происходит в этом случае:

echo $_GET[name];

Сначала PHP смотрит, определена ли константа name с помощью define. Если определена, то PHP действует точно так же, как в примере 2. Если же не опредена, то он, матюгнувшись Notice-ом, решает, что ты забыл поставить кавычки, и приравнивает эту конструкцию к $_GET['name']. Так что, это работает, но, как видишь, лучше так не делать. :)
 

sergadm

Новичок
1. Везде $one заменить на $_GET['one'] ?
или
2. Сделать в начале скрипта $one = $_GET['one'] и продолжать использовать $one без изменений ?
если $_GET['one'] исп. в 20 местах , да ещё надо проверить пришла ли переменная по get , а если не пришла то задать значение по умолчанию(или ещё что с ней сделать) - по моему 2 вариант выйдет лучше.
 

fixxxer

К.О.
Партнер клуба
Тогда
$one = isset($_GET['one']) ? $_GET['one'] : значение_по_умолчанию
 
Сверху