falkor
27.03.2005, 02:07:41
Mam dwa drobne pytania:
1.Co daja kropki wokol POST w takim zapisie i po co je stosowac:
<?php
$query=\"UPDATE logowanie,klienci SET AdresKor='\".$_POST['adres'].\"'....cos tam dalej
?>
2.Czy poza tym ze ponizsze zapisy sa rownowazne, ktorys znich jest preferowany lub wskazany:
<?php
$email=$_POST['email'];
?>
<?php
?>
Dziekuje serdecznie za odpowiedz. (na forum jest to poruszane ale nie znalazlem konkretnej odpowiedzi)
Strus
27.03.2005, 02:22:10
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
27.03.2005, 08:42:51
witam ...
kropki sa niezbedne przy takim zapisie ... tak jak powiedzial Strus, lacza one stringi ... jednak jezeli stosujesz taki zapis:
<?php
$zmienna = \"jakis string $_POST['foo'] dalsza czesc zmiennej\";
?>
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

pozdrawiam
Vengeance
27.03.2005, 11:05:25
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
27.03.2005, 11:27:29
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:
<?php
$zmienna = \"jakis string $_POST['foo'] dalsza czesc zmiennej\";
?>
to nie sa wymagane ...
Można chyba też tak:
<?php
$zmienna = \"jakaś wartość i {$_POST['przykladowy_post']}\";
?>
Wave
27.03.2005, 12:21:34
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:
<?php
$var = \"text\".$string;
?>
daje taki sam efekt jak:
<?php
$var = 'text'.$string;
?>
czy
<?php
$var = \"text $string\";
?>
bądź też
<?php
$var = 'text'; $var .= $string;
?>
falkor
27.03.2005, 16:29:26
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
27.03.2005, 20:24:31
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
27.03.2005, 20:48:57
Przenosze na php Poczatkujacy.
Wave
27.03.2005, 21:02:48
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.
falkor
28.03.2005, 00:33:02
...A co do kropeczek (moze sie to komus przyda) to w takim zapytaniu:
<?php
$query_rsWyciag = \"SELECT DzienWysylkiWyciagu FROM logowanie,klienci_konta,konta WHERE Identyfikator = '\".$_SESSION['MM_Username'].\"'
AND Haslo = '\".$_SESSION['MM_UserPassword'].\"' AND logowanie.NrKlienta = klienci_konta.NrKlienta AND klienci_konta.NrKonta = konta.NrKonta; \";
?>
brak kropeczek uniemozliwi wykonanie tej kwerendy (tak jest w najnowszej wersji php i MySQL...nie wiem jak w starszych).
Vengeance
28.03.2005, 13:15:29
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
28.03.2005, 16:58:47
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.
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.