- Ad -
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! Post your PHP questions here!

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.308
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
Ort: Hannover
Beiträge: 584
UzumakiNaruto ist zur Zeit noch ein unbeschriebenes Blatt
UzumakiNaruto eine Nachricht über ICQ schicken UzumakiNaruto eine Nachricht über MSN schicken UzumakiNaruto eine Nachricht über Yahoo! schicken
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
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.308
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.308
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: 680
fireweasel 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?
__________________
PHP-Code:
class Brick implements Throwable {
    
// ... 

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: 24.486
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: 2.925
combie befindet sich auf einem aufstrebenden Ast
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

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
belbit LiveSupport Script ansehen belbit LiveSupport Script

Schnellen und unkomplizierten Support im LiveSupport-Chat anbieten. Ohne Datenbank und in wenigen Sekunden installiert.

24.05.2012 EichbaumMedia | Kategorie: PHP/ Chat
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:32 Uhr.