PHP: Projekt in OOP programmieren

klausschreiber

Well-known member
ID: 162475
L
6 Mai 2006
247
8
Hallo,

ich weiß zwar theoretisch, wie man eine Klasse aufbaut usw., wie man es halt in den zig Tutorials sieht, aber ich weiß nicht wirklich, wie man ein komplettes Projekt in OOP umsetzt.

Ich schreibe ein Projekt, wo man Dateien in verschiedenen Formaten hochladen kann und in beliebige Formate umwandeln kann und auch mehrere Dateien zu einer Datei zusammenfassen kann usw. Zuerst wird das Format der Datei geprüft und dann wird die Datei mithilfe eines regulären Ausdrucks in ein Array umgewandelt um sie problemlos in ein anderes Format umwandeln zu können. (Der Aufbau ist im Prinzip immer nach dem Schema "Name", "Notiz", "Name", "Notiz", ...) Vor der Umwandlung kann man sich auch eine Vorschau als HTML-Formulare anzeigen lassen, um z.B. noch ein paar Sachen manuell zu bearbeiten. Die Dateien kann man auch im zip-Format hoch- und runterladen und es soll mithilf einer Datenbank getrackt werden, welche Funktionen wie oft genutzt werden.

Das heißt ja, ich brauche eine Converter-Klasse, eine Zip-Klasse und eine Datenbankklasse, unter Umständen noch eine Tracking-Klasse (um zu Tracken, welche Funktion wie häufig genutzt wird).

Wie baue ich das aber jetzt korrekt auf, also was kommt alles in die Klassen rein und was gehört außerhalb der Klassen?

Findet die Kommunikation zwischen den Objekten größtenteils im nicht objektorientiertem Haupscript statt und ist damit folgender Weg der Richtige?:

  1. hochgeladene Dateien kommen im Hauptscript an
  2. Prüfung ob zip-Dateien dabei sind -> eventuell Weiterleitung an zip-Klasse
  3. Inhalt der Dateien jeweils als String in einem Array speichern
  4. Dateininhaltstrings nacheinander an Converterklasse übergeben
  5. Dateiformat im Hauptscript jeweils mittels einer Methode ala "converter->getFileformat()" abrufen (ddurch wird halt der Inhalt des private Objects "$this->FileFormat" abgerufen) und an Tracking Klasse weitergeben (die Tracking-Klasse enthält eine Instanz der Datenbankklasse)
  6. Falls eine Vorschau angezeigt werden soll, das erzeugte Array abholen, um im Hauptscript das Formular erzeugen zu können
  7. An Converterklasse nacheinander senden, in welche Formate die Inhalte umgewandelt werden sollen
  8. Fertige Dateien als Strings nacheinander abholen (z.B. mittels einer while-Schleife, wie bei Datenbanken)
  9. Strings nacheinander an zip-Klasse senden und dann ausgeben.
Oder ist der eigentlich richtige Weg, wirkllich alles in Klassen zu machen, sodass die Klassen untereinander direkt kommunizieren? Also:

  1. Die POST-Inhalte werden vom Hauptscript so, wie sie sind, an die Converter-Klasse übergeben.
  2. Die Converter-Klasse entzippt eventuelle zip-Dateien mithilfe einer Instanz der zip-Klasse.
  3. Die Converterklasse überprüft selber, in was für Formate die Dateien umgewandelt werden sollen und macht all dies und sendet auch die infos an die Trackingklasse
  4. Am Ende ruft das Hauptscript die fertige zip-Datei ab und sendet sie an den Browser.

Die Frage ist vielleicht etwas komisch, aber ich will halt lernen, wie man so etwas als guter Programmierer umsetzen würde. Für das Vorschauformular muss ja doch auf jedenfall das Array an das Hauptscript übergeben werden, weil das Aussehen einer Webseite bzw. eines Formular generiert man ja doch nicht in der Klasse, oder?


Würde mich über Hilfe sehr freuen,
Danke, Klaus
 
Ich würde für sowas nix mehr selber entwickeln, gleich das Zend Framework nutzen. Hat alles schon was du für den Upload brauchst. Ist komplett OOP, wird ständig weiter entwickelt, Und ne astreine DB sowie Logger Klassen hat es auch.

*Jetzt wird sich Ice Breaker freuen;)
 
Zuletzt bearbeitet:
Danke für deine Antwort. Jo, das Zend-Framework will ich schon seit längerem mal anschauen, habe es aber bisher noch nicht getan.

Auch wenn es über das Zend-Framework vielleicht einfacher ginge, möchte ich jedoch gerne wissen/lernen, wie man ein komplettes Projekt bzw. halt dieses geplante Projekt objektorientiert umsetzt. Im Prinzip steht auch schon eine funktionsfähige Alpha/Beta-Version des Codes, also auch Upload usw. Ich habe das Projekt aber erstmal mit prozedualer Porgrammierung begonnen und möchte den Code nun in objektorientierten Code umschreiben, bevor ich weitermache.
 
Ich würde für sowas nix mehr selber entwickeln
da gebe ich dir Recht

gleich das Zend Framework nutzen. Hat alles schon was du für den Upload brauchst. Ist komplett OOP, wird ständig weiter entwickelt, Und ne astreine DB sowie Logger Klassen hat es auch.
Da gebe ich dir nur bedingt Recht, auch wenn wir beide das Zf für uns als bestes Framework ausgesucht haben, kann der nächste vllt CodeIgniter, Symfony oder co besser finden.

möchte ich jedoch gerne wissen/lernen, wie man ein komplettes Projekt bzw. halt dieses geplante Projekt objektorientiert umsetzt.
erstmal eben über einen MVC-Ansatz.
Und weiter kann man dir auch nicht helfen, denn du schreibst ein bisschen wischi-waschi was die Anwendung machen soll, aber um nen Konzept auszuarbeiten braucht man doch deutlich mehr Infos.

Ich persönlich habe deinen Post als Library verstanden, also eine Library was die Konvertierungen macht und objektorientiert funktioniert, die Daten mit denen die Library gefüttert werden, sind da ja erstmal egal.

Ich kann dir nur empfehlen dich mal in die Dokus einiger Frameworks einzulesen und daraus zu lernen, denn die haben doch relativ oft sehr gute Ansätze.
 
danke für deine Antwort. Die Dokus werde ich mir nachher mal anschauen.
Hmm, habs halt versucht, so kurz wie möglich zu beschreiben. Ich versuche es mal nochmal.
Vielleicht versuche ich es mal anhand von Kontoauszügen zu erklären. Welche Daten es letztendlich sind, ist ja egal.

Wenn man eine Banking-Software benutzt, kann man seine Kontoauszüge ja als Datei exportieren/sichern. Nun hat ja jede Software ein anderes Sicherungsformat. Eine Software exportiert die Daten vielleicht folgendermaßen: "Empfänger, Verwendungszweck, Betrag", eine andere Software hingegen vielleicht so: "Betrag | Empfänger | Verwendungszweck".

Hat man nun auf einem Computer Software A im Einsatz und auf einem anderen Computer Software B, möchte aber ab sofort Software C benutzen, kann man bei meinem Script die exportierten Dateien der Software A und B gemeinsam (auch gezippt) hochladen und mein Script wandelt das Format der beiden Dateien in das Format der Software C um.
Vielleicht hat man aber auch nur Software A im Einsatz und möchte ab sofort Software E und Software B nutzen, dann kann man die exportierte Datei der Software A hochladen und erhält die Datei einmal für Software B und einmal für Software E, als zip komprimiert.
Zusätzlich gibt es aber vor dem endgültigem Umwandeln auf Wunsch noch eine Vorschaufunktion. Möchte man z.B. schauen, ob mein Script die Dateien richtig eingelesen hat, oder noch ein paar Sachen ausbessern, weil z.B. die Bankingsoftware beim Verwendungszweck ein paar Zeichen falsch exportiert hat,so kann man sich die Daten der eingelesen Dateien in einem Formluar anzeigen lassen und bearbeiten.


Nun ist eben meine Frage, ob es bei der objektorientierten Programmierung in PHP trotzdem noch ein prozedurales Hauptscript gibt, dass die Dateien aus dem Upload oder die Daten aus dem Formular entgegennimmt und an die Konverter-Klasse weiterleitet. Danach dann die konvertierten Dateien entgegennimmt und sie an die zip-Klasse weiterleitet und außerdem noch abfrägt, welche Dateiformate konvertiert wurden, um diese Infos dann an die Tracking-Klasse weitergibt.

Rein theoretisch könnte man ja alles innerhalb der Klasse machen, z.B. dass gleich im Konstruktor der Klasse ein
PHP:
if(isse($_POST['submit'])) {...}
steht, aber so ist das ja bestimmt nicht gedacht?

Aber z.B. bei der Kommunikation zwischen Konverter und zip-Klasse könnte man es ja entweder so machen, dass die beiden Klassen komplett unabhängig voneinander sind und das Hauptscript die konvertierten (noch nicht gezippten) Dateien der Konverter-Klasse entgegen nimmt und dann an die zip-Klasse weiterleitet oder alternativ,
dass man in der Konverter-Klasse eine Instanz der zip-Klasse erzeugt, die Konverter-Klasse die Dateien also an die zip-Klasse weitergibt und dann das Hauptscript von der Konverter-Klasse die bereits fertig gezippten Dateien bekommt.


Ich hoffe, dass es so nun verständlicher ist, aber ich werde auch selbst mal in den Dokus der Frameworks schauen, ob ich dort was finde.
Auf jedenfall schonmal vielen Dank für die Hilfe,
Klaus
 
eine Klasse dient der Kapselung und der Abstraktion, wenn man eine Klasse gut geschrieben hat, kann man sie 1:1 kopieren und in einem anderen Projekt nutzen.
Meinst du, dass wenn du in einer Klasse auf $_POST zugreifst, dass das ne Kapselung ist?

also ich würde das so angehen:
Es gibt die BankConverter-Klasse diese erwartet die Bank-Daten in einer standardisierten Form, ich nehme mal nun das BankData-Object dafür.
Da du aber das Bankformat XYZ hast musst du dieses erst in die Normalform bringen BankData_XYZ::create(...) das returnt dann die Bank-Daten in der Normalform, die wir an den BankConverter geben können.
Die Zip-Klasse ist wieder KOMLPETT unabhängig von allem anderen und ist nur eine "abstrakte" Implementierung zum Zippen von Daten.
 
vielen Dank für deine Antwort. So langsam blicke ich es glaub besser^^.

verstehe ich das richtig, dass du für jedes Dateiformat eine eigene Klasse machen würdest (habe das "BankData_XYZ::create(...)" so verstanden), um die Daten auf eine standardisierte Form zu bringen? Auch wenn die Umwandlung nur wenige Zeilen umfasst?
Die kürzeste Umwandlung ist so kurz:
PHP:
$regexp = "/^[ ]*(?<player>[^~]{5,})~(?<notes>.*)>/m";
preg_match_all($regexp, $file, $array, PREG_SET_ORDER);
foreach ($array as $element) {
    $element['notes'] = trim($element['notes']);
    $notes = Notes2Array("PartyPoker", $element['player'], $element['notes'], "\x09", $notes);
}
Die Umwandlung der anderen Formate umfasst meist auch nur 2-3 Zeilen mehr. Es ist dann zwar noch nicht das entgültige Format (noch kein Array), aber der Rest ist dann bei allen Formaten gleich, weshalb der Rest dann bisher (bei meinem bisher nicht objektorientiertem Script) durch eine Funktion erledigt wird.


Dass die zip-Klasse komplett unabhängig von allen anderen Klassen ist, ist mir klar. Aber ist auch die BankConverter-Klasse komplett unabhängig von der zip-Klasse? Ich denke, ja, weil die BankKonverter-Klasse auch ohne zip-Klasse einen Sinn ergeben würde, weil man die Dateien ja auch unkomprimiert ausgeben könnte, oder?

Sehe ich das aber richtig, dass die Tracking-Klasse abhängig von der Datenbank-Klasse ist, weil ohne eine Datenbank das Tracking ja praktisch nicht funktioniert?
 
verstehe ich das richtig, dass du für jedes Dateiformat eine eigene Klasse machen würdest (habe das "BankData_XYZ::create(...)" so verstanden), um die Daten auf eine standardisierte Form zu bringen? Auch wenn die Umwandlung nur wenige Zeilen umfasst?
jup, finde ich eine schönere Form.
Auch wenn es momentan unnötig ist, kann es ja mal sein, dass in Zukuunft komplexe Umwandlungen kommen, von XML in sonstwas usw

Es ist dann zwar noch nicht das entgültige Format (noch kein Array), aber der Rest ist dann bei allen Formaten gleich, weshalb der Rest dann bisher (bei meinem bisher nicht objektorientiertem Script) durch eine Funktion erledigt wird.
so habe ich das auch gedacht, erst alle Formate auf einen gemeinsamen Nenner bringen und dann die Konvertierung machen

Dass die zip-Klasse komplett unabhängig von allen anderen Klassen ist, ist mir klar. Aber ist auch die BankConverter-Klasse komplett unabhängig von der zip-Klasse? Ich denke, ja, weil die BankKonverter-Klasse auch ohne zip-Klasse einen Sinn ergeben würde, weil man die Dateien ja auch unkomprimiert ausgeben könnte, oder?
richtig

Sehe ich das aber richtig, dass die Tracking-Klasse abhängig von der Datenbank-Klasse ist, weil ohne eine Datenbank das Tracking ja praktisch nicht funktioniert?
das ist falsch und richtig zu gleich, eben ein Grenzfall.
erstmal hast du Recht mit deinem Ansatz, aber es stimmt eben nicht zu 100%.
Wer sagt denn, dass man das Tracking nur in eine Datenbank machen kann?
Es könnte ja auch eine API gesendet oder in eine Datei geloggt werden.
Da bastelt man meistens sogenannte "Adapter".
Man definiert eine Schnittstelle die alle Adapter erfüllen müssen und kann dann die versch. Adapter implementieren.
Man kann es sich aber auch einfacher machen: es abhängig von der DB-Klasse zu machen, wenn eh gewiss ist, dass man die Daten nirgends anders speichern sollte.
 
ok, vielen Dank für deine ausführliche Antwort.
Ich habe jetzt mal einen Beispielcode auf diese Weise geschrieben, wie ich dich verstanden habe (So Sachen, wie die Prüfung, ob das Uploadformular abgeschickt wurde usw. habe ich im Beispielcode mal weggelassen). Aber ich habe dabei festgestellt, dass insbesondere in der Hauptdatei bei der Softwareerkennung ja viele Sachen mehrfach geschrieben werden müssen. Ist das wirklich so richtig?

Datei mit den Einlese-Klassen: (Dass ich die Daten bei getData einzeln zurückgebe und nicht einfach das mehrdimensionale Array "$this->data", dass mir preg_match_all erstellt hat, liegt daran, dass dieses Array nicht bei jeder Software gleich wäre, z.B. lasse ich eine Datei mittels SimpleXML einlesen)
PHP:
class BankData_SoftwareA {
    private $data;
    public function parse($file) // ließt die Datei ein
    {
        preg_match_all("regulärer Ausdruck", $file, $this->data, PREG_SET_ORDER);
    }
    public function getData() // Gibt die Daten einzeln zurück
    {
        return(each($this->data));
    }
}
class BankData_SoftwareB {
    // Im Prinzip analog zu BankDara_SoftwareA
}
Datei mit der BankConverter-Klasse
PHP:
class BankConverter {
    private $array;
    private $files;
    public function setData($data)
    {
        $this->array[] = $data; // Umwandlung in weiterverarbeitbares Array, ist in echt natürlich komplizierter aufgebaut
    }
    public function getPreview()
    {
        return $this->array;
    }
    public function to_SoftwareA()
    {
        // Umwandlung ins Format der Software A
        $this->files[] = "Dateiinhalt";
    }
    public function to_SoftwareB()
    {
        // Umwandlung ins Format der Software B
        $this->files[] = "Dateiinhalt";
    }
    public function getFiles()
    {
        return $this->files;
    }
}
Hauptdatei:
PHP:
$Tracker = new Tracker;
$BankConverter = new BankConverter;
$count = count($_FILES['notes']['tmp_name']);

for ($i=0; $i<$count; $i++) {
    $file = file_get_contents($_FILES['notes']['tmp_name'][$i]); // Dateiinhalt in Variable speichern
    if (Erkennung Software A) {
        $BankData_SoftwareA = new BankData_SoftwareA;
        $BankData_SoftwareA->parse($file); // Datei einlesen
        while($BankData_SoftwareA->getData() = $data) {
            $BankConverter->setData($data); //Daten an die BankKonverter-Klasse weitergeben
        }
        $Tracker->setFormat("Software A");    // Tracking des Formats der Datei
    }
    elseif (Erkennung Software B) {
        // Analog zu Software A
    }
}

if (Vorschau gewünscht) { //Vorschauformular ausgeben
    echo "<form>";
    foreach($BankConverter->getPreview as $data) {
        echo $data['Empfänger'];
        // usw.
    }
    echo "<form />";
}

else { // Wenn keine Vorschau gewünscht
    if (gewünschtes-Format == SoftwareA) {
        $BankConverter->to_SoftwareA; // Umwandlung in das Dateiforamt der Software A
    }
    if (gewünschtes-Format == SoftwareB) {
        $BankConverter->to_SoftwareB;
    }
    $zip = new zip;
    foreach ($BankConverter->getFiles as $file) { // Jede Datei an die zip-Klasse schicken
           $zip->zipFile($file);
    }
    $zip->getFile; // zur Ausgabe der komprimierten Datei
}
 
Hallo,
Also OOP ist nicht nur was du haben willst !
OOP das beschäfige ich mich gerade daran für php5 und msqli

es gibt mehr befehle und es wurde verbessert im gegen satz zu php4
( ist C++) schon drann nicht mehr ähnlich

Hast du so ein grosses Projekt oder Script wo du OOP brauchst ?

OOP ist gedacht für mehre Programmier zusammen zu arbeiten.

OOP ist gedacht für Programmierer die teuer sind schnelle arbeiten machen zu können

OOP ist für den leihen nicht einfach zu verstehen (Quellcode)

( Aber für mich ps: das beste Sytem )

mfg
 
Ich würde ebenfalls für jedes größere Projekt zu einem Framework raten. Seit Version 1.2 ist symfony mein Favorit geworden und hat das ZendFramework in dieser Rolle abgelöst. Hohe Modularität, viele Tools, CRUD etc. sind Sachen, die ich von einem Framework erwarte und das bietet symfony nun endlich. Statt propel/creole verwenden zu müssen, hat man nun z.B. die Freiheit doctrine/pdo einzusetzen.
Das ZF ist zwar gut konzeptioniert aber kaum mehr als eine gut organisierte Klassensammlung. Der Einstieg ist jedoch einfacher als bei symfony, zugegeben.
 
Ein Vergleich von Äpfel und Birnen :wall:
Symfony ist ein Full-Stack-Framework und das Zf ein Glue-Framework, aus diesem Grunde erfüllen beide Frameworks genau was sie versprechen.
 
Sag ich doch, das Zf ist ne Klassensammlung, symfony ist ein vernünftiges Framework. Die Schlagworte retten dich nicht.
 
wow, hier war ja richtig was los. Ich bin leider die letzten Tage nicht dazu gekommen, weiter zu machen, aber jetzt bin ich grad wieder drann. Jo, ein Framework wäre vielleicht geschickter, aber wie gesagt, möchte ich es erst mal so machen. Das Projekt ist eigentlich auch nicht so rießig groß und in ein Framework müsste ich mich ja auch erst einarbeiten.
Ich habe mal noch eine Frage.

ice-breaker schrieb:
klausschreiber schrieb:
verstehe ich das richtig, dass du für jedes Dateiformat eine eigene Klasse machen würdest (habe das "BankData_XYZ::create(...)" so verstanden), um die Daten auf eine standardisierte Form zu bringen? Auch wenn die Umwandlung nur wenige Zeilen umfasst?
jup, finde ich eine schönere Form.
Auch wenn es momentan unnötig ist, kann es ja mal sein, dass in Zukuunft komplexe Umwandlungen kommen, von XML in sonstwas usw

klausschreiber schrieb:
Es ist dann zwar noch nicht das entgültige Format (noch kein Array), aber der Rest ist dann bei allen Formaten gleich, weshalb der Rest dann bisher (bei meinem bisher nicht objektorientiertem Script) durch eine Funktion erledigt wird.
so habe ich das auch gedacht, erst alle Formate auf einen gemeinsamen Nenner bringen und dann die Konvertierung machen
Eine Überweisung kann ja einen mehrzeiligen Verwendungszweck haben. Die Trennung der Zeilen erfolgt bei allen Formaten durch ein bestimmtes Trennzeichen, das jedoch von Format zu Format unterschiedlich ist.

Theoretisch könnte ich die Trennung der einnzelnen Zeilen anhand der Zeilentrennzeichen dann ja in der BankConverter-Klasse machen und dieser das Trennzeichen mitgeben. Aber wenn ich es richtig verstanden habe, dann sollten, auch wenn es im Grunde immer gleich abläuft, trotzdem die BankData-Klassen das vollständige Parsen übernehmen, weil man sie dadurch theoretisch auch für andere Projekte verwenden könnten?


Noch eine weitere Frage: Die BankConverter-Klasse ist ja eigentlich auf die BankData-Klassen angewiesen. Bisher hatte ich die Kommunikation zwischen BankData und BankConverter-Klasse folgendermaßen gedacht.

BankData_XY-Klasse:
PHP:
// Rückgabe der eingelesenen Tranaktionen (eine Transaktion nach der Anderen)
public function getData()
{
    return(next($this->dataarray));
}
Hauptscript:
PHP:
$BankData_XY = new BankData_XY($file); // Objekt erstellen und die eingelesene Datei übergeben
while($bankdata = $BankData_XY->getData()) { // Banktransaktionen auslesen
    $BankConverter->SetData($bankdata); // Daten an BankConverter-Klasse weitergeben
}
unset($BankData_XY); // Objekt wieder löschen
Aber da die BankConverter Klasse ja auf die BankData-Klassen angewiesen ist, könnte ich doch auch gleich den Dateiinhalt an die BankConverter-Klasse übergeben, diese dann prüfen lassen, welches Format die Daten haben und dann die BankConverter-Klasse die Daten an die passende BankData-Klasse übergeben lassen und wieder abrufen, oder?


Dann noch die letzte Frage: In den jeweiligen BankData-Klassen gibt es Teile, die in mehreren BankData-Klassen die selben sind, nur mit anderen Daten. Man könnte also ein paar Methoden auslagern, die in mehreren Klasen vorkommen. Sind dafür dann abstrakte Klassen zuständig? Also eine abstrakte Klasse, die die benötigten Eigenschaften als abstrakte Eigenschaften enthält und dann noch die Methoden, die jedoch nicht abstrakt sind?


Danke und Gruß,
Klaus
 
Theoretisch könnte ich die Trennung der einnzelnen Zeilen anhand der Zeilentrennzeichen dann ja in der BankConverter-Klasse machen und dieser das Trennzeichen mitgeben. Aber wenn ich es richtig verstanden habe, dann sollten, auch wenn es im Grunde immer gleich abläuft, trotzdem die BankData-Klassen das vollständige Parsen übernehmen, weil man sie dadurch theoretisch auch für andere Projekte verwenden könnten?
ich habe nun vergessen was was war (ist aus den Namen auch net wirklich ersichtlich).
Aber das Trennzeichen sollte von der Klasse behandelt werden die Format X in deine Referenz-Representation Y bringt, welche dann von deiner Bank-Klasse behandelt werden kann.


Dann noch die letzte Frage: In den jeweiligen BankData-Klassen gibt es Teile, die in mehreren BankData-Klassen die selben sind, nur mit anderen Daten. Man könnte also ein paar Methoden auslagern, die in mehreren Klasen vorkommen. Sind dafür dann abstrakte Klassen zuständig? Also eine abstrakte Klasse, die die benötigten Eigenschaften als abstrakte Eigenschaften enthält und dann noch die Methoden, die jedoch nicht abstrakt sind?
jup


also wenn du in einfachen Worten (also möglichst wenig zu lesen ^^, Aufzählungspunte ;)) nochmal genau alle Funktionen rüberbringst, und was der Sinn hinter allem ist, könnte ich mir mal 10min nehmen und nen ganz groben Entwurf machen.
 
Vielen Dank für deine Hilfe.
Ich versuchs mal, das ganze in knappen Worten nochmal zu beschreiben.

Da es mit dem Bankbeispiel wohl am einfachsten zu verstehen ist und sich das Ganze 1:1 auf mein Projekt (Playnernotes bzw. Spielernotizen beim Onlinepoker) übertragen lässt, bleibe ich bei der Bank.


  • Meine Seite kann die (z.B. exportierten) Daten verschiedener Bankingsoftwares in das gewünschte Format umwandeln (z.B. "WISO Mein Geld" zu "Star Money" usw.)
  • es können auch mehrere Dateien gleichzeitig hochgeladen werden, einzeln, oder als .zip-Datei, die dann in das gewünschte Format als eine Datei umgewandelt werden.
  • es wird automatisch erkannt, um welches Datenformat es sich bei der jeweiligen hochgeladenen Datei handelt (ob von WISO, StarMoney, oder ...)
  • gelesen werden die meisten Dateiformate mit "preg_match_all", weshalb sich mancher Code wiederholen kann (gibt jedoch auch ein Format, wo stattdessen SimpleXML verwendet wird)
  • Die Daten können leicht auf folgende Arrayform gebracht werden: "Banking Software, Empfängerkontonummer, (mehrzeiliger) Verwendungszweck, ..." (Der mehrzeilige Verwendungszweck wäre dann wohl auch ein Array, halt jede Zeile ein Element. Die Info, von welcher Software die Daten kommen, wird benötigt)
  • Um die Daten dann gut weiterverabeiten zu können, werden die ausgelesenen Daten aller hochgeladenen Dateien dann zu einem mehrdimensionalen Array zusammengefasst
  • Es werden auf Wunsch des Benutzers noch einige Anpassungen vorgenommen (z.B. die Entfernung doppelt vorhandener Datensätze)
  • Es wird dem Benutzer auf Wunsch eine bearbeitbare Vorschau der eingelesenen Daten angezeigt (z.B. meine Webseite hat bei einem Verwendungszweck Mist gebaut und der Nutzer korrigiert den Verwendungszweck)
  • Dem Benutzer werden die Daten im gewünschten Dateiformat zum Download angeboten
  • Falls der Nutzer z.B. eine "WISO Mein Geld"-Datei hochgeladen hat und sie sowohl im "Quicken", als auch im "StarMoney" Format will, werden im die beiden Dateien zu einer Datei gezippt zum Downloa angeboten.
  • Es soll in einer Datenbank getrackt werden, welche Dateiformate hochgeladen werden usw. (ist aber im Prinzip erstmal nicht so wichtig)
Ist jetzt leider doch wieder ein Haufen Text geworden 8O.

Superkurzform:
Rudi hat bisher auf seinem Laptop "WISO Mein Geld" und auf seinem PC "Quicken" benutzt. Ab jetzt will er auf beiden PC's entweder "StarMoney" oder "T-Online Banking" benutzen, da ist er sich noch nicht sicher. Da er eine langsame Internetverbindung hat zippt er die Datendateien von WISO und Quicken und lädt die zip-Datei hoch. Da manche Datensätze in beiden Programmen gespeichert waren, macht er einen Haken bei "Doppelte Datensätze löschen". Außerdem lässt er sich eine Vorschau anzeigen. Am Ende werden im seine Datensätze gezippt sowohl im StarMoney, als auch im T-Online Format ausgespuckt.


Ich hoffe mal, das passt so, falls du es anders wolltest, einfach sagen. Ich könnte es natürlich auch mit den Daten/Dateiformaten erklären , die in Wirklichkeit konvertiert werden (vielleicht würde dann das Vorhaben etwas sinnvoller klingen^^), aber da bei meinem Eingangspost wohl nicht ganz verständlich war, was ich meinte, habe ich halt als Beispiel Bankdaten genommen, weil das vielleicht verständlicher ist.

Auf jeden Fall schonmal vielen Dank für deine Hilfe!!!

Gruß,
Klaus