[PHP] Problem z register_global

0

Hej.
Poniższy fragment kodu działa na localhost lecz nie działa na darmowym serverze vixo.pl co mnie martwi tzn nie pokazuje wyników z bazy danych.

//poloczenie do bazy itp
header("Content-type: text/xml");
    
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";

    echo "<Nazwy>";

    while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
        echo "<Nazwa>";
        foreach($row as $klucz => $wartosc){
            else if ($klucz == "Imie")
                echo "<Imie>".$wartosc."</Imie>"; 
            else if ($klucz == "Nazwisko")
                echo "<Nazwisko>".$wartosc."</Nazwisko>";

        }    
        echo "</Nazwa>";
    }
    
    echo "</Nazwy>";

Wiem, że chodzi o register_global tylko nie wiem jak zmienić/do której zmiennej sie odwołać bo wiem, że w register_global trzeba się w ten sposób odwoływac $_POST['zmienna']; nie chce też włączać register_global na serv - ponoć niebezpieczne. to moje otwarcie poloczenia w js/ajax:
XHR.open("GET", "plik.php" + "?random=" + Math.random(), true);Wiec co zrobic aby dane się pojawiały/wyswietlały?

0

sorki ale zaraz pod foreach bez else miało byc :-P Pomyłka w pisaniu posta

0

Magdo, nie widzę w tym fragmencie kodu nic, co zależałoby od register_globals (tam jest "s" na końcu ;) ). Używasz tu tylko zmiennych, które sama tworzysz. Nie odczytujesz żadnych zmiennych, które mogły zostać przekazane z przez żądanie. Zauważ proszę, że NIE pokazałaś istotnego kodu wykonującego zapytanie do bazy danych.

Magda1985 napisał(a)

w register_global trzeba się w ten sposób odwoływac $_POST['zmienna'];

Chyba coś Ci się pokręciło. Gdy register_globals jest załączone, to wtedy NIE trzeba używać konstrukcji typu $_POST['parametr']. Piszesz po prostu $parametr.

Jeśli masz wyłączone register_globals, to wtedy musisz używać $_POST['parametr']. Zauważ proszę, że w przykładowym pliku JavaScript używasz metody GET, a nie POST, więc w tym konkretnym przypadku powinnaś użyć $_GET['parametr'].

Magda1985 napisał(a)

nie chce też włączać register_global na serv - ponoć niebezpieczne.

Tak, jest to potencjalnie bardzo niebezpieczne i generalnie stanowi złą praktykę programowania. Tragedia nie musi się wydarzyć, ale może, a my programiści zawsze staramy się ustawić tak, żebyśmy nie mogli strzelić sobie w stopę ;).

Jest kilka sposobów na dostęp do parametrów przesłanych żądaniu. Zalecany sposób to właśnie $_POST['parametr'].

PS. Skoro i tak sklejasz sobie "fragmenty stringów".$z_wartościami, polecam stosować apostrofy (znak '), a nie cudzysłowy (znak "). Apostrofy zadziałają odrobinkę szybciej, co nie powinno mieć tutaj znaczenia, ale przede wszystkim nie będziesz musiała stosować sekwencji ucieczki gdy będziesz chciała zawrzeć w stringu cudzysłów, tak jak w linijce wyświetlającej prolog XML.

0

zapytanie wyglada tak:

$result = mysql_query("SELECT Imie, Nazwisko,  FROM nazwa_tab") or die("blad");

na serv mam wył opcje register_globals. Wiec co moze być przyczyną ze rekordy się nie wyświetlają. Proszę pomóżcie to dla mnie ważne. I sorki za "s" na końcu - raz skopiowałam i potem leciałam już tylko z ctrl + v :-P

0

zacznijmy od tego ze to chyba nie powinno się wykonać:
SELECT Imie, Nazwisko, FROM nazwa_tab

ten przecinek po Nazwisko ..

0

@Magda1985:
W zapytaniu tak czy siak nie widzę parametrów, więc i na tę linijkę register_globals nie powinno mieć wpływu.

A na pewno masz na serwerze jakieś rekordy w tej bazie danych? :P Może po prostu jest pusta? Sprawdzałaś to jakimś phpMyAdminem, czy czymś w tym rodzaju?

(BTW., @dzek69 słusznie wytknął błąd)

0

Rekordy sa w bazie. Na innych stronach się wyświetlaja prawidłowo (oczywiście tez nie chciały dopóki nie pokombinowałam z tym register_globals i teraz działaja) lecz nie wiem co tu jest grane bo na localu wszystko smiga.

0

Wywal wszystkie register globals ze skryptu bo to ogromne niebezpieczeństwo i zadziała.

0

tylko, że ja tu nic nie robiłam jeszcze z register_globals bo w sumie to nie wiem co zrobic bo jak Pan bswierczynski zauważył nie ma tu raczej parametrów do przekazania (chociaz cos musi byc jesli jesli jest GET na poczatku w js) Sama nie wiem. Poradzcie mi konkretnie co mam zrobic

0

Tak jak dzek powiedział usunąć przecinek po "Nazwisko"?

0

Przecinek nie, to moj blad w poście. poza tym pisałam, że na local działa Jeżeli chodzi o literówki to sprawdzałam w kodzie chyba 100 razy ;-P

0
Magda1985 napisał(a)

nie ma tu raczej parametrów do przekazania (chociaz cos musi byc jesli jesli jest GET na poczatku w js)

Nie, prawie na pewno parametry nie są tu używane. Ten kod JS, który wstawiłaś, zawiera jedynie parametr random przesyłający losową wartość. Praktycznie nie ma możliwości, by było to coś istotnego -- raczej parametr ten jest przesyłany w obawie przed cache'owaniem odpowiedzi po stronie przeglądarki. Inne parametry nie są przesyłane przez ten kod JS.

Co więcej, samego GET można użyć bez żadnych parametrów (POST zresztą też).

Magda1985 napisał(a)

Przecinek nie, to moj blad w poście.

Te błędy w poście nie powinny się zdarzyć. Bo kodu nie masz przepisywać, tylko przeklejać. Kopiuj->Wklej. Nie wolno przepisywać niedziałającego kodu, bo nieraz niechcący coś w nim poprawimy. Choćby odruchowo. A literówek w kodzie czasami nie widać nawet jak się milion razy patrzy. Chyba każdy z nas miał taki problem ;). Potem dajesz kod komuś innemu i on od razu widzi, że tu brakuje jednej litery czy przecinka.

Jaki jest wynik działania tego skryptu PHP? Generuje plik XML, ale bez żadnych elementów <Nazwa>? Wywala ten "blad" od die()? W jaki sposób debugowałaś skrypt? W najprostszym przypadku powinnaś po prostu spróbować wysłać do bazy jakiekolwiek polecenie, a następnie sprawdzić dokładnie jaki zwraca wynik. Może mysql_query zwraca false? A może dopiero mysql_fetch_array zwraca pustą tablicę? To możesz sprawdzić tylko Ty. Wyświetlaj sobie choćby zwykłym echo wartości tych zmiennych i wyniki zwracane przez funkcje. W ten sposób możesz dojść, gdzie dokładnie jest błąd.

0

Już mam. Problem był z kodowaniem polskich znaków w bazie danych ;-P

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