Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kropki i superglobalne
Forum PHP.pl > Forum > Przedszkole
falkor
Mam dwa drobne pytania:
1.Co daja kropki wokol POST w takim zapisie i po co je stosowac:
  1. <?php
  2. $query=&#092;"UPDATE logowanie,klienci SET AdresKor='\".$_POST['adres'].\"'....cos tam dalej
  3. ?>


2.Czy poza tym ze ponizsze zapisy sa rownowazne, ktorys znich jest preferowany lub wskazany:

  1. <?php
  2. $email=$_POST['email'];
  3. echo $email;
  4. ?>

  1. <?php
  2. echo $_POST['email'];
  3. ?>


Dziekuje serdecznie za odpowiedz. (na forum jest to poruszane ale nie znalazlem konkretnej odpowiedzi) winksmiley.jpg
Strus
Kropki są zasadniczo potrzebne, bo one są spójnikiem. Łączą dwa stringi w jeden.

Co do pdrugiego pytania, to w pierwszym przykładzie zapisujesz zmienną email z tablicy _POST do $email i następnie wypisujesz na standardowe wyjście zmienną $email.
W drugim przykładzie robisz to bezpośrednio.

Po użyciu pierwszego, gdy chcesz gdzieś dalej w kodzie użyć $_POST['email'] możesz odwołać się do zmiennej $email, natomiast w drugim przykładzie nie możeszz tego zrobić.
orson
witam ...

kropki sa niezbedne przy takim zapisie ... tak jak powiedzial Strus, lacza one stringi ... jednak jezeli stosujesz taki zapis:
  1. <?php
  2. $zmienna = &#092;"jakis string $_POST['foo'] dalsza czesc zmiennej\";
  3. ?>
to nie sa wymagane ... jednak 1 zapis [z kropkami] jest bardziej wydajny i poprawny ... oczywisie ma to znaczenie przy wiekszych projektach gdzie jest duzo kodu ale dobre nawyki nie sa zle winksmiley.jpg

pozdrawiam
Vengeance
Odnośnie pytania 2:
Jeśli owa zmienna z GET/POST nei będzie jakoś specjalnie modyfikowana itd. nie ma sensu przypisywac jej do innej (krotszej nazwa) zmiennej.

Jesli zas bedziesz przeprowadzal operacje jak powiedzmy: addslashes() htmlspecialchars() substr() to warto ją przypisać zmiennej $email.

Dla samego jednego 'echo' nie ma w tym sensu.
zbig13
Cytat(orson @ 2005-03-27 09:42:51)
kropki sa niezbedne przy takim zapisie ... tak jak powiedzial Strus, lacza one stringi ... jednak jezeli stosujesz taki zapis:
  1. <?php
  2. $zmienna = &#092;"jakis string $_POST['foo'] dalsza czesc zmiennej\";
  3. ?>
to nie sa wymagane ...

Można chyba też tak:
  1. <?php
  2. $zmienna = &#092;"jakaś wartość i {$_POST['przykladowy_post']}\";
  3. ?>
Wave
Ogólnie nie ma sensu używać łączenia stringów za pomocą kropek w podwójnych cudzysłowach. Jest to bez sensu i tylko wydłuża czas działania parsera. Przy czym zapis:
  1. <?php
  2. $var = &#092;"text\".$string;
  3. ?>

daje taki sam efekt jak:
  1. <?php
  2. $var = 'text'.$string;
  3. ?>
czy
  1. <?php
  2. $var = &#092;"text $string\";
  3. ?>
bądź też
  1. <?php
  2. $var = 'text'; $var .= $string;
  3. ?>
falkor
Dzieki...w sumie temat się wyczerpał chyba ze mielibyście jakies uwagi odnosnie drugiego pytania w polaczeniu z zagadnieniem bezpieczenstwa.Gdzies tu ktos na forum pisal zeby raczej operowac w kodzie na zwyczajnych zmiennych a nie superglobalnych (czyli zeby zawsze przypisywac)...nie wiem jak sie to ma do bezpieczenstwa (pomijajac kwestie funkcji addslashes()itp)...na pewno kod staje sie mniej przejrzysty...
zbig13
Nie wiem czy stosowanie zmiennych superglobalnych zmienia coś w bezpieczeństwie, ale wydaje mi się, że nie. Jedyna różnica to taka, jak napisał już Vengeance, że w bardziej rozbudowanych skryptach, gdzie często używa się danej zmiennej superglobalnej, wygodniej jest przypisać ją do zwykłej zmiennej, ale w przypadku pojedynczego użycia nie ma to raczej sensu.
FiDO
Przenosze na php Poczatkujacy.
Wave
Cytat
operowac w kodzie na zwyczajnych zmiennych a nie superglobalnych

To JEST kwestia bezpieczeństwa chociażby ze względu, dajmy na to przykład:
Zapis - $_POST['var'] odnosi się do zmiennej przekazanej metodą POST, a zapis $var równie dobrze mógłby się odnosić do zmiennej przekazanej metodą GET, czyli już mamy ułatwienie dla potencjalnego włamywacza. Oczywiście późniejszy fragment: $var = $_POST['var']; nie jest tylko ułatwieniem, lecz także przyspiesza wykonanie kodu gdyż nie musimy się za każdym razem odnosić do tablicy superglobalnej. Mam nadzieję iż nie namieszałem zbytnio. smile.gif
falkor
...A co do kropeczek (moze sie to komus przyda) to w takim zapytaniu:
  1. <?php
  2. $query_rsWyciag = &#092;"SELECT DzienWysylkiWyciagu FROM logowanie,klienci_konta,konta WHERE Identyfikator = '\".$_SESSION['MM_Username'].\"' 
  3. AND Haslo = '\".$_SESSION['MM_UserPassword'].\"' AND logowanie.NrKlienta = klienci_konta.NrKlienta AND klienci_konta.NrKonta = konta.NrKonta; &#092;";
  4.  
  5. ?>


brak kropeczek uniemozliwi wykonanie tej kwerendy (tak jest w najnowszej wersji php i MySQL...nie wiem jak w starszych).
Vengeance
Wave: poryszłeś troche inny temat odnośnie tego bezpieczeństwa.
Tu nie mowa jest o register_globals tylko o zwykłym przypisywaniu zmiennym z tablic superglobalnych ich krótszych odpowiedników.
Wave
Odpowiedziałem na pytanie co superglobalne mają do bezpieczeństwa (było takie), a zarazem co daje przypisywanie ich wartości do zwykłych zmiennych. Jeżeli się tego nie wyjaśni, niektórym mogą się mylić te dwie rzeczy. smile.gif
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.