Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] jaka jest hierarchia zmiennych?
Forum PHP.pl > Forum > Przedszkole
Dynuel
załważyłem coś takiego ze gdy np. mam ustalone cookie 'zmienna', oraz z formularza dostaje wartosc 'zmienna', to gdy potem w skrypcie użyje zmiennej 'zmienna' to wywala ona wartość z cookie,

tak więc czy jest jakaść kolejność/hierarchia owych zmiennych:

cookie
sesia
get
post
zmienna
webdice
Nie ma czegoś takiego jak hierarchia zmiennych w PHP, zmienne się po prostu nadpisują. Masz włączone register_globals i zamiast używać zmiennych w ten sposób:

  1. <?php
  2. $_GET['zmienna']
  3. ?>


używasz:

  1. <?php
  2. $zmienna
  3. ?>
Dynuel
no a co jezeli mam dokładnie taką sytuację:

jest ustalone

  1. <?php
  2. $_COOKIE['jezyk'] = 'aaa';
  3. $_POST['jezyk'] = 'bbb';
  4. ?>


to która będzie gdy użyję:

  1. <?php
  2. echo $jezyk;
  3. ?>
webdice
Kod
$_GET['zmienna']
$_POST['zmienna']
$_SESSION['zmienna']
$_COOKIE['zmienna']
$zmienna


Każda z tych zmiennych jest inna. Po testuj a się przekonasz.
Dynuel
no zgadza się, ale przez $zmienna da sie uzyskać dostep do $_GET['zmienna'] $_POST['zmienna'] $_SESSION['zmienna'] $_COOKIE['zmienna'], prawda??

tak więc jak będzie w opisanym wyżej przeze mnie przypadku?? chyba jest na to jakaś zasada nie??
webdice
Napisałem Ci że taka sytuacja występuje w przypadku włączenia register_globals i że zmienne się po prostu nadpisują.
Dynuel
sorry za prostackie pytanie, a to normalnie one są wyłączone i nie będzie takiej sytuacji bym odwołał sie np do $_cookie['zmienna'] przez $zmienna questionmark.gif
webdice
Większość serwerów ma włączone register_globals aby skrypty w których zastosowane było to ułatwienie działały poprawnie.

Wniosek jest jeden, nie ucz się pisać skryptów z włączonym register_globals, bo po pierwsze jest to niebezpieczne, a po drugie w przyszłości ta dyrektywa zostanie wycofana z PHP.
Dynuel
kurcze stary super że mi to uświadomiłeż gdyż ja nie miałem zielonego pojęcia

wybacz ze nadal męcze ten temat ale załóżmy ze mam taki kod:
  1. <?php
  2. if ( !isset ( $_GET['kategoria'] ) ) {
  3. $kategoria = 1;
  4. }
  5. ?>


to wypadało by zebym najlepiej zrobił coś takiego questionmark.gifquestionmark.gif :

  1. <?php
  2. if ( !isset ( $_GET['kategoria'] ) ) {
  3. $kategoria = 1;
  4. } else {
  5. $kategoria = $_GET['kategoria'];
  6. }
  7. ?>


zgadza sie? czy jak to ma wyglądać?

ps. zaznaczam że później w skrypcie chcę odwoływać sie do tej zmiennej poprzez $kategoria
webdice
Tak jest dobrze.

EDIT: Oczywiście jeśli chcesz aby defaultowo zmienna kategoria miała wartość 1.
Dynuel
sam juz nie kapuje jak jest dobrze, pytam czy mam używać czegoś takiego:

  1. <?php
  2. $kategoria = $_GET['kategoria'];
  3. ?>

jeżeli chcę później używać wartości z $_GET['kategoria'] poprzez $kategoria
webdice
Tak jak napisałeś jest prawie dobrze, a najlepiej uczyć się odrazu dobrych nawyków i zapisywać to tak:

  1. <?php
  2. if (!isset ($_GET['kategoria']))
  3. {
  4. $kategoria = $_GET['kategoria'];
  5. }
  6. ?>


Nie będzie to powodowało wyświetlania się ostrzeżeń.
Dynuel
Cytat(webdicepl @ 27.11.2007, 20:42:42 ) *
Tak jak napisałeś jest prawie dobrze, a najlepiej uczyć się odrazu dobrych nawyków i zapisywać to tak:

  1. <?php
  2. if (!isset ($_GET['kategoria']))
  3. {
  4. $kategoria = $_GET['kategoria'];
  5. }
  6. ?>


Nie będzie to powodowało wyświetlania się ostrzeżeń.


sorry ale tam chyba nie powinno być tego wykrzyknika

  1. <?php
  2. if (isset ($_GET['kategoria']))
  3. {
  4. $kategoria = $_GET['kategoria'];
  5. }
  6. ?>


no chyba ze to zamiezone ale w takim razie nie rozumiem totalnie co chciałeś tym uzyskać
webdice
Masz racje nie powinno być, przepraszam za wprowadzanie w błąd.
itsme
@Dynuel:

proszę dokonać edycji tematu nadac odpowiedni TAG.
Masz 80 postów chyba czas się już dostosować do obowiązujących zasad.
Dynuel
Cytat(itsme @ 27.11.2007, 21:03:10 ) *
@Dynuel:

proszę dokonać edycji tematu nadac odpowiedni TAG.
Masz 80 postów chyba czas się już dostosować do obowiązujących zasad.


bardzo przepraszam

i wielkie dzięki do webdicepl

a jeżeli chodzi o moją osobę to uważam temat za zamknięty
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.