Intern ❘ Inhaltsverzeichnis ❘ Glossar ❘ Bausteine ❘ Linkliste ❘ Tutorials ❘ Kommentare
Thema: PHP - CSV-Datei in eine DB-Tabelle einlesen ➧ Artikel anzeigen
- marcD ✶✶✶✶✶ schrieb am Mittwoch, den 16 Oktober 2019 #1
- Tolles Script und es funktioniert super! Jedoch hätte ich folgende Frage:
Wenn die erste Zeile Überschriften enthält und die Daten erst ab der zweiten Zeile beginnen, wie kann man verhindern, dass die Daten der ersten Zeile in die DB geschrieben werden?
- Werner schrieb am Freitag, den 18 Oktober 2019 #2
- Lasse beim Eintragen in die dB einfach einen Zähler mitlaufen.
Als Zähler nehme ich hier den Schlüssel des Arrays:
1
2
3
4
5
6
7
8
9
10
11
12
13<?php
foreach ($csvInhalt as $zaehler => $inhalt) {
if ($zaehler > 0) {
// Die Anzahl der Spalten anpassen
list($spalte1, $spalte2, $spalte3, $spalte4) = explode($trennzeichen, $inhalt);
// Daten hinzufügen (Anzahl der Spalten anpassen)
$daten[] = "('" . $spalte1 . "','" . $spalte2 . "','" . $spalte3 . "','" . $spalte4 . "')" . chr(13);
}
}
?>
- Helmut M schrieb am Mittwoch, den 11 März 2020 #3
- Hallo
Bin kein Spezialist, aber ich verstehe nicht wo das Script die Daten dann holt, bzw. anders ausgedrückt wo ist der Bezug zu der CSV Datei die auf z.B. der Festplatte liegt.
- Werner schrieb am Mittwoch, den 11 März 2020 #4
- Hallo,
du kannst einen > lokalen Webserver auf deinem PC einrichten, und dann von der Festplatte die CSV-Datei über PHP einlesen.
- Joachim H schrieb am Dienstag, den 7 April 2020 #5
- Hallo,
ich scheitere immer an folgendem Punkt: in der DB sind mehr Spalten als in der CSV. Nicht in alle Spalten sollen Werte eingetragen werden. Dann gibt es immer eine Fehlermeldung von der Datenbank, die sich auf Spalten beziehen in die nichts eingetragen werden sollen.
LG
Joachim
- Werner schrieb am Dienstag, den 7 April 2020 #6
- Hallo,
dann muss eben bei den Spalten die leer bleiben ein Default-Wert fest gelegt werden!
1
`name` VARCHAR(80) NOT NULL DEFAULT '',
- Joachim H schrieb am Dienstag, den 7 April 2020 #7
- Tausend Dank!! Hat geklappt, alle Werte sind eingetragen :).
Da ich nicht wusste wie ich deinen Vorschlag in das Script einarbeite,habe ich mit PhPMyAdmin die Tabelle aufgerufen und für alle Spalten den Standardwert auf NULL gesetzt. Und schwupp, geklappt.
Spricht eigentlich etwas gegen den Wert NULL? Das ist ja jetzt nicht "NOT NULL DEFAULT".
Warum setzt MySQL beim Erstellen einer Tabelle nicht automatisch ein Standardwert?
LG
Joachim
- Werner schrieb am Mittwoch, den 8 April 2020 #8
- Das ist halt so, nicht jede Programmiersprache ist perfekt.
Man sollte die Schwächen der jeweiligen Sprache immer im Auge behalten!
- Joe schrieb am Sonntag, den 16 August 2020 #9
- Moin Moin Werner,
Erst einmal, dieser und andere deiner Beträge haben mir schon extrem viel bei einem Projekt weitergeholfen.
Ich stehe jetzt aber vor der folgenden Herausforderung.
Ich habe eine Liste die etwa so aussieht:
1
2
3Schreiberling;Herausgeber;Kommentare;
Schmitz, Johannes;"Müller, Andreas; Walter, Günter";"Sifirus, Hans; Leckter, Hannes";
"Walter, Konrad; Dieter, Jim; Reudisch, Peter";Dicht, Jack;"Manni, Wolfgang; Aptus, Hommel;";
Leider haben die einzelnen Spalten NIE eine konstante Anzahl an Einträgen. Manchmal ist das wirklich nur einer und manchmal sind das bis zu 200 Personen die da zusammenkommen. Diese müssen zwingend nach Komma und Semikolon getrennt werden, oder durch das PHP Script schon so in die Datenbank eingetragen werden, dass erst der Vorname und dann der Nachname kommt.
Ich weiß, dass es eine "split" Funktion gibt mit der man durchzählen lassen kann, wie viele Zellen man in der Datenbank für die einzelnen Spalten benötigt. Das wird auch über eine WHILE Schleife laufen, nur muss ich dann noch herausfinden wie ich das in die Datenbank eintragen lassen kann.
Hast du eventuell einen Vorschlag wie ich das am besten angehen kann?
Danke dir im Voraus.
MfG
Joe
- Werner schrieb am Sonntag, den 16 August 2020 #10
- Hallo Joe,
Zitat:
Ich weiß, dass es eine "split" Funktion gibt
php.net/de/str_split oder php.net/de/explode
Vielleicht hilft dir folgender Codeschnipsel weiter:
1
2
3
4
5
6
7
8
9
10
11<?php
$string = "Schmitz, Johannes;Müller, Andreas; Walter, Günter;Sifirus, Hans; Leckter, Hannes;";
$arrayA = explode(";", $string);
foreach ($arrayA as $element) {
if (substr_count($element, ",") == 1) {
list($nachname, $vorname) = explode(",", $element);
echo '<p>' . $vorname . ' ' . $nachname . '</p>';
}
}
?>
Wie wird die CSV-Datei eingelesen?
1
2
3Schreiberling;Herausgeber;Kommentare;
Schmitz, Johannes;"Müller, Andreas; Walter, Günter";"Sifirus, Hans; Leckter, Hannes";
"Walter, Konrad; Dieter, Jim; Reudisch, Peter";Dicht, Jack;"Manni, Wolfgang; Aptus, Hommel;";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<?php
$daten = file("daten.csv");
foreach ($daten as $nr => $data) {
if ($nr > 0) {
$data = str_replace('"', "", $data); // Anführungszeichen entfernen
$array = explode(";", $data);
foreach ($array as $ar) {
if (substr_count($ar, ",") == 1) {
list($nachname, $vorname) = explode(",", $ar);
echo '<p>' . $vorname . ' ' . $nachname . '</p>';
}
}
}
}
?>
Das ganze ist natürlich ungetestet!
Nachtrag: Eine Benachrichtigung per Mail konnte leider nicht gesendet werden!