Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z modelem
Forum PHP.pl > Forum > PHP
Onliner
Witam!
Piszę frameworka i zabrałem się za sterownik baz danych. Niestety jest problem, bo wyświetla tylko pierwszy znak wyniku . Podaję listingi:
Kontroler
  1. <?php
  2. class welcome extends Controller
  3. {
  4. var $test;
  5.    function index()
  6.    {
  7.        $this->modelik = $this->load->model('modelik');
  8.        $query = $this->modelik->test();
  9.        function szescian($n)
  10. {
  11.    return $n*$n*$n;
  12. }
  13.  
  14. $b = array_map("szescian", $query);
  15. print_r($b);
  16.        foreach($query as $this->test)
  17.        {
  18.            print $this->test['tekst'];
  19.            echo $this->test[tekst];
  20.        }
  21.    
  22.    }
  23.    
  24.    function elo()
  25.    {
  26.        echo('to elo ;p');
  27.    }
  28.  
  29. }
  30. ?>


Model:
  1. <?php
  2. class modelik extends Model
  3. {
  4.    function test()
  5.    {
  6.        return $this->db->query("SELECT * FROM `test` WHERE 1");
  7.    }
  8. }
  9. ?>


Sterownik db(tylko funkcja query):
  1. <?php
  2. function query($query, $typ = assoc)
  3.    {
  4.    
  5.        self::$counter++;
  6.        
  7.        /* Jeżeli wystąpiły błędy w połączeniu anulujemy wykonywanie zapytania */
  8.        if($dberrors == true)
  9.        {
  10.            error('[lib db] Nie można wykonać zapytania, gdyż połączenie z bazą danych nie zostało poprawnie nawiązane');
  11.        }
  12.        
  13.        /* Podmieniamy tag _PREFIX_ na prefix zapisany w ustawieniach skryptu */
  14.        str_replace('_PREFIX_', PREFIX, $query);
  15.        
  16.        $zapytanie = mysql_query($query);
  17.        
  18.        /* Jeżeli zapytanie zwróciło błąd, wyświetlamy je */
  19.        if(!$zapytanie)
  20.        {
  21.            error('Zapytanie mysql błędne! Kod błędu <br />' . mysql_errno() . ': ' . mysql_error());
  22.        }
  23.        
  24.        /*
  25.         
  26.         Wybór typu tablicy, którą ma zwrócić metoda
  27.         assoc - mysql_fetch_assoc
  28.         row - mysql_fetch_row
  29.         query - zwraca samo mysql_query
  30.         
  31.         */
  32.        
  33.        switch($typ)
  34.        {
  35.            case 'assoc':
  36.            return mysql_fetch_assoc($zapytanie);
  37.            break;
  38.            
  39.            case 'row':
  40.            return mysql_fetch_row($zapytanie);
  41.            break;
  42.            
  43.            case 'query':
  44.            return $zapytanie;
  45.            break;
  46.        }
  47. ?>


Loader(tylko funkcja ładująca model)
  1. <?php
  2. function model($path)
  3.    {
  4.    
  5.        if(!file_exists(APP_PATH . 'models/' . $path . '.php'))
  6.        {
  7.            error('[lib loader] Nie mogę znaleść modelu ' . $path . '! Prawdopodobnie nie ustawiłeś ścieżki dostępu do aplikacji w ustawieniach systemowych (configs/system.php)');
  8.        }
  9.        
  10.        include(APP_PATH . 'models/' . $path . '.php');
  11.        $model = new $path();
  12.        return $model;
  13.    
  14.    }
  15. ?>

No i zamiast otrzymać wynik (z kolumny test) l-testowanie, to otrzymuję:
Cytat
Array ( [id] => 1 [tekst] => 0 ) 11dd
Zyx
Funkcje mysql_fetch_xxx() pobierają tylko pojedynczy wiersz ze zbioru wyników. Swój sterownik zakodowałeś tak, że zwraca Ci tylko pierwszy wiersz, więc foreach iteruje Ci po jego elementach. Jak jeszcze do tego dodasz indeks tablicy, PHP traktuje to jako odwołanie do znaku tekstu i wychodzą takie oto głupoty. Przed zabieraniem się za pisanie frameworka wypadałoby znać takie rzeczy, gdyż są to podstawy.

Jeszcze kilka uwag odnośnie samego frameworka. Kod jest lekko masakryczny - nie trzymasz się jednej konwencji, tylko raz robisz tak, raz inaczej. Jeśli piszesz pod PHP4, to sam skazujesz się na problemy, a jeśli pod PHP5, to czemu nie korzystasz z tego, co ta wersja oferuje? Wziąłbyś takie PDO i nie miałbyś żadnych problemów ze sterownikiem, a co najwyżej byś go musiał rozbudować o jakieś opcje profilowania itd.
Onliner
Ludzie, troszkę wyrozumiałości ja mam 14 LAT i mimo swojego młodego wieku już wyciągam pieniądze z webdeveloperki. Czy to źle, że chłopak w moim wieku zamiast siedzieć na TIBII cały dzień chce zdobyć doświadczenie pisząc frameworka?
Zyx
W pierwszym poście nie było ani słowa o wieku. Pokazałeś kod, wystawiając go na ostrzał publiczny i mnie niespecjalnie obchodzi, ile kto ma lat (sam programowałem, gdy miałem 14) - mam kod i go analizuję. Dostałeś rozwiązanie problemu, kilka dodatkowych porad gratis odnośnie tego, jak pisać, by uniknąć później choć kilku dodatkowych problemów, a zamiast się ucieszyć i spróbować wcielić je w życie, by poprawić jakość kodu (tym bardziej gdy już ciągniesz z tego jakiś dochód), to złościsz się bez sensu.
Kildyt
Cytat(Onliner @ 18.04.2009, 21:20:13 ) *
Ludzie, troszkę wyrozumiałości ja mam 14 LAT i mimo swojego młodego wieku już wyciągam pieniądze z webdeveloperki. Czy to źle, że chłopak w moim wieku zamiast siedzieć na TIBII cały dzień chce zdobyć doświadczenie pisząc frameworka?
A co ma piernik do wiatraka?! Ja mam 16 i jakoś nie płaczę, że nic mi nie wychodzi w programowaniu. Nie szukaj sobie wymówki. Jak będziesz miał 20 napiszesz, że jesteś studentem itp.? 14 lat to nie jest mało.
Możesz zasugerować, że jesteś młody i niedoświadczony. Nie może to być wymówka od pracy. Jeżeli delikatnie zasugerujesz to oczywiście inni użytkownicy popatrzą na Ciebie innym okiem i postarają zaprowadzić Cię na dobrą drogę, abyś za kilka lat mógł innym pomagać.

Popracuj nad tabulacją. echo nie jest funkcją! Używaj angielskich nazw funkcji, klas itp. Jeżeli komentarz jest jedno liniowy, to nie jest dwu. Zacznij używasz skróconych warunków.

Ogólnie kod jest ładny. Nie denerwuj się. smile.gif Stres nic dobrego nie daje.
Crozin
IMO bierzesz się za pisanie FW nie mając tak naprawdę większego pojęcia jak on powinien wyglądać. Na Twoim miejscu radziłbym Ci zacząć pisać w jakimś już istniejącym, porządnym FW (np. Symfony czy ZF). Jednak zanim to zrobisz: naucz się porządnie tego języka. Jak zauważył Zyx naprawdę błahy błąd.

Nie rozumiem też po co robisz funkcję szescian() skoro istnieje już pow()?

ps: Włącz sobie raportowanie błędów (E_ALL | E_STRICT)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.