Klasy php

Oto co na razie wymęczyłem: (połączenie z bazą, oraz wyświetlenie zawartości jednej z tabel)

<?phpclass sql{$mysqli;$que;connect(){$host="mysql.cba.pl";$user="drobok";$pass="qwerty";$db="not4you_tk";mysqli($host, $user, $pass, $db);

Tak na oko, to public/private masz wszędzie na odwrót, niż być powinno. Private to dostępne z wnętrza klasy, Public to dostępne z zewnątrz. Jeżeli nic nie wyświetla, to może włącz gdzieś wyświetlanie wszystkich błędów i ostrzeżeń.

EDIT:

A nie, przy:

private $mysqli;

private $que;

jest dobrze :wink:

Za dużo zmian. Ogólnie list_dzial powinien być public, a do reszty odwołuje się z konstruktorów. Dalej nie wywala żadnych błędów /wyników.

<?phpclass sql{$mysqli;$que;connect(){$host="mysql.cba.pl";$user="drobok";$pass="qwerty";$db="not4you_tk";mysqli($host, $user, $pass, $db);

Po włączeniu ostrzeżeń:

Rzeczywiście miałem wyłączone raportowanie błędów. Co może być przyczyną tego błędu ?

do każdej “globalnej” zmiennej i funkcji w klasie w php musisz dodać słówko " $this->"

czyli

to jak gdzieś uzywasz metody albo zmiennej to:

Albo tu:

Dodane 07.04.2012 (So) 14:42

Jeszcze onośnie

private function select(){

            $mysqli->query($que);

            if ($mysqli->connect_errno)

               $mysqli->connect_errno; 

            return $mysqli->fetch_array(MYSQLI_NUM);

        }

to poczytaj http://www.php.net/manual/en/book.mysqli.phpa na szybko to tak wygląda zwracanie wyników

if ($result = $mysqli->query($query)) {


    /* fetch associative array */

    while ($row = $result->fetch_assoc()) {

        printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);

    }


    /* free result set */

    $result->free();

}
<?php(E_ALL | E_STRICT);    class editor{        private function sql($query){            $host="mysql.cba.pl";            $user="drobok";            $pass="qwerty";            $db="not4you_tk";            $con = new mysqli($host, $user, $pass, $db);            return $con-query($query);        }        public function __construct($password){            if(!$this-pass($password)) echo 'zle haslo';        }        ($pass){            if(!isset($pass))return false;            $res=$this-sql("SELECT pass FROM test_haslo WHERE `pass`='".$pass."' LIMIT 1");            if($res-num_rows=0) return false;                return true;        }        public function list_dzial(){            $res=$this-sql("SELECT nr,tytul,acc,ile,ilosc FROM test_dzial");            $lista=$res-fetch_array(MYSQLI_ASSOC);            $i=0;            foreach($lista as $linia){                $testy[$i][0]= $linia['nr'];                $testy[$i][1]= $linia['tytul'];                $testy[$i][2]= $linia['acc'];                $testy[$i][3]= $linia['ile'];                $testy[$i][4]= $linia['ilosc'];                $i++;            }            return json_encode($testy);        }    }    = new editor('qwerty');    echo $zap-list_dzial();?[/code]

Dzięki waszym poradom dobrnąłem do końca :) Wywaliłem klasę sql, bo tylko zwiększała ilość kodu :)

Dlaczego twoim zdaniem while, jest lepszy niż http://php.net/manual/en/mysqli-result.fetch-array.php ?

//edit, @ostanie zdanie, coś mi ten foreach nie działa, nie wiem dlaczego, więc skorzystam z twojego rozwiązania tx :)

//tutaj moje pasy były

Twoja klasa jest źle zaprojektowana. Wiesz co zajmuje najwięcej czasu w połączeniu PHP z MySQL ? Właśnie połączenie, nie zerwanie połączenia, nie wykonanie zapytania ale połączenie. A w Twoim kodzie takie połączenie będzie wykonywane tyle razy ile tylko wykonasz zapytanie…

Rzeczywiście, dobra rada, zapomniałem zmienić jak dodałem pass :slight_smile:

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