[ vladimirn @ 16.01.2008. 10:52 ] @
Da li je neko raspolozen da mi objasni?
Code:

function printPre($text){
        $prePrint .= "<pre>";
        $prePrint .= print_r($text);
        $prePrint .= "</pre>";
        return $prePrint;
    }
function setQuery($sql){
        $sql = mysql_query($sql);
        return $sql;
    }
function getArray($sql){
        $result = $this->setQuery($sql);
        while($row= mysql_fetch_array($result)){
        $this->printPre($row);    
        }
    }


Kada uradim $this->printPre($row) u okviru getArray metode, dobijem na ekranu ispisana dva niza, koliko ih i ima u bazi po upitu koji saljem
Dakle i treba da dobijem dva niza, jer ima dva rekorda.

Elem, sada sta se desava i gde imam problem. Problem je kada sa druge strane (index.php) pozovem metodu getArray

Code:
$row = $db->getArray("select * from users");
$db->printPre($row);


Tako dobijem ispisan smo jedan rekord umesto dva.

Gde gresim?
[ kazil @ 16.01.2008. 11:34 ] @
ti u funkciji getArray vec jednom pozivas metodu printPre, ne moras je opet. Samo pozovi

Code:
$db->getArray("select * from users");


i trebalo bi da ti ispise kako treba.
[ vladimirn @ 16.01.2008. 11:41 ] @
Ne, nisam se dobro izrazio.
Ja print pre pozovem kako treba, odnosno kada izbacim printPre iz same metode:
Code:

function getArray($sql){
        $result = $this->setQuery($sql);
        while($row= mysql_fetch_array($result)){
        $this->printPre($row);    
        }
    }


izmenim i stavim:

Code:

function getArray($sql){
        $result = $this->setQuery($sql);
        while($row= mysql_fetch_array($result)){
        return $row;    
        }
    }


E onda ja pozovem printPre u index.php i dobijem samo jedan rekord umesto dva. a kada je printPre u okviru funkcije, dobijem ispisana dva rekorda, koliko ih i ima.

Izvinjavam se zbg nejasno postavljenog pitanja u prvom topicu.

[ kazil @ 16.01.2008. 11:46 ] @
onda ovako nesto...

Code:

function getArray($sql){
        $result = $this->setQuery($sql);
        return mysql_fetch_array($result));

}


a na index.php

Code:

while($row = $db->getArray("select * from users")){
$db->printPre($row);
}
[ vladimirn @ 16.01.2008. 12:03 ] @
Hvala Kazile, ali netje :)
Udje u mrtvu petlju i zakuca se posle 30 sekundi :)

Neka druga ideja?
[ kazil @ 16.01.2008. 12:20 ] @
zakuca? ne bi smelo. jesi promenio i getArray funkciju? svasta...

nego, ako radi na prvi nacin, da je printPre unutar getArraya, zasto menjas?
[ bzero @ 16.01.2008. 12:31 ] @
Citat:

Code:

function getArray($sql){
        $result = $this->setQuery($sql);
        while($row= mysql_fetch_array($result)){
        return $row;    // <--- 
        }
    }


E onda ja pozovem printPre u index.php i dobijem samo jedan rekord umesto dva. a kada je printPre u okviru funkcije, dobijem ispisana dva rekorda, koliko ih i ima.



Naravno da dobijes jedan rekord, posto uradis return, odnosno izadjes iz funkcije getArray, cim pokupis prvi red iz baze.
[ vladimirn @ 16.01.2008. 12:34 ] @
Jesam promenio sam sve.

Menjam zato sto zelim da odvojim funkciju kako bih kasnije mogao da koristim smarty template. Zbog toga ne zelim da u samoj funkciji uradim:


Code:

function getArray($sql){
        global $smarty;
        $result = $this->setQuery($sql);
        while ($row=mysql_fetch_array($result)){
            $smarty->append('users',$row);
        }
}


nego da na indexnoj strani radim sledece:

$smarty->append('users', $db->getArray("select * from users"));

i tako dobiti loop koji cu koristiti u smarty templateu.

ali sta god da probam dobijem samo jedan rekord...

[ vladimirn @ 16.01.2008. 12:36 ] @
@bzero
Hvala na odgovoru.
Razumem. A kako da resim to? :)
[ bzero @ 16.01.2008. 12:43 ] @
Nesto kao:

Code:

$arr = array();
while($row = mysql_fetch_array($result)){
    $arr[] = $row;
}
return $arr;
[ vladimirn @ 16.01.2008. 12:56 ] @
upravo sam i sam dosao do :
Code:

function getArray($sql){
        global $smarty;
        $result = $this->setQuery($sql);
        while($row = mysql_fetch_array($result)){
            $rows[] = $row;
        }
        return $rows;
    }


Hvala na pomoci obojici :)

Samo jos jedno pitanje @bzero

Zasto si ti napisao
Code:

$arr = array();
while($row = mysql_fetch_array($result)){
    $arr[] = $row;
}


kada radi jednako i bez $arr=array()

Ovo me zanima samo iz razloga da prosirim svoja znanja. Zanima me zasto je potrebno da $arr bude array pre while petlje? Da li je uopste potrebno?
[ bzero @ 16.01.2008. 13:19 ] @
Pa recimo da na prvi pogled to nije neophodno, ali spada u dobru praksu kod pisanja koda. Konkretno, tvoja funkcija getArray treba da vrati array, ali sta ce se desiti ako za neki konkretan query ne postoji ni jedan red u bazi, sta ce vratiti funkcija? Vratice neku nedefinisanu vrednost, i ako pokusas tu vrednost da upotrebis kasnije u kodu moze da bude problema, (npr, u foreach petlji, dobices warning), a posebno su ovakve stvari vazne ako vise ljudi radi na nekom projektu.
Znaci na ovaj nacin obezbedjujes da tvoja funkcija uvek vrati array (makar i prazan).

[Ovu poruku je menjao Nemanja Avramović dana 16.01.2008. u 18:06 GMT+1]
[ vladimirn @ 16.01.2008. 14:15 ] @
@bzero

Zahvaljujem ti na objasnjenju :)