Autor Zpráva
Aleš Tichava
Profil
Zdravím všechny,

mám problém s jednou metodou. Zkouším Objektové programování v PHP a narazil sem na problém. Vše funguje jak má, ale metoda ukazVystup() mi nevrací to, co po ní chci. Měla by vypsat tabulku o dvou sloupcích, ve kterých by bylo ID a název záznamu v databázi.

Tabulka se vytvoří, jsou v ní dokonce dva sloupce, ale nevypíší se všechny záznamy z databáze. Pouze se nějak zacyklí výpis prvního záznamu z databáze, který se poté do nekonečna začne vypisovat na stránku. Při tom, když jsem si to napsal normálně procedurálně( připojení k DB, výběr DB + dotaz a mysql_fetch_array), tak mi to vyplivlo správný výstup.

Chtěl bych poprosit zdejší diskutující, jestli by mě nepomohli vyřešit tento malý problém, určitě to bude opět nějaká drobnost.

Předem děkuji za snahu, Aleš.

Obrázek, jak vypadá výstup z DB


<?php


          class Zkouska{


                private $db = NULL;
                private $jmeno_db = NULL;
                private $sql = NULL;

            
                // Připojení k DB se startuje při vytvoření objektu (tohle funguje)
                public function __construct()
                {

                  $this->pripojeni();

                }

                // Metoda zajišťující připojení k databázi
                public function pripojeni()
                {

                  $this->db = mysql_connect('localhost', 'root', '') or die(mysql_error());
                  $this->jmeno_db = mysql_select_db('wowko') or die(mysql_error());

                }
                
                // Timhle přiřadim do privátní proměnné $sql řetězec(dotaz na DB) (funguje)
                public function _nastavDotaz($sql)
                {

                    $this->sql = $sql;

                }
                
                // Touhle metodou provedu dotaz na databázi (funguje)
                public function dotaz($sql)
                {

                  $vysledek = mysql_query($sql);

                  $this->kontrolaDotazu($vysledek);
                  
                    return $vysledek;

                }
                
                /*
                    Když je v dotazu nějakej bordel, tak ho tahle metoda stopne a vypíše chybku
                    (funguje až podezřele dobře :D)
                */
                private function kontrolaDotazu($vysledek)
                {

                    if( !$vysledek ){
                    
                      die(mysql_error());
                      
                    }

                }

                // Tak a tady je to rozbitý :'( (asi cyklus while)
                public function ukazVystup()
                {

                  echo "<table border='1' cellpadding='3'>
                        <tr><th>ID</th><th>Race</th></tr>";
                        
                        while( $row = mysql_fetch_array( $this->dotaz( $this->sql )) ){

                          echo "<tr><td>$row[0]</td><td>$row[1]</td></tr>";

                        }
                        
                  echo "</table>";

                }

          }
          
          
          $data = new Zkouska();
          
          $data->_nastavDotaz("SELECT id_prof, name_prof FROM profession");
          
          $data->ukazVystup();


?>
Nox
Profil
Protože je to hodně nedomyšlené, v cyklu neustále posíláš nové dotazy (což je mj. psycho pro databázi) přes ->dotaz, takže je to jednak pořád true a druhak vždycky parsuješ první řádek toho stejnýho dotazu
Aleš Tichava
Profil
Děkuji mnohokrát za nakopnutí.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: