Fileupload in PhP

Mehrere Dateien gleichzeitig hochladen

Dateien als Blob in MySQL zu speichern scheint nicht der Standardweg zu sein – jedenfalls habe ich nach über einer Stunde suche (am 29.5.2021) kein funktionierendes Tutorial hierzu gefunden.

php.ini updaten, da bei mehreren Dateien das default-limit sicherlich bald überschritten ist: upload_max_filesize=20M und Apache neu starten. Das Limit bei XAMPP liegt per default bei 2MB. Eine Fehlermeldung beim Uploadversuch größerer Dateien gibt’s nicht.

php.ini updaten: post_max_size=20M

Dafür sorgen, dass auf absehbare Zeit genügend Speicherplatz zur Verfügung steht.

Ordner uploads in htdocs anlegen.

<?php 
if(isset($_POST['submit'])){
 
	$numberOfFiles = count($_FILES['file']['name']);
	
	for($i=0; $i < $numberOfFiles; $i++){
		
		$targetFileName = $_FILES['file']['name'][$i];
		
		move_uploaded_file($_FILES['file']['tmp_name'][$i], 'uploads/'.$targetFileName);
	}
} 
?>


<form method='post' action='' enctype='multipart/form-data'>
    <input type="file" name="file[]" multiple>
    <input type='submit' name='submit' value='Upload'>
</form>

So sieht das dann aus:

Code angepasst von: https://makitweb.com/multiple-files-upload-at-once-with-php/

Nur eine Datei gleichzeitig hochladen

Schnell mal einen File-Upload auf den Webserver für einzelne Dateien bauen (habe das heute erfolgreich getestet): 
https://www.w3schools.com/php/php_file_upload.asp

die php.ini steht bei XAMPP per default, wie von obiger Anleitung gefordert, auf file_uploads=On

LOAD DATA INFILE von DATETIMES

Wenn die Datumswerte in der .csv nicht gerade zufällig im MySQL-Format vorliegen, kann ein INSERT INTO INFILE diese Daten nicht richtig in die entsprechende Spalte laden und sie werden auf 0 gesetzt.

1. Schritt: richtiges Datumsformat finden

In einer .csv Datei liegt alles nur als Text vor. Dieser Text muss nun erstmal in ein Datum verwandelt werden. Dies geschieht mit der 
STR_TO_DATE()-Funktion. Um das richtige Format zu finden, kann man nun das Datum im .csv kopieren und hier einfügen. Anschließend fummelt man so lange an dem Format, bis die Konvertierung gelingt. Das sieht dann beispielsweise so aus:

2. Schritt: richtig in INSERT INTO FILE einbauen

Leider ist es in INSERT INTO FILE nicht ganz elegant gelöst, einen Import durchzuführen, wenn die Spalten in der .csv von den Spalten in der MySQL-Tabelle abweichen. So müssen erstmal alle Spalten mit Namen in der entsprechenden Reihenfolge aufgeführt werden, also z.B. 

LOAD DATA INFILE 'C:/projects.csv'
INTO TABLE t_remote             
FIELDS TERMINATED BY ';' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES
(id, coid, comp, ptitle, ptime, ptime2, pother, parea, pdesc, purl, pextid, @created, pcity)
SET created = STR_TO_DATE(@created, '%d.%m.%Y %H:%i')
;