PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : EDITOR Klasse


ksticker
10.04.2008, 23:12:18
Ich habe mal eine Klasse geschrieben, mit welcher man ganz Simpel eine Tabelle übergibt und das Formular automatisch erzeugt wird, natürlich kann man das ganze auch in Templates auslagern und erweitern.
So kann man innerhalb von Minuten einen neuen Tabellen-Editor schreiben.
Ist Ideal für einen Adminbereich.


Hier die Klasse:

class editor
{
# Deklaration der Variablen
public $table_cols = array();
public $table_name = "";
public $aktionen = array();

function overview()
{
echo '<form action="" method="POST">';
#Variablen Deklaration und Definition
$primary_key = reset ( $this->table_cols );# Erstes Element aus Array auslesen (Erstes Element muss Primärschlüssel sein (ES WIRD DER INHALT GESPEICHERT NICHT DER INDEX)
$primary_key_index_calc = array_keys ($this->table_cols, $primary_key );
$primary_key_index = $primary_key_index_calc[0];
$end = end ($this->table_cols);
$end_index_calc = array_keys ($this->table_cols, $end);
$end_index = $end_index_calc[0];
$extend = '';
############################# FORMULAREINGABEN VERARBEITEN ########################
#####################VALUE VON SUBMIT-BUTTON ÄNDERN
if(isset($_POST['doaktion']) && isset($_POST['checkbox']) && ($_POST['aktion'] == "edit"))
{
$submit_value = "Speichern";
}else{
$submit_value = "Aktion durchführen";
}
#####################/VALUE VON SUBMIT-BUTTON ÄNDERN
##################### LÖSCHEN EINES DATENSATZES
if(isset($_POST['doaktion']) && isset($_POST['checkbox']) && ($_POST['aktion'] == "delete"))
{
$delete_id = implode(',', array_map('intval', $_POST['checkbox']));
MYSQL_QUERY("DELETE FROM ".$this->table_name." WHERE ".$primary_key_index." IN ($delete_id)");
}
##################### /LÖSCHEN EINES DATENSATZES
##################### SUCHFUNKTION
if(($_POST['searchword'] != "Suchbegriff" || $_POST['searchword'] == "") && isset($_POST['doaktion']))
{
$extend .= " WHERE MATCH (".$_POST['search_in'].") AGAINST ('+".$_POST['searchword']."*' IN BOOLEAN MODE)";
}
##################### /SUCHFUNKTION
##################### SQL- ORDERBY VORBEREITEN
if(isset($_POST['sort_by']) && isset($_POST['desc_asc']) && isset($_POST['doaktion']))
{
$extend .= " ORDER BY ".$_POST['sort_by'].' '.$_POST['desc_asc'];
}
##################### /SQL- ORDERBY VORBEREITEN
##################### BEARBEITETE DATEN SPEICHERN
if(($_POST['doaktion'] == "Speichern") && (isset($_POST['checkbox_saves'])))
{
$i = 0;
foreach ($this->table_cols as $realname => $alias)
{
if($alias != $primary_key)
{
$checkID = 0;
foreach($_POST[$realname] as $Inhalt)
{
MYSQL_QUERY("UPDATE ".$this->table_name." SET ".$realname." = '".$Inhalt."' WHERE ".$primary_key_index." = ".$_POST['checkbox_saves'][$checkID]."");
$checkID++;
}
}
}
}
##################### /BEARBEITETE DATEN SPEICHERN
echo '<table border="1" cellpadding="0" cellspacing="0" width="100%">';
echo '<tr>';
foreach ($this->table_cols as $realname => $alias)
{

echo "<td>$alias</td>";

#SQL - Abfrage vorbereiten
if($realname != $end_index)# Wenn der Index nicht mit dem letzten Element des Arrays übereinstimmt, das Komme anhängen
{
$spaltennamen .= $realname.",";
}else{
$spaltennamen .= $realname;
}
}
echo'</tr>';
$overview = MYSQL_QUERY("SELECT ".$spaltennamen." FROM ".$this->table_name.$extend);# SQL- Abfrage durchführen
print("SELECT ".$spaltennamen." FROM ".$this->table_name.$extend);

############################# TABELLE ERZEUGEN ###################################
while ($overview_ausgabe = MYSQL_FETCH_ASSOC($overview))#Ausgelesene in Array legen
{
echo '<tr>';
foreach ($this->table_cols as $realname => $alias)#Gehe das Array durch und gebe damit die SQL-Daten aus
{
if(isset($_POST['checkbox']) && ($_POST['aktion'] == "edit"))#Wenn die Checkbox gesetzt wurde dann
{
if((!in_array ($overview_ausgabe[$primary_key_index], $_POST['checkbox'])) && ($_POST['aktion'] == "edit"))#Wenn der Datensatz nicht ausgewählt wurde dann
{
if($alias == $primary_key)#Wenn dies gleich der Primärschlüssel ist dann Chechbox einblenden
{
echo'<td><input type="checkbox" name="checkbox[]" value="'.$overview_ausgabe[$realname].'[]">'.$overview_ausgabe[$realname].'</td>';
}else{#Wenn dies ungleich dem Primärschlüssel ist dann keine Checkbox
echo'<td>'.$overview_ausgabe[$realname].'</td>';
}
}else{#Wenn der Datensatz ausgewählt wurde dann
if($alias != $primary_key)#Wenn dies ungleich dem Primärschlüssel ist dann Inputfeld
{
echo'<td><input type="text" value="'.$overview_ausgabe[$realname].'" name="'.$realname.'[]"></td>';
}else{#Wenn dies gleich der Primärschlüssel ist dann kein Inputfeld einblenden
echo'<input type="hidden" name="checkbox_saves[]" value="'.$overview_ausgabe[$primary_key_index].'">';
echo'<td>'.$overview_ausgabe[$realname].'</td>';
}
}
}else{#wenn die Checkbox nicht gesetzt wurde, dann Standartausgabe
if($alias == $primary_key)#Wenn dies gleich der Primärschlüssel ist dann Chechbox einblenden
{
echo'<td><input type="checkbox" name="checkbox[]" value="'.$overview_ausgabe[$realname].'">'.$overview_ausgabe[$realname].'</td>';
}else{#Wenn dies ungleich dem Primärschlüssel ist dann keine Checkbox
echo'<td>'.$overview_ausgabe[$realname].'</td>';
}
}
}
#Wenn die ausgelesene ID(SQL) mit einer aus dem Array übereinstimmt dann andere Darstellung wählen
echo '</tr>';
}
echo'<table>';
############################# /TABELLE ERZEUGEN ###################################
############################# AKTIONEN OPTION ###################################
echo'<select name="aktion" size="1">';
foreach ($this->aktionen as $value => $aktion)
{
echo '<option value="'.$value.'"> '.$aktion.' </option>';
}
echo'</select>';
############################# /AKTIONEN OPTION ###################################
############################# SORTIEREN OPTION ###################################
echo'Sortieren: ';
echo'<select name="sort_by" size="1">';
foreach ($this->table_cols as $realname => $alias)
{
echo '<option value="'.$realname.'"> '.$alias.' </option>';
}
echo'</select>';
############################# /SORTIEREN OPTION ###################################
############################# DESC_ASC OPTION ####################### #############
echo'<select name="desc_asc" size="1">';
echo'<option value="ASC"> Aufsteigend </option>';
echo'<option value="DESC"> Absteigend </option>';
echo'</select>';
############################# /DESC_ASC OPTION ###################################
############################# SUCHFUNKTION #####################################
echo'<input type="text" value="Suchbegriff" name="searchword">';
echo'Suche in: ';
echo'<select name="search_in" size="1">';
foreach ($this->table_cols as $realname => $alias)
{
echo '<option value="'.$realname.'"> '.$alias.' </option>';
}
echo'</select>';
############################# /SUCHFUNKTION #####################################
echo'<input type="submit" name="doaktion" value="'.$submit_value.'">';
echo'</form>';
}

}

Und hier eine Beispielzuweisung:

$forenedit = new editor;
#Tabellenkopf Felder festlegen
$forenedit->table_cols['SQL-Spaltenname'] = "Alias";
$forenedit->table_name = "SQL-Tabelle";
$forenedit->aktionen['edit'] = "Bearbeiten";
$forenedit->aktionen['delete'] = "Loeschen";
# /Tabellenkopf Felder festlegen
$forenedit->overview();# Erstelle die Übersichtstabelle



P.S. Ich bin für Anregungen und Tipps dankbar :-)
Dies ist der erste Prototyp

|Coding
11.04.2008, 00:10:03
Eine Klasse mit einer Methode? :-)

ksticker
11.04.2008, 00:12:26
Wie gesagt ist ersteinmal der Prototyp.
Die Klasse wird noch erweitert, so das man wählen kann welche Spalten schreibar sind und wie schreibbare Felder dargestellt werden sollen.

Und Und Und ;-)

ksticker
11.04.2008, 00:25:48
Was für Methoden würdest Du denn noch erwarten?

|Coding
11.04.2008, 00:49:44
Wie gesagt ist ersteinmal der Prototyp.
Die Klasse wird noch erweitert, so das man wählen kann welche Spalten schreibar sind und wie schreibbare Felder dargestellt werden sollen.

Und Und Und ;-)

Dann bin ich mal auf die nächste Version gespannt :-)

Area51
11.04.2008, 07:12:01
Kleiner Tipp:
Kommentare, die immer mit einem # eingeleitet werden sind nicht so schön ;)

In meinen Augen wäre // Comment oder /* Comment
next line */ besser.