php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 11-02-2009, 15:58
ill-maestro
 Guest
ill-maestro
Beiträge: n/a
Standard 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;
        }
    }
?>
Mit Zitat antworten
  #2 (permalink)  
Alt 11-02-2009, 16:08
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #3 (permalink)  
Alt 11-02-2009, 16:08
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #4 (permalink)  
Alt 11-02-2009, 16:58
ill-maestro
 Guest
ill-maestro
Beiträge: n/a
Standard

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
Mit Zitat antworten
  #5 (permalink)  
Alt 11-02-2009, 17:11
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
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
Mit Zitat antworten
  #6 (permalink)  
Alt 11-02-2009, 19:49
ill-maestro
 Guest
ill-maestro
Beiträge: n/a
Standard

Zitat:
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
Mit Zitat antworten
  #7 (permalink)  
Alt 11-02-2009, 20:12
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
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
Mit Zitat antworten
  #8 (permalink)  
Alt 11-02-2009, 20:47
php_fussel
 Newbie
Links : Onlinestatus : php_fussel ist offline
Registriert seit: Jan 2009
Beiträge: 120
php_fussel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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
Mit Zitat antworten
  #9 (permalink)  
Alt 12-02-2009, 17:19
ill-maestro
 Guest
ill-maestro
Beiträge: n/a
Standard

Zitat:
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
Mit Zitat antworten
  #10 (permalink)  
Alt 12-02-2009, 22:02
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard Re: Klasse zum Eintragen und Auslesen von Daten

Zitat:
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()


Zitat:
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?
Mit Zitat antworten
  #11 (permalink)  
Alt 12-02-2009, 22:33
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

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
__________________
Mibau Datendesign - Online Ferienwelt
Mit Zitat antworten
  #12 (permalink)  
Alt 12-02-2009, 22:57
ill-maestro
 Guest
ill-maestro
Beiträge: n/a
Standard

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
Mit Zitat antworten
  #13 (permalink)  
Alt 12-02-2009, 23:17
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
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.
Mit Zitat antworten
  #14 (permalink)  
Alt 12-02-2009, 23:28
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

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.
__________________
Wir werden alle sterben

Geändert von combie (12-02-2009 um 23:31 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 13-02-2009, 14:59
ill-maestro
 Guest
ill-maestro
Beiträge: n/a
Standard

Zitat:
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
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:59 Uhr.