Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2009-03-02 17:32:26

  owca - Członek DUG

owca
Członek DUG
Skąd: Szczerców
Zarejestrowany: 2007-01-30
Serwis

[php] Dostęp do tablicy globalnej

Mam sobie kawałek kodu php:

Kod:

<?php
header("Content-Type: text/plain");

$tablica_z_odpowiedziami = array();
$ilosc_punktow = 0;


/*
 * funkcja wczytuje odpowiedzi na pytania z pliku xml
 */
function wczytajOdpowiedzi()
{

}

    $tablica_z_odpowiedziami[0] = 2;  //to ma być w funkcji wyżej ^
    $tablica_z_odpowiedziami[1] = 1;
    $tablica_z_odpowiedziami[2] = 3;
    $tablica_z_odpowiedziami[3] = 3;
    $tablica_z_odpowiedziami[4] = 2;
    $tablica_z_odpowiedziami[5] = 3;

/*
 * funkcja porównuje odpowiedź użytkownika uzyskaną z odpowiedzią znajdującą się w tablicy odpowiedzi
 */
function sprawdzCzyPoprawna($i_id, $i_odp)
{
    global $tablica_z_odpowiedziami;
    if ($tablica_z_odpowiedziami[$i_id] == $i_odp) 
    {
        return true;
    }
}

/*
 * funkcja sprawdza dla każdego elementu 
 */
function policzPunkty()
{
    global $ilosc_punktow;
    foreach ($_POST as $id => $odpowiedz)
    {
        if(sprawdzCzyPoprawna($id, $odpowiedz))
        {
            $ilosc_punktow++;
        }
    }
}

wczytajOdpowiedzi();
policzPunkty();
print($ilosc_punktow);
?>

Jest to kod, który ma sprawdzać poprawność udzielonych odpowiedzi w quizie. Identyfikatory pytań i odpowiedzi skrypt otrzymuje jako argumenty $_POST (funkcja policzPunkty()). W funkcji wczytajOdpowiedzi() ma on za zadanie powstawiać identyfikatory pytań i odpowiadające im odpowiedzi do tablicy $tablica_z_odpowiedziami. Jednak umieszczenie tam poleceń w stylu: "$tablica_z_odpowiedziami[0] = 2;" nie działa, więc przypisania te musiałem wrzucić pod tą funkcję. I to jest największy problem: jak przypisywać do tej tablicy wartości w funkcji. Próbowałem zadeklarować ją w funkcji jako global, ale wała to dało. Co ciekawe, jeśli zadeklarowałem zmienną $ilosc_punktow jako globalną w tej funkcji i przypisywałem jej wartość, to wszystko działało. Ma ktoś może pomysł dlaczego nie mogę w tej funkcji przypisywać wartości do nowych elementów?

Offline

 

#2  2009-03-02 18:00:13

  jezoo - Dzięcioł

jezoo
Dzięcioł
Skąd: Z lasu
Zarejestrowany: 2005-09-02

Re: [php] Dostęp do tablicy globalnej

KLIK

btw jak raz deklarujesz zmienna globalna to pozniej nie musisz


LRU #480459

Offline

 

#3  2009-03-02 21:53:46

  owca - Członek DUG

owca
Członek DUG
Skąd: Szczerców
Zarejestrowany: 2007-01-30
Serwis

Re: [php] Dostęp do tablicy globalnej

Czytałem to, ale mało istotne. Cud się kurna stał, bo z jakiejś paki zaczęło działać zwykłą metodą global $tablica_z_odpowiedziami. Sam nie wiem co było nie tak. W szkole z kumplami się z pół godziny męczyliśmy dochodząc dlaczego to nie działa.
Co by nie było, to temat jest do zamknięcia lub nawet do usunięcia (ze względu na skrajnie niską wartość merytoryczną).

Offline

 

#4  2009-03-03 09:34:44

  chyl-o - Członek DUG

chyl-o
Członek DUG
Skąd: Lublin
Zarejestrowany: 2006-04-04
Serwis

Re: [php] Dostęp do tablicy globalnej

Proszę zauważyć, że zaleceniem programistycznym php jest odejście od używania global. W php6 zmienne globalne są już niedostępne.


Registered Linux User: #417111
http://chyl.org/pub/images/dug_button.png

Offline

 

#5  2009-03-03 10:20:16

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: [php] Dostęp do tablicy globalnej

Zmienne globalne w php4,5 wymagają do działania ustawienia zmiennej register_globals w php.ini. Domyślnie jest to chyba wyłączone, używanie zmiennych globalnych jest niepolecane ze względów bezpieczeństwa, ale nie tylko.

Offline

 

#6  2009-03-03 11:38:56

  jezoo - Dzięcioł

jezoo
Dzięcioł
Skąd: Z lasu
Zarejestrowany: 2005-09-02

Re: [php] Dostęp do tablicy globalnej

kamikaze ma racje, zapomianlem o register_globals, faktycznie sa wylaczone. generalnie odchodzi sie od global/$GLOBAL. de facto lepiej napisac pseudo klase z publicznym atrybutem i przez niego odwolywac sie


LRU #480459

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)