Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]PDO rozdzielenie akcji na metody
Forum PHP.pl > Forum > Przedszkole
areal
Witam,

Jak zrobić aby rozdzielić ten kod na mniejsze metody jak próbuje poniżej, tylko tak aby działało ? smile.gif

Mówiąc bardziej dokładnie, chodzi mi o rozdzielnie, całego kolosa, bo oczywiście gdy wszystko jest razem, to działa, ale chciałby aby była oddzielna metoda na łączeniu się z bazą, oddzielna na akcje na sql i oddzielna na wyświetlanie wszystkiego foreach. Gdy próbuje jakiś z tych klocków odłączyć i wywołać this jak np. tutaj z $this->view_tav przestaje to działać. Jest na to jakieś rozwiązanie?

Kod
class db {

        public function __construct() {

            $this->check_radio_is_clicked();
        }

        public function viev_tab() {
            echo '<table border=2> ';
            foreach ($zapytanie as $row) {
                echo "<tr><td>" . $row['Imie'] . "</td><td>" . $row['Nazwisko'] . "</td></tr>";
            }
            $zapytanie->closeCursor();
            echo '</tr></table>';
        }

        public function view_all() {
            try {
                $pdo = new PDO('mysql:host=127.0.0.1;dbname=mysql', 'root', '');
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /
            } catch (PDOException $e) { //
                die('Baza danych nie dziala popawnie');
            }
            $zapytanie = $pdo->query('SELECT * FROM osoby'); // /
            $this->viev_tab();
        }

        public function sortowanie() {
            try {
                $pdo = new PDO('mysql:host=127.0.0.1;dbname=mysql', 'root', ''); /
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch (PDOException $e) { //
                die('Baza danych nie dziala popawnie');
            }
            $zapytanie = $pdo->query('SELECT * FROM `osoby` ORDER BY `Imie` ASC'); //
            $this->view_tab();
        }

        public function check_radio_is_clicked() {
            $sortuj = $_GET['sortuj'];
            if ($sortuj == 'sortuj') {
                $this->sortowanie();
            } else {
                $this->view_all();
            }
        }

    }
com
  1. foreach ($zapytanie as $row)

w tym miejscu masz bład, nie możesz iterować po $zapytanie bo on tam nie istnieje.

zrób sobie pole w tej klasie w którym zapiszesz te dane a następnie je przeiteruj smile.gif

btw wgl źle zbudowana masz te klasę, obiekt pdo przekazuj tam jak property i na nim operuj, bo bez sensu sie łączyć z baza za każdym razem, na razie ta klasa nic Ci nie daje więcej niż jakbyś to zrobił strukturalnie smile.gif

Przykład:
  1. class displayTable
  2. {
  3. private $pdo = null;
  4. private $data = [];
  5. public function __construct(PDO $pdo) {
  6. $this->pdo = $pdo;
  7. }
  8.  
  9. private function viewTable() {
  10. $table = '<table border=2>';
  11. foreach ($this->data as $row) {
  12. $table .= '<tr><td>' . $row['Imie'] . '</td><td>' . $row['Nazwisko'] . '</td></tr>';
  13. }
  14. $table .= '</table>';
  15. $this->pdo->closeCursor();
  16. return $table;
  17. }
  18.  
  19. private function dataAll() {
  20. $this->data = $this->pdo->query('SELECT Imie, Nazwisko FROM osoby');
  21. }
  22.  
  23. private function dataSort() {
  24. $this->data = $this->pdo->query('SELECT Imie, Nazwisko FROM `osoby` ORDER BY `Imie` ASC');
  25. }
  26.  
  27. public function checkRadioIsClicked($sort) {
  28. if ($sort === 'sortuj') {
  29. $this->dataSort();
  30. } else {
  31. $this->dataAll();
  32. }
  33. return $this->viewTable();
  34. }
  35. }
  36.  
  37. try {
  38. $pdo = new PDO('mysql:host=127.0.0.1;dbname=mysql', 'root', '');
  39. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  40. $displayTable = new displayTable($pdo);
  41. $sort = isset($_GET['sortuj']) ? $_GET['sortuj'] : null;
  42. echo $displayTable->checkRadioIsClicked($sort);
  43. } catch (PDOException $e) {
  44. die('Baza danych nie dziala popawnie');
  45. }
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.