ich habe ein csv upload script, dass eine csv datei in einen bestimmten ordner läd und ausliesst.
Folgndes bekomme ich aber nicht hin:
ich möchte die erste Zeile der CSV datei auslesen die die Werte der Spalten ausgibt und diese dann den Mysql Tabellenspalten zuordnen
Die Namen in der ersten Zeile der CSV Datei stimmen nicht mit den Spaletennamen der Sql Tabelle überein:
z.B.erste Zeile der CSV Datei: Bild,Kategorie,Benutzer,Preis,Laufzeit
Die Tabellennamen: kid,bild1,sofortpreis,user,time
Nun möchte ich die geuploadete csv Datei auslesen und die Namen in der ersten Zeile, den Tabellennamen der mysql Datenbank zuordnen.
Das sollte dann ungefähr so wie im angehängten Bild aussehen.
Kann mir jemand helfen und mir sagen, wie das geht?
momentan habe ich ein Script, welches eine bestimmte Spaltenanzahl in der csv Datei voraussetzt und diese dann ausliesst.
ich müsste es jedoch so umschreiben, dass man eine beliebige CSV Datei mit beliebigen Spaltennamen hochladen kann (Das geht), diese CSV Datei dann ausliesst (erste Spalte) und ich via Formular die Spalten in der CSV Datei den Spalten in der Mysql Tabelle zuordnen kann.
Das bekomme ich nicht hin Das Script müsste wie im Bildbeispiel die Spalten untereinander in einem Formular ausgeben und man müsste dann dann auswählen können welche mysql tabellenspalte für die jeweilige CSV Spalte zuständig ist.
Da ist das Problem:
Ich weiss nicht wie ich das machen kann, da ich vorher nicht weiss, wie die CSV Datei aufgebaut ist.
a.) hat jede CSV Datei eine andere Spaltenanzahl
b.) Hat jede CSV Datei ein anderes Trennzeichen
c.) Hat jede CSV Datei andere Spaltennamen
Ich müsste also das Trennzeichen angeben können und dann den Spaltennamen der mysql Tabellenspalte zuordnen.
Wäre wirklich froh wenn mir hier jemand helfen könnte
Dein Problem ist etwas komplexer und kein "mal eben so " Problem. Also hier nur ein paar Ansätze:
Du hast Tabellen mit unterschiedlicher Spaltenanzahl, musst also erst mal die Tabelle bestimmen, in die Importiert werden soll und dort die Spaltenbezeichnung herausfinden.
Vorschlag, Beleg ein Array $spaltenname mit den entsprechenden Werten. z:B.
Ich habe mir für meinen Import etwas einfallen lassen um ihn flexibel zu machen. Ich belege eine Varaible $_SESSION['reihenfolge'] mit der Reihenfolge der Spalten, wie die CSV-Elemente eingefügt werden sollen. Das erspart dir die Namenszuordnung und du brauchst nur die Reihenfolge der Werte zu verändern.
z.B.
PHP-Code:
$_SESSION['reihenfolge'] = '1,3,2,7,4,5,6';
Liest die Spalten der CSV-Datei in der Reihenfolge Spalte1, Spalte3, Spalte2, Spalte7 u.s.w.
Ein kleines Tool erlaubt es mir mit Drag und Drop diese Reihenfolge beliebig zu verändern.
3. Nun die CSV-Datei einlesen und den sql-Befehl erstellen.
Ich persönlich bevorzuge den file() Befehl um die CSV-Datei zu lesen, da ich die Länge der längsten Zeile nicht wissen muss. fgetcsv ist aber natürlich für solche Aktionen vorgesehen. Trennzeichen kann man in Varaiablen Ablegen.
PHP-Code:
$trennzeichen = ';'; // Dieser Teil ist wohl immer gleich, nur die Werte werden sich ändern // also alles Gleiche in eine Variable packen $sql_prefix = 'INSERT INTO `'.$db_name.'`.`'.$tabelle.'` (';
// diesen Teil könnte man natürlich auch anders gestalten for($a = 0; $a < count($felder); $a++) { $sql .= '\''.mysql_real_escape_string($pieces[$felder[$a]]).'\''; if($a < count($felder) -1) { $sql.= ', '; } } $sql .= ');'; // SQL-Statement ist nun fertig zum Abarbeiten // Ein echo $sql sollte zuerst mal die korrekte Syntax anzeigen echo $sql."<br>"; // ist alles richtig, dann query...... // mysql_query($sql); }
Ein grober Überblick sollte damit gegeben sein, natürlich kann man das alles noch verfeinern und vereinfachen.
Ich mache z.B. bei sehr grossen Dateien eine Kontrolle der max_execution_time, befülle fehlende Tabellenfelder mit NULL, wenn Spalten in der CSV-Datei fehlen,, habe utf8-decode() und utf8_encode() Schaltbar gemacht, wähle Trennzeichen aus einem Dropdown aus etc.....
Viel Erfolg.
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.
Vielen, vielen Dank für Deine Hilfe.
Problem:
Ich komme damit nicht zurecht.
Ich habe sehr wenig Ahnung von php und csv
Deshalb meine konkrete Frage:
Könntest Du mir genau zeigen wie ich es schreiben muss?
Verbindung zur Datenbank besteht
Datenbanktabelle: op_ins
CSV Datei: usercsv.csv
Die csv Datei muss ausgelesen werden (Beliebig viele Zeilen vorhanden)
und ich muss die spalten der csv Datei den Spalten der mysql Tabelle zuordnen können
Das sollte, wie im Bild gezeigt per dropdown gehen.
Ich habe schon so viel ausprobiert, aber ich bekomme es nicht hin.
Du musst dir das so vorstellen:
Der User läd eine csv datei auf den server, diese wird im Ordner gespeichert.
Die CSV Dateien der User haben unterschiedliche Spaltenanzahlen, unterschiedliche Trennzeilen und unterschiedliche Spaltennamen (Zum Teil auch keine Spaltennamen)
Nun muss ich es irgendwie hinbekommen, dass der User seine Spalteneinträge aus der CSV Datei bestimmten Tabellennamen in der SQL Datenbanktabelle zuordnen kann.
Vorher sollte er noch sein Trennzeichen angeben können.
Wenn das Script dann weiss, welche Spalte aus den Zeilen für welchen mysql Eintrag verwendet werden soll, kann ich weiter arbeiten.
Kannst Du mir da helfen?
Würde auch dafür bezahlen, denn ich weiss nicht weiter ;-(
Gerne können wir auch einmal telefonieren....
Ich gehe wie folgt vor:
1. Spaltennamen aus MySQL auslesen
2. Erste Zeile aus der CSV einlesen und Benutzer zeigen
3. Nach normalen Feldtrenner, Feld eingeschlossen von und Zeilentrenner prüfen
4. Sollte die Anzahl der aus 1. und 3. identisch sein Tabelle erstellen mit Dropdowns
5. Benutzer kann Parameter aus 3. anpassen sofern Ergebnis nicht richtig
6. Benutzer kann aus der daraus erstellten Tabelle per Dropdown(Inhalte aus 1.) neu organisieren
7. Speichern als Importfilter
8. Cron macht Import per LOAD DATA anhand von Importfilter
MfG
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Ich kann dir tips geben und dir dabei helfen das daraus entstehende
zum laufen zu bringen, aber nen fertiges Script wirst du nicht bekommen ;)
Wir wissen nicht:
wo du das einbaust (Framework, CMS etc)
was du kannst (PHP, MySQL etc)
ob du das lernen willst oder ob es nur um das eine Script geht
Würde auch dafür bezahlen, denn ich weiss nicht weiter ;-(
Es gibt wohl einige anlaufstellen wo du daraus einen Auftrag machen kannst, aber
glaub mir der Preis für sowas wird dir nicht gefallen ;)
MfG
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
1. Spaltennamen aus MySQL auslesen (das möchte ich nicht, ich möchte die Spalten vorgeben im Script
2. Erste Zeile aus der CSV einlesen und Benutzer zeigen (müsste sein)
3. Nach normalen Feldtrenner, Feld eingeschlossen von und Zeilentrenner prüfen
4. Sollte die Anzahl der aus 1. und 3. identisch sein Tabelle erstellen mit Dropdowns (das funktioniert nicht, weil manche Nutzer mehr und andere weniger Felder in der csv Datei haben)
5. Benutzer kann Parameter aus 3. anpassen sofern Ergebnis nicht richtig
6. Benutzer kann aus der daraus erstellten Tabelle per Dropdown(Inhalte aus 1.) neu organisieren
7. Speichern als Importfilter
Cron möchte ich auch nicht, da der Nutzer seine Datei hochläd und die eingetragenen Dateien sofort sichtbar sind
1. Spaltennamen aus MySQL auslesen (das möchte ich nicht, ich möchte die Spalten vorgeben im Script
2. Erste Zeile aus der CSV einlesen und Benutzer zeigen (müsste sein)
3. Nach normalen Feldtrenner, Feld eingeschlossen von und Zeilentrenner prüfen
4. Sollte die Anzahl der aus 1. und 3. identisch sein Tabelle erstellen mit Dropdowns (das funktioniert nicht, weil manche Nutzer mehr und andere weniger Felder in der csv Datei haben)
5. Benutzer kann Parameter aus 3. anpassen sofern Ergebnis nicht richtig
6. Benutzer kann aus der daraus erstellten Tabelle per Dropdown(Inhalte aus 1.) neu organisieren
7. Speichern als Importfilter
Cron möchte ich auch nicht, da der Nutzer seine Datei hochläd und die eingetragenen Dateien sofort sichtbar sind
Wieviel glaubst Du, würde mich das kosten?
Ein Upload Script habe ich. Ich bräuchte nun nur noch eine Zuweisung
Also ich gebe beispielsweise in der linken Spalte vor:
Kategorie
Preis
Bild
und rechts soll dann jeweils ein dropdownfeld zum auswählen, der Spalte in der CSV sein