CSV-Datei über HTML und PHP in MySQL Datenbank übergeben?


02.07.2021, 11:55

Die CSV-Datei, soll in eine Tabelle, in einer DB eingefügt werden. Vorher soll der Inhalt dieser Tabelle entfernt werden.

ZaoDaDong  02.07.2021, 11:53

Was soll "leeren" hier bedeuten? Soll die gesammte DB gepurged werden?

euiuerghrugt 
Beitragsersteller
 02.07.2021, 11:54

Achso, ich hatte da was falsch geschrieben. Ich meine die Datei soll in eine Tabelle in einer Datenbank geschrieben werden. Vorher soll diese Tabelle jedoch geleert werden.

1 Antwort

Ich soll ein HTML und PHP Skript schreiben, mit welchem man eine CSV-Datei hochladen kann.

Wie du Dateien hochladen kannst, hast du offensichtlich schon herausgefunden, deswegen sehe ich keinen Grund, in diesem Thread noch einmal konkret darauf einzugehen.

Das Skript soll eine MySQL Datenbank (auf XAMPP bzw. PhpMyAdmin) leeren (...)

Wie du Datenbankanfragen vornehmen kannst, weißt du auch schon. Alle Einträge einer Tabelle kann man via DELETE löschen.

DELETE FROM your_table
(...) und dann die Datei einfügen.

Die CSV-Datei kannst du mit fgetcsv einlesen. Alternativ bietet PHP noch eine Palette an anderen Lesefunktionen für Dateien an (siehe hier).

Für die Speicherung in der Datenbank könntest du eine Transaktion vornehmen. Diese bündelt mehrere Queries. Für den SQL-Query benötigst du ein INSERT INTO.

Mit mysqli_begin_transaction wird sie gestartet. Im Anschluss baust du dir ein Prepared Statement, iterierst über alle Zeilen, die in die Datenbank sollen und bindest je Iteration die Zellendaten an das Prepared Statement. Direkt danach kannst du den Eintrag mit execute bestätigen.

Ganz zum Schluss (nach der Schleife) reicht ein Aufruf von mysqli_commit, um die Eingaben tatsächlich zu bestätigen. Schau dir dazu die Beispiele in der Dokumentation an, auch wenn dort nur ein INSERT vorgenommen wird.


euiuerghrugt 
Beitragsersteller
 02.07.2021, 14:33

Ok, vielen Dank! Damit würde ich vielleicht klarkommen.
Aber könntest du eventuell ein Code-Beispiel geben, also einen konkreten Aufbau?

Danke :)