Ausgabe wahlweise in Tabellen/OOP

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Ausgabe wahlweise in Tabellen/OOP

    Hi Leute,

    ich brauch mal wieder eure Hilfe.
    Hab ne Klasse geschrieben. Jetzt möchte ich das die Ausgabe wahlweise in einer Tabelle geschieht. Aber dies sollte nicht Standardmäßig so sein. Also bringt es mir nichts wenn ich in die Klasse gleich Tabellen mit rein bringe. Da es dann ja Standardmäßig in eine Tabelle geschrieben werden würde. Denn es könnte ja auch sein das ich mal <li>....</li> benötige oder ähnliches.
    Ich hab es auch schon versucht eine Tabelle zu setzten um:
    Code:
    $pdo->printResult_all($myResult);
    Aber dies bringt mir auch wenig, weil er dann alle Datensätze in ein <td> rein haut!

    Hier noch meine Klasse hoffe ihr könnt mir helfen:
    PHP-Code:
    <?php 

    class mysql{
    protected  
    $dbh;
    function 
    mysql($user,$pass)
    {
    try
        {
     
            
    $this->dbh = new PDO('mysql:host=localhost;dbname=sp_blackperfect_1',$user,$pass);
        }

    catch (
    PDOException $e
        {
            print 
    "Fehler beim Öffnen der Datenbank: " $e->getMessage();
        }




    function 
    query($sql)
    {
    try

            
        return 
    $this->dbh->query($sql);
     
    }
    catch (
    PDOException $e
        {
            print 
    "Fehler beim Query ausführen: " $e->getMessage();
        }
    }
     


    function 
    printResult_all($myResult)
    {
    try
    {
        while (
    $statement $myResult->fetch())
        {
            
            
    print_r(current($statement));
            
    $statement NULL;
        }

    }    
    catch (
    PDOException $e
    {
            print 
    "Ausgabe Fehlgeschlagen: " $e->getMessage();
    }
        }    
            }



    $pdo = new mysql("***""***");
    $myResult $pdo->query("SELECT * FROM myHompage_navi");
    $pdo->printResult_all($myResult);
    ?>

  • #2
    z.B.
    PHP-Code:
    class mysql {
      ...
      function 
    printResult_all(outputer $outputer$myResult) {
        try {
            
    $outputer->header();
            while (
    $statement $myResult->fetch()) {
              
    $outputer->row($statement);
            }
            
    $outputer->footer();
        } catch (
    PDOException $e) {
                print 
    "Ausgabe Fehlgeschlagen: " $e->getMessage();
        }
      }
      ...
    }

    interface 
    outputer {
      function 
    header();
      function 
    footer();
      function 
    row();
    }
    class 
    outputer_tabelle implements outputer {
      function 
    header() { echo '<table>'; }
      function 
    footer() { echo '</table>'; }
      function 
    row($row) { echo '<tr><td>'print_r($row); echo '</td></tr>' }
    }
    class 
    outputer_liste implements outputer {
      function 
    header() { echo '<ul>'; }
      function 
    footer() { echo '</ul>'; }
      function 
    row($row) { echo '<li>'print_r($row); echo '</li>'; }
    }

    $pdo = new mysql();
    $myResult $pdo->query("SELECT * FROM myHompage_navi");
    $pdo->printResult_all(new outputer_tabelle(), $myResult);
    $pdo->printResult_all(new outputer_liste(), $myResult); 
    (ka ob das so geht, hab ich mir gerade aus dem Ärmel geschüttelt und man bedenke die Uhrzeit)
    Outputer könnte man ggf. mit statischen Methoden basteln -> performanter

    Abgesehen davon, dass printResult_all eigentlich nichts im mysql-Objekt zu suchen haben sollte, sondern dass query() ein Objekt zurück liefern sollte was eben solch eine Methode bereit stellt.

    Deine mysql-Klasse ist etwas verkorkst. Würde sich als Vererbung von PDO irgendwie besser machen und der Host und den DB-Namen sollte man nicht fest in den Konstruktor vercoden, außer man bastelt das dann auch richtig mit Singletons weiter auf.

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Also hab es mal versucht, aber leider kam da folgende Fehlermeldung:

      Fatal error: Declaration of outputer_liste::row() must be compatible with that of outputer::row() in D:\01 - Programme\03 - programmieren\xampp\htdocs\class.php on line 67

      Die Zeile ist 67 ist:

      Code:
        function header() { echo '<table>'; }
      Kann jemand was mit der Fehlermeldung was anfangen?

      Kommentar


      • #4
        Übersetz sie mal! Dann kannst Du es auch.

        row($row) und row()

        Kommentar


        • #5
          der fehler liegt im interface

          gruß
          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Die deklaration von "outputer_liste::row() " muss kompatibel sein mit "outputer::row()"! Nur was muss sich ändern im code?

            Kommentar


            • #7
              du must in deinem interface bei der entsprechenden funktion auch noch einen parameter angeben.

              gruß
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                danke euch, es funzt!

                Kommentar


                • #9
                  Outputer könnte man ggf. mit statischen Methoden basteln

                  Was hätte denn das für ein Vorteil wenn man, dies statisch macht?

                  Kommentar


                  • #10
                    Original geschrieben von ghostgambler
                    Outputer könnte man ggf. mit statischen Methoden basteln -> performanter

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar

                    Lädt...
                    X