Klasse zum Eintragen und Auslesen von Daten

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

  • Klasse zum Eintragen und Auslesen von Daten

    Hallo liebes Forum,

    ich beschäftige mich zur Zeit mit OOP, und habe jetzt eine Klasse geschrieben, mit der ich Daten in die MySQL-Datenbank eintragen und wieder auslesen kann. Gedacht ist diese dafür, von z.B. einem Newssystem oder Gästebuch verwendet zu werden.

    Meine Frage ist, ob das Sinn macht oder zu übertrieben ist, was Wiederverwertbarkeit von Code angeht?

    Habe mal den Code der Klasse mitgepostet, habe mir dann aber noch gedacht, dass man dann beim Funktiobsaufruf übergibt, welche Variablen eingetragen werden sollen.

    PHP-Code:
    <?php
    class entry
        
    {
            protected 
    $db;
            protected 
    $entries = array();
            protected 
    $table;
            
            public function 
    __construct($db$table)
            {
                
    $this->db    $db;
                
    $this->table $table;
            }
            
            public function 
    getEntries($num$sort 0)
            {
                if (
    $sort == 1) {
                    
    $sort 'ASC';
                } else {
                    
    $sort 'DESC';
                }
                
                
    $sql    'SELECT 
                              * 
                          FROM 
                              ' 
    .$this->table'
                          ORDER BY
                              id 
                          ' 
    .$sort'
                          LIMIT
                              3,' 
    .$num;
                
    $result $this->db->query($sql);
                
                while (
    $row $result->fetch_assoc()) {
                    
    $entries[] = $row;
                }
                
                return 
    $entries;
            }
            
            public function 
    makeEntry($name$text)
            {
                
    $sql    'INSERT INTO
                               ' 
    .$this->table'
                               (name, text, date_time)
                           VALUES
                               ("' 
    .$name'", "' .$text'", NOW())';
                
    $result $this->db->query($sql);
                
                return 
    $result;
            }
        }
    ?>

  • #2
    zwei anmerkungen meinerseits dazu:

    eine klasse sollte so allgemein gehalten, dass man sie mehrfach nutzen kann. also keine querries direkt in der klasse! und wieso hast du die eigenschaften auf protected gesetzt? da wäre doch private besser.

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

    Kommentar


    • #3
      ich würde noch felder einbauen .. damit kannst du dann auch mal ein count(*) schnell machen ohne was eigenes wieder zu machen

      und wenn du eine tabellen mit vielen attributen hast wird sich die DB freuen wenn du nur die ID haben willst
      und wieso hast du limit 3,X??? mach das doch auch noch dynamisch (die 3)

      und beim insert würde ich auch die attribute nicht festlegen sondern dynamisch erzeugen

      wenn du den UPDATE style dafür benutzt kannst du das ganz einfach machen

      Code:
      INSERT INTO table SET
      table_name = 'max',
      table_email = 'max@example.de';
      Gruß
      Uzu

      private Homepage

      Kommentar


      • #4
        ok, ich merke, dass das keine so gute idee ist...
        trotzdem danke für das feedback!

        ach und kropff, bei dir hab ich den einstieg in die oop bekommen

        mfg,
        ill-maestro

        Kommentar


        • #5
          Original geschrieben von ill-maestro
          ach und kropff, bei dir hab ich den einstieg in die oop bekommen
          ich habe aber nie gezeigt, wie man querries direkt in klassen haut

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

          Kommentar


          • #6
            Original geschrieben von Kropff
            ich habe aber nie gezeigt, wie man querries direkt in klassen haut

            peter
            soll das heissen, dass man das nicht machen sollte oder wie?

            achja, und bei meine klasse ist eigentlich dazu gedacht, vererbt zu werden, deswegen protected statt private

            Kommentar


            • #7
              Original geschrieben von ill-maestro
              soll das heissen, dass man das nicht machen sollte oder wie?
              also ich persönlich halte nichts davon. wie ich schon sagte, sollten klassen allgemein gehalten sein. und wenn man dort querries einbaut, so dienen sie nur noch einem zweck und können nicht mehr wiederverwendet werden.

              normalerweise zieht sich ein controller diese querries irgendwo her und reicht sie dann weiter. aber dazu habe ich schon zig varianten gesehen. ob nun sinnvoll oder nicht, sei mal dahingestellt. einer legt sie in der datenbank ab und zieht sie sich über eine spezielle methode in einer db-klasse. ein anderer baut dafür ein array mit einer referenz auf eine abstraktionsklasse und so weiter und so fort.

              außerdem muss man in php nicht komplett objektorientiert programmieren. manchmal kann man auch mit stinknormalen funktionen arbeiten, die dann hilfsaufgaben erfüllen, wie zum beispiel spezielle querries absetzen. aber das in ein thema, über das man wunderbar streiten kann. und ich sitze heute abend an einem tutorial, wie man formulare per css gestalten kann. hab also andere dinge im kopf.

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

              Kommentar


              • #8
                achja, und bei meine klasse ist eigentlich dazu gedacht, vererbt zu werden, deswegen protected statt private
                Hinsichtlich dieser Aussage ... nur ein kleiner Wink !

                Gruß php_fussel

                Kommentar


                • #9
                  Original geschrieben von Kropff
                  normalerweise zieht sich ein controller diese querries irgendwo her und reicht sie dann weiter. aber dazu habe ich schon zig varianten gesehen. ob nun sinnvoll oder nicht, sei mal dahingestellt. einer legt sie in der datenbank ab und zieht sie sich über eine spezielle methode in einer db-klasse. ein anderer baut dafür ein array mit einer referenz auf eine abstraktionsklasse und so weiter und so fort.
                  hast du/kennst du vielleicht ein beispiel dazu? und wieso sollte man keine queries in ne klasse bauen, wenn man weis, dass das gästebuch(klasse) eben zugriffe auf die DB braucht?

                  hoffe ihr könnt mir etwas erklären, ist nämlich mein erstes oop-projekt ^^

                  mfg,
                  ill maestro

                  Kommentar


                  • #10
                    Re: Klasse zum Eintragen und Auslesen von Daten

                    Original geschrieben von ill-maestro

                    ...
                    PHP-Code:
                    <?php
                    class entry
                        
                    {
                             public function 
                    __construct($db$table)
                            {
                                
                    $this->db    $db;
                                
                    $this->table $table;
                            }
                            
                            public function 
                    getEntries($num$sort 0)
                            {
                    ...
                    PHP-Code:
                                $sql    'SELECT 
                                              * 
                                          FROM 
                                              ' 
                    .$this->table'
                                          ORDER BY
                                              id 
                                          ' 
                    .$sort'
                                          LIMIT
                                              3,' 
                    .$num;
                                
                    $result $this->db->query($sql); 
                    ...
                    [/B]
                    Bevor du Parameter wie $this->table ungeprüft in einen SQL-Query einbaust, solltest du dich mit folgenden beiden Artikeln befassen:

                    SQL-Injection

                    mysql_real_escape_string()


                    Original geschrieben von Kropff

                    also ich persönlich halte nichts davon. wie ich schon sagte, sollten klassen allgemein gehalten sein. und wenn man dort querries einbaut, so dienen sie nur noch einem zweck und können nicht mehr wiederverwendet werden.
                    Wenn der Query allgemein genug gehalten ist, und die Parameter beliebig erweiterbar sind, warum sollte da (außer deiner ganz persönlichen Haltung) was dagegen sprechen?
                    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                    Kommentar


                    • #11
                      weil das ne einbahnstrasse wäre, die nur simple query zulässt.
                      joins etc (count, AS ) nur mit tricksen möglich.
                      und dann kann man sich das schon fast sparen.

                      für das nächste grössere projekt ( bei dem evtl joins gebraucht werden) würde man ne neue klasse programmieren und damit den sinn von OOP ein wenig verfehlen.
                      wiederverwertbarkeit

                      aber ist auch "nur" ne meinung

                      Kommentar


                      • #12
                        hmm, also ich hab bei dieser klasse hier mysqli benutzt, und soweit ich weis, muss man da bei einfachen queries nicht escapen sondern nur bei prepared statements, sonst hätt ich die schon escaped.

                        naja und zu den queries weis ich jetzt nicht was ich machen soll... klasse mit query oder ohne

                        Kommentar


                        • #13
                          Original geschrieben von ill-maestro
                          hmm, also ich hab bei dieser klasse hier mysqli benutzt, und soweit ich weis, muss man da bei einfachen queries nicht escapen sondern nur bei prepared statements, sonst hätt ich die schon escaped.
                          Tja, 50:50 Chance gehabt ... aber leider falsch geraten - es ist natuerlich andersherum.

                          (Aber wenigstens noch schoen den teach-Smilie mit drangepappt, um den eigenen Noob-Faktor zu belegen )
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Bahnhof!
                            Warum keine SQL Statements in Klassen?
                            Wohin sonst damit?
                            Die Modell Klassen des MVC sind doch der Optimale Ort dafür.

                            Wer es dann ein bisschen abstrakter haben möchte nimmt sich ein ORM, z.B. doctrine. Aber festlegen wird man sich irgendwo müssen. Da beist keine Maus einen Faden ab.
                            Zuletzt geändert von combie; 12.02.2009, 23:31.
                            Wir werden alle sterben

                            Kommentar


                            • #15
                              Original geschrieben von wahsaga
                              Tja, 50:50 Chance gehabt ... aber leider falsch geraten - es ist natuerlich andersherum.

                              (Aber wenigstens noch schoen den teach-Smilie mit drangepappt, um den eigenen Noob-Faktor zu belegen )
                              muahaha, ok, irren ist menschlich
                              der teach smiley war eh ent ernst gemeint

                              mfg, ill-maestro

                              Kommentar

                              Lädt...
                              X