Maresa P.: Contentpflege leicht gemacht?!

Hallo liebes Forum,

ich muss für ein Webprojekt eine Pflegeschnittstelle realisieren, über die sich mehrere Bereiche (News, Veranstaltungen, Mitarbeiter, ...) der Website pflegen lassen.

Die Inhalte der Bereiche sind alle im Artikelstiel:

z.B. News:

Newstitel
Newsdatum
Newstext
Verfasser
Bild
---------
Newstitel
Newsdatum
Newstext
Verfasser
Bild
---------
Newstitel
Newsdatum
Newstext
Verfasser
Bild
---------
[usw]

Jeder Bereich enthält jedoch etwas unterschiedliche Felder.

Veranstaltungen enthält z.B.

Veranstaltungstitel
Veranstaltungsdatum
Veranstaltungsort
Bild
---------
Veranstaltungstitel
Veranstaltungsdatum
Veranstaltungsort
Bild
---------
[usw]

Zu Verfügung habe ich Php und eine MySQL Datenbank.
Ich habe das ganz enun so realisiert:

folgende MySQL Tabelle angelegt:
CREATE TABLE inhalt (
id int( 11 ) NOT NULL AUTO_INCREMENT ,
b varchar( 8 ) NOT NULL default '',
i1 int( 11 ) NOT NULL default '0',
i2 int( 11 ) NOT NULL default '0',
i3 int( 11 ) NOT NULL default '0',
v1 varchar( 255 ) NOT NULL default '',
v2 varchar( 255 ) NOT NULL default '',
v3 varchar( 255 ) NOT NULL default '',
t1 text NOT NULL ,
t2 text NOT NULL ,
t3 text NOT NULL ,
f1 varchar( 255 ) NOT NULL default '',
f2 varchar( 255 ) NOT NULL default '',
f3 varchar( 255 ) NOT NULL default '',
f4 varchar( 255 ) NOT NULL default '',
d1 date NOT NULL default '0000-00-00',
d2 date NOT NULL default '0000-00-00',
PRIMARY KEY ( id )
) TYPE = MYISAM

und ein Script geschrieben, welches auf jeder Pflegeseite includiert wird:

// Speichern

if (isset($_REQUEST["speichern"])) {

(isset($_REQUEST["id"])) ? $query .= "UPDATE inhalt " : $query .= "INSERT INTO inhalt ";

$query .= "SET b='$b', i1='".$_POST["i1"]."', i2='".$_POST["i2"]."', i3='".$_POST["i3"]."', v1='".$_POST["v1"]."', v2='".$_POST["v2"]."', v3='".$_POST["v3"]."', t1='".$_POST["t1"]."', t2='".$_POST["t2"]."', t3='".$_POST["t3"]."', d1='".$_POST["d1"]."', d2='".$_POST["d2"]."' ";

if (isset($_REQUEST["id"])) {

$query .= "WHERE id = ".$_REQUEST["id"];
  $mysql_insert_id = $_REQUEST["id"];
 }

mysql_query($query);

if (!isset($mysql_insert_id))
  $mysql_insert_id = mysql_insert_id();

for ($i = 1; $i <= 4; $i++) {

// Dateiupload
  if (strlen($_FILES["f".$i]["name"]) > 0) {

$pfad = "../../upload/".$mysql_insert_id;

@mkdir($pfad);

// Kopieren der Datei auf dem Server
   if (move_uploaded_file($_FILES["f".$i]["tmp_name"], $pfad."/".$_FILES["f".$i]["name"]) == true) {

// Eintragen des Dateinamen in Datenbank
    mysql_query("
    UPDATE inhalt
    SET f$i = '".$_FILES["f".$i]["name"]."'
    WHERE id = $mysql_insert_id
    ;");
   }

}
 }

}

// Löschen

if (isset($_GET["del"])) {

mysql_query("
 DELETE
 FROM inhalt
 WHERE id = '".$_REQUEST["del"]."'
 ;");

deldir("../../upload/".$_GET["del"]);
}

// Daten zum editieren abfragen

if (isset($_REQUEST["edit"])) {

$query_return = mysql_query("
 SELECT *
 FROM inhalt
 WHERE id='".$_REQUEST["edit"]."'
 LIMIT 1
 ;");

$query_array = mysql_fetch_array($query_return);

echo '<input type="hidden" name="id" value="'.$query_array["id"].'">';
}

Das Ganze erscheint mir jedoch etwas zu umständlich!

Frage: gibt es da einfachere/bessere Alternativen. Wichtig ist, dass sich das Ganze schnell um ein paar Pflegebereiche erweitern lassen kann.

Kennt jemand ein gutes Tutorial hierzu?

Vielen Dank für euere Hilfe
MAresa

  1. Hello,

    Die Inhalte der Bereiche sind alle im Artikelstil:

    Jeder Bereich enthält jedoch etwas unterschiedliche Felder.

    Für solche Zwecke ist HTML ganz gut geeignet ;-)

    Ich will Dich jetzt nicht verklapsen, sondern einfach mal auf den Ursprung zurückleiten.
    Aus den HTML-Elementen kann man diverse Grundtypen (Items) für Veröffentlichungen bauen. Die definerit man dann jeweils in einer Bauvorschrift. dsa ergibt je eine Klasse.

    Diese Klasse kann man dann konfigurieren mittels CSS, das ergibt eine Collection der möglichen CSS-Komponenten zu dieser Klasse und den Vermerk der typischen (Defaults).

    User, Abteilungen, Aufgaben, Projekte und Kategorien können eigene personalisierte Defaults haben.

    Es gibt Seitentypen, die aus bestimmten Collections von Items betehen. Bei manchen Seitentypen sind diese fest vorgegeben, bei anderen können die Items alternativ und optional ergänzt oder unterdrückt werden. Das regelwerk für die Seite kann man in einem Syntaxdiagramm (In der Datenbank) festhalten.

    Jedes Item und jede Seite kan Eigentümer, Trusties, Eigenschaften (Erscheungsdatum, Freigaberegeln, Automatisch Löschung...) haben. Da die Metaeigenschaften nicht von Anfang an feststehen, werden auch diese in einer (oder zewi) Tabelle(n) gesammelt.

    Natüelich gibt es ein Loginsystem, eine Historiefunktion, ein ErrorLog, usw.

    Wenn Du alles fertig hast, kannst Du mir das System schicken *ggg*

    Oder schau doch einfach mal nach fertigen CM-Systemen, wie z.B., Typo 3

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  2. Hallo Maresa!

    Zu Verfügung habe ich Php und eine MySQL Datenbank.
    Ich habe das ganz enun so realisiert:
    [...]

    Du hättest besser nur einen Link zu Deinem Quellcode gepostet.

    $query .= "SET b='$b', i1='".$_POST["i1"]."', [...]
    $query .= "WHERE id = ".$_REQUEST["id"];

    Schau Dir doch mal "dclp FAQ 16.18. Wie kann ich bösartigen Code in SQL-Abfragen unterbinden?" an. Variablen direkt aus $_POST oder gar $_GET in ein SQL-Statement zu übernehmen ist relativ gefährlich.

    mysql_query($query);

    Wie wärs mit ein wenig Fehlerbehandlung?

    $query_return = mysql_query("
    SELECT *
    FROM inhalt [...]

    Vielleicht ist es für Dich ja auch noch interessant mal "dclp FAQ 16.14. Warum soll ich nicht SELECT * schreiben?" durchzulesen

    Das Ganze erscheint mir jedoch etwas zu umständlich!

    Vor allem imho unsicher und unsauber.

    MfG
    Götz

    --
    Losung für Mittwoch, 13. Oktober 2004
    Er ist's, der wechseln lässt Zeiten und Stunden; er setzt Könige ab und setzt Könige ein. (Daniel 2,21)
    Nicht der ist tüchtig, der sich selbst empfiehlt, sondern der, den der Herr empfiehlt. (2. Korinther 10,18)
    (http://www.losungen.de/heute.php3)
  3. Hallo,

    ohne jetzt näher auf Planung u. Konzept Deines Projektes einzugehen, hier etwas konstruktive Kritik:

    • bilde eigene Funktionen od. Klassen u. Methoden mit variablen Argumenten, statt einfach sequentiell zu codieren, damit das Programm modular und damit leicht erweiterbar, bzw. flexibel wird.
    • validiere User-Eingaben, bzw. Parameter allgem. immer u. demaskieren ggf.
    • maskiere Werte (kritische Zeichen), bevor sie in die DB gelangen...

    freundlichen Gruß
    Danny

    --
    Selfcode: fo:) br:& n4:& ie:% mo:) va:| de:] zu:) fl:| ss:) ls:& ls:& js:|
    Motto:    OpenSource - Das Wissen der Menschheit gehört der Welt!
  4. Hallo, MAresa,

    ich muss für ein Webprojekt eine Pflegeschnittstelle realisieren, über die sich mehrere Bereiche (News, Veranstaltungen, Mitarbeiter, ...) der Website pflegen lassen.

    das hört sich doch sehr nach Aufgaben für ein kleines Redaktionssystem bzw. Content-Management-System an.

    Hier kannst Du verschiedene kostenlose Systeme testen z.B. Mambo Open Source ...
    http://www.opensourcecms.com/

    Infos und Links zu Mambo Open Source findest Du hier ...
    http://de.wikipedia.org/wiki/Mambo_Open_Source

    Weitere Hilfe findest Du hier ...
    http://www.contentmanager.de

    Grüße,

    Sebastian