[php] Zmienne w php

0

mam zarejestrowane 3 zmienne sesyjne np a1,a2,a2 funkcją session_register. Teraz mam pytanie , w skrypcie z formularza dostaja one jkas wartosc , czy jezeli wpisze (wymusze) z paska adresu parametr np http://adres.strony/cos.php?a1='ddd' to zmienna a1 przyjmiej wartosc ddd czy ta z formularza?
Bo testuje i widze ze raczej nie przyjmują wartosci zmienne zmieniane z paska adresu. Jak to jest ?

0

wartości z sesji w $_SESSION, z ciastek w $_COOKIES, z adresu w $_GET, z formularza w $_POST, nie nadpisują się chyba że masz włączone (niezalecane) register globals, wtedy jest to co ostatnie zostało zapisane, w pierwszej kolejności adres, formularz, potem ciastka, sesja czyli jeśli w sesji i adresie będzie zmienna $a to przyjmie ona wartość z sesji

0
Adamo napisał(a)

nie nadpisują się chyba że masz włączone (niezalecane) register globals, wtedy jest to co ostatnie zostało zapisane, w pierwszej kolejności adres, formularz, potem ciastka, sesja czyli jeśli w sesji i adresie będzie zmienna $a to przyjmie ona wartość z sesji

Hmm dziwne bo mam register_globals na ON a mi nie nadpisuje zmiennych z paska adresu takze nie wiem ....

0

prosty test, php.ini -> register_globals = on

plik index.php:

<?php
setcookie('test', 'ciacha');
session_start();
$_SESSION['test'] = 'sesji';
?><html><body onload="document.forms['forma'].submit()"><form name="forma" method="post" action="test.php?test=get&"><input type="hidden" name="test" value="posta"></form></body></html>

plik test.php:

<?php
session_start();
echo 'Dane pobrane z '.$test.' !!';
?>

Wywołanie index.php wyświetla "Dane pobrane z sesji"
po zakomentowaniu linijek session_start wyświetla "Dane pobrane z ciacha"
po usunięciu ciacha i wykomentowaniu linii ustawiającej je wyświetla "Dane pobrane z posta", jak usuniemy pole "test" z formularz to dopiero wtedy wyświetli "Dane pobrane z get". Ale wyłącz do jasnej ciasnej to register_globals bo to jest wszystko głupie i musisz się bardziej przez to starać żeby nie narobić dziur w skryptach

0

Adamo: Racją jest, że register_globals jest głupie, niezalecane i niebezpieczne. Ale jeśli chodzi o kolejność nadpisywania, to nie zawsze jest tak, jak piszesz. Wszystko zależy od ustawień w php.ini

0

aha, fuckt, odpowiada za to dyrektywa variables_order w php.ini, u mnie jest ona ustawiona na:

EGPCS

co oznacza kolejność Environment, Get, Post, Cookies, Session

czyli jeśli register_globals = on i ostatnia literka w variables_order to G no to koniec świata ;P raj dla poszukiwaczy dziury w całym

0
Adamo napisał(a)

EGPCS

co oznacza kolejność Environment, Get, Post, Cookies, Session

A jakie sa jeszcze mozliwosci ?

0

wszystkie słowa złożone z liter "EGPCS" :) czyli jak sobie zapragniesz, tak bedzie.

0
nav napisał(a)

wszystkie słowa złożone z liter "EGPCS" :) czyli jak sobie zapragniesz, tak bedzie.

A mozna cos wywalic zeby w ogole nie wchodzilo ?

0
Glina napisał(a)
nav napisał(a)

wszystkie słowa złożone z liter "EGPCS" :) czyli jak sobie zapragniesz, tak bedzie.

A mozna cos wywalic zeby w ogole nie wchodzilo ?

register_globals = off

i nie będzie nawet patrzeć na kolejność tych literek, cały czas zresztą to piszę żebyś zrobił

bo jak nawet wywalisz z tej zmiennej wszystkie literki to przyjmie wartość domyślną czyli właśnie EGPCS a jak pominiesz jedną z tych literek to tak jakby była ona na początku

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0