| 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! |
 |
|

11-02-2009, 15:58
|
|
|
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;
}
}
?>
|

11-02-2009, 16:08
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
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
|

11-02-2009, 16:08
|
|
UzumakiNaruto
Registrierter Benutzer
|
|
Registriert seit: Nov 2004
Ort: Hannover
Beiträge: 584
|
|
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
|

11-02-2009, 16:58
|
|
|
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
|

11-02-2009, 17:11
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
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
|

11-02-2009, 19:49
|
|
|
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
|

11-02-2009, 20:12
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
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
|

11-02-2009, 20:47
|
|
php_fussel
Newbie
|
|
Registriert seit: Jan 2009
Beiträge: 120
|
|
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
|

12-02-2009, 17:19
|
|
|
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
|

12-02-2009, 22:02
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
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 {
// ...
}
|

12-02-2009, 22:33
|
|
Peacie
Registrierter Benutzer
|
|
Registriert seit: Nov 2003
Beiträge: 341
|
|
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
|

12-02-2009, 22:57
|
|
|
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
|

12-02-2009, 23:17
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
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.
|

12-02-2009, 23:28
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
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.
Geändert von combie (12-02-2009 um 23:31 Uhr)
|

13-02-2009, 14:59
|
|
|
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
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| 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.
HTML-Code ist aus.
|
|
|
|
PHP News
|