Multiple File Upload
Hallo zusammen,
ich möchte in einem Formular ua ein Multiple File Upload implementieren.
Dann speichern bzw. upload:
Das funktioniert soweit. Nun habe ich zwei Fragen:
Gibt es eine best practise für einen Datenbankeintrag?
Tabelle
id | column A | column B |column C | ...
1 | blah | world |space | ...
2 | blah2 | world2 |space2 | ...
...
Nun neuer Eintrag. Also normalerweise id3. Dannmöhte ich diesem Eintrag bis zu 5 Bilder zuordnern. Meide Idee:
pics3_1.jpg, pics3_2.jpg, pics3_3.jpg, pics3_4.jpg, pics3_5.jpg.
Damit weiß ich zwischen "pics" und "_" ist die id des zugehörigen Eintrags.
Gibt es da einen besseren Weg? Wie stelle ich sicher, dass es wirklich id3 wird und was ist beim löschen von Eintrag mit der id3? Dann m+üsste ich j alles löschen was mit pics3_ anfängt?
Die nächste Frage ist, wie schütze ich die datei vorm direkten download? Nach dem Muster könnte jeder die Datei aufrufen, hätte den Pfad und könnte durchprobieren: pics1_1.jpg, pics2_1.jpg, pics123_1.jpg.
Wie ist das mit htaccess ? Schütze ich damit rekursiv, inkl Unterverzeichnisse oder muss ich mir irgendwas basteln ?
Also was weiß ich ne php Datei die nur header("Location:\pfad\zurDateien") weiterleitet und da zB ne Slideshow aufmacht. Aber das lösst mein Problem och auch nicht wirklich.
Any idea
Ratzekahl
For testing, I am using xampp, so I cannot post a link.
ich möchte in einem Formular ua ein Multiple File Upload implementieren.
...
<h2 class='ueberschrift'>Neuer Vorgang</h2><div class="kundenadressblock"><br/><br/>Herr Walter Muster<br/>Hermann-Löns-Straße 17<br/>48123 München<br/><br/></div><form method="POST" action="vorgangspeichern.php" name="haupt_form" enctype="multipart/form-data">
<center><table class="datentabelle" cellspacing="0">
<tr><td class='datenzelle2'>Kurzbeschreibung</td>
<td class='datenzelle2'><input type='text' name='kurzbeschreibung' size='57' value='' ></td></tr>
<tr>
<td class='datenzelle2'>Datum</td>
<td class='datenzelle2'><input type='text' name='datum' size='57' value='17.04.2023 - 16:46' readonly></td>
</tr>
<tr><td class='datenzelle2'>Gesprochen mit</td><td class='datenzelle2'><input type='text' name='gesprochenmit' size='57' value='Walter Muster'></td></tr>
<tr><td class='datenzelle2'>Kontakt </td><td class='datenzelle2'><select name="kontaktart_id"><option value='1'>Telefon</option><option value='2'>E-Mail</option><option value='3'>persönlich</option><option value='4'>ViKo</option><option value='5'>Post</option></select></td></tr>
<tr><td class="datenzelle2">Beschreibung</td><td class="datenzelle2">
<textarea name="beschreibung" cols="10" rows="5"></textarea></td></tr>
<tr><td class="datenzelle2">Medien</td><td class="datenzelle2">
<input type="file" name="unterlagen[]" multiple accept=".jpg,.png,.pdf">
<!-- <input type="file" name="datei" accept="application/pdf"> -->
<tr><td > </td><td><input type="hidden" name="id" value="44"><input type="submit" value="OK" name="dokuerstellen"></form>...
Dann speichern bzw. upload:
$uploaddir = 'C:\\xampp\\htdocs\\app\\Dokumente\\medien\\';
//$files = array_filter($_FILES['upload']['name']); //something like that to be used before processing files.
// Count # of uploaded files in array
$total = count($_FILES['unterlagen']['name']);
// Loop through each file
for( $i=0 ; $i < $total ; $i++ ) {
//Get the temp file path
$tmpFilePath = $_FILES['unterlagen']['tmp_name'][$i];
//Make sure we have a file path
if ($tmpFilePath != ""){
//Setup our new file path
$newFilePath = "C:\\xampp\\htdocs\\app\\Dokumente\\medien\\" . $_FILES['unterlagen']['name'][$i];
//Upload the file into the temp dir
if(move_uploaded_file($tmpFilePath, $newFilePath)) {
//Handle other code here
}
}
}
Das funktioniert soweit. Nun habe ich zwei Fragen:
Gibt es eine best practise für einen Datenbankeintrag?
Tabelle
id | column A | column B |column C | ...
1 | blah | world |space | ...
2 | blah2 | world2 |space2 | ...
...
Nun neuer Eintrag. Also normalerweise id3. Dannmöhte ich diesem Eintrag bis zu 5 Bilder zuordnern. Meide Idee:
pics3_1.jpg, pics3_2.jpg, pics3_3.jpg, pics3_4.jpg, pics3_5.jpg.
Damit weiß ich zwischen "pics" und "_" ist die id des zugehörigen Eintrags.
Gibt es da einen besseren Weg? Wie stelle ich sicher, dass es wirklich id3 wird und was ist beim löschen von Eintrag mit der id3? Dann m+üsste ich j alles löschen was mit pics3_ anfängt?
Die nächste Frage ist, wie schütze ich die datei vorm direkten download? Nach dem Muster könnte jeder die Datei aufrufen, hätte den Pfad und könnte durchprobieren: pics1_1.jpg, pics2_1.jpg, pics123_1.jpg.
Wie ist das mit htaccess ? Schütze ich damit rekursiv, inkl Unterverzeichnisse oder muss ich mir irgendwas basteln ?
Also was weiß ich ne php Datei die nur header("Location:\pfad\zurDateien") weiterleitet und da zB ne Slideshow aufmacht. Aber das lösst mein Problem och auch nicht wirklich.
Any idea
Ratzekahl
For testing, I am using xampp, so I cannot post a link.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6810490534
Url: https://administrator.de/contentid/6810490534
Ausgedruckt am: 21.11.2024 um 20:11 Uhr
10 Kommentare
Neuester Kommentar
nun - ehrlich gesagt ist das was du da schreibst ein wenig "verwirrend" geschrieben.
Im generellen würde ich jedoch das ganze etwas anders angehen. Denn auf den Dateinamen würde ich mich nicht verlassen wollen - was passiert denn zB. wenn ich die datei pic3_3.jpg selbst hochlade weil die bei mir einfach so heisst?
Ich würde die ID und den Dateinamen ggf. eher als MD5-Summe der hochgeladenen Datei machen. Wenn jemand dieselbe Datei dann 2x hochlädt wäre die MD5 gleich und es würde eben nicht gehen (den Fehler müsstest du natürlich sauber abfangen oder nen Update machen wenn zB. eben dieselbe Datei hochgeladen wurde aber nen Update der Beschreibung erfolgt).
Du kannst da noch einiges mehr machen (z.B. eine art UUID bilden - aus der MD5 und ner Checksum aus der Beschreibung),... Aber einfach nur ne hochzählende ID erlaubt es halt auch recht leicht die Dateinamen zu erraten. Dann müsstest du noch einiges zum Schutz unternehmen.
Im generellen würde ich jedoch das ganze etwas anders angehen. Denn auf den Dateinamen würde ich mich nicht verlassen wollen - was passiert denn zB. wenn ich die datei pic3_3.jpg selbst hochlade weil die bei mir einfach so heisst?
Ich würde die ID und den Dateinamen ggf. eher als MD5-Summe der hochgeladenen Datei machen. Wenn jemand dieselbe Datei dann 2x hochlädt wäre die MD5 gleich und es würde eben nicht gehen (den Fehler müsstest du natürlich sauber abfangen oder nen Update machen wenn zB. eben dieselbe Datei hochgeladen wurde aber nen Update der Beschreibung erfolgt).
Du kannst da noch einiges mehr machen (z.B. eine art UUID bilden - aus der MD5 und ner Checksum aus der Beschreibung),... Aber einfach nur ne hochzählende ID erlaubt es halt auch recht leicht die Dateinamen zu erraten. Dann müsstest du noch einiges zum Schutz unternehmen.
Zu jeder Verbindung eines Clients kann man eine eindeutige ID generieren.
https://de.ryte.com/wiki/Session-ID
https://de.ryte.com/wiki/Session-ID
Hallo,
ne. Die Du willst ja keine doppelten Dateien.
Die Beschreibung würde ich nicht verwenden.
Da kann zu viel oder zu wenig drin stehen was man im Dateinamen nicht verwenden kann.
Auch könnte der Betreff doppelt sein. UrlaubDK (ohne Jahr)
SvezVRhtRQBC_0.jpg
SvezVRhtRQBC_1.jpg
SvezVRhtRQBC_2.jpg
SvezVRhtRQBC_3.jpg
8YS893CS8YS8_0.jpg
8YS893CS8YS8_1.jpg
Dazu passende Datenbankeinträge erstelen.
Oder erst die Datenbankeinträge erstellen und die Dateien mit der Auto-ID bennen.
0.jpg
1.jpg
2.jpg
Stefan
ne. Die Du willst ja keine doppelten Dateien.
Die Beschreibung würde ich nicht verwenden.
Da kann zu viel oder zu wenig drin stehen was man im Dateinamen nicht verwenden kann.
Auch könnte der Betreff doppelt sein. UrlaubDK (ohne Jahr)
SvezVRhtRQBC_0.jpg
SvezVRhtRQBC_1.jpg
SvezVRhtRQBC_2.jpg
SvezVRhtRQBC_3.jpg
8YS893CS8YS8_0.jpg
8YS893CS8YS8_1.jpg
Dazu passende Datenbankeinträge erstelen.
Oder erst die Datenbankeinträge erstellen und die Dateien mit der Auto-ID bennen.
0.jpg
1.jpg
2.jpg
Stefan