Datei upload - leeres $_POST Array
Shadowcrow
- php
0 Sven Rautenberg0 Shadowcrow0 Bobby
0 Vinzenz Mai
hi $name,
ich bin gerade dabei ein upload script zu erstellen, aber irgendwie funzt das nicht, es passiert nämlich rein garnichts (kann ja auch nicht wenn post leer ist). wenn ich mir $_POST anzeigen lasse ist es leer, mache ich aber einen reload fragt mich mein fuchs ob er die daten erneut senden soll, aber das array ist dannach immer noch leer? ich komm einfach nicht weiter...
<?php
print_r ($_POST);
?>
<form action="admin.php?inhalt=PDF%20Upload" method="post" enctype="multipart/form-data">
<strong>Foto PDF*:</strong><br/> <input name="datei" type="file" accept="application/pdf" />
<input type="submit" value="Upload" />
</form>
~~~php
<?php
if (!empty($_POST)) {
if( $_FILES['datei']['type'] == "application/pdf" && $_FILES['datei']['name'] == $pdf_namen ['fotos']) {
if($_FILES["datei"]["tmp_name"] == "") {
echo 'Fehler bei der Übertragung!';
exit;
}
if($_FILES["datei"]["size"] > $size_fotos) {
$size_fotos = $size_fotos/1024; // umrechnung in KB
echo 'Datei zu groß! Die Datei darf nicht größer als<b> '.$size_fotos.' </b>KB sein';
exit;
}
if($_FILES["datei"]["size"] == 0) {
echo 'Leere Datei!';
exit;
}
if (move_uploaded_file($_FILES['datei']['tmp_name'], $uploaddir . $_FILES['datei']['name'])) {
echo "Datei<b> ".$_FILES["datei"]["name"]." </b>erfolgreich übertragen.\n \n ";
} else {
print "xxxxxxx!";
}
}
else {
echo 'Falscher Dateiname oder falscher Dateityp! Nur Upload von<b> '.$pdf_namen ['fotos'].' </b>möglich';
exit;}
}
?>
btw. wenn die datei nach erfolgtem upload aus dem temp verzeichnis an den gwünschten ort kopiert wird und die alte überschreibt, kann es da zu problemen kommen wenn gerade ein besucher auf der HP darauf zugreift? wie sperre ich diese? flock() scheidet ja wohl aus da die datei nicht mit fopen() geöffnet wurde.
gruss
shadow
--
Vor dem Parser und auf hoher See sind wir allein in Gottes Hand
Moin!
wenn ich mir $_POST anzeigen lasse ist es leer
was logisch ist, wenn dein Formular nur aus dem File-Feld besteht. Denn Dateien landen ausschließlich in $_FILES, und nicht in $_POST, also ist das ein leeres Array. Und evaluiert zu "false" in deiner IF-Abfrage.
Wenn, dann solltest du viel eher $_SERVER['REQUEST_METHOD'] befragen, ob das POST ist, oder die Existenz und Ausgefülltheit von $_FILES heranziehen.
btw. wenn die datei nach erfolgtem upload aus dem temp verzeichnis an den gwünschten ort kopiert wird und die alte überschreibt, kann es da zu problemen kommen wenn gerade ein besucher auf der HP darauf zugreift? wie sperre ich diese? flock() scheidet ja wohl aus da die datei nicht mit fopen() geöffnet wurde.
Vermutlich wird der Besucher eine angeknabberte Datei sehen, ansonsten wird aber nichts passieren. Im Prinzip ist das ein Problem, allerdings wäre die Frage, wie wahrscheinlich das ist.
Dateinamen-Umbenennung geschieht atomar. Also alte Datei umbenennen, um den Namen freizumachen, dann neue Datei so wie die alte benennen, dann alte Datei löschen (falls das Zeit braucht).
- Sven Rautenberg
hi $name,
| wenn ich mir $_POST anzeigen lasse ist es leer
was logisch ist, wenn dein Formular nur aus dem File-Feld besteht. Denn Dateien landen ausschließlich in $_FILES, und nicht in $_POST, also ist das ein leeres Array. Und evaluiert zu "false" in deiner IF-Abfrage.
jetzt wo du es sagst, ich hatte irgendwie im kopf das alles was über post gesendet wird auch in $_POST landet, wieder was gelernt.
Wenn, dann solltest du viel eher $_SERVER['REQUEST_METHOD'] befragen, ob das POST ist, oder die Existenz und Ausgefülltheit von $_FILES heranziehen.
ja ich überprüfe jetzt $_FILES
| btw. wenn die datei nach erfolgtem upload aus dem temp verzeichnis an den gwünschten ort kopiert wird und die alte überschreibt, kann es da zu problemen kommen wenn gerade ein besucher auf der HP darauf zugreift? wie sperre ich diese? flock() scheidet ja wohl aus da die datei nicht mit fopen() geöffnet wurde.
Vermutlich wird der Besucher eine angeknabberte Datei sehen, ansonsten wird aber nichts passieren. Im Prinzip ist das ein Problem, allerdings wäre die Frage, wie wahrscheinlich das ist.
die seite hat nicht sooo viele besucher, aber für die wäre es schon doof wenn sie eine angenagt datei zu sehen bekommen. gibt es irgendeine lösung?
gruss
shadow
Moin
die seite hat nicht sooo viele besucher, aber für die wäre es schon doof wenn sie eine angenagt datei zu sehen bekommen. gibt es irgendeine lösung?
Dann kopiere das temp-Bild in den Zielpfad mit einem zufälligen Namen, setze den neuen Namen in die Datenbank ein, und lösche erst dann das alte Foto. So umgehst du temporäre Fehler.
Gruß Bobby
Hallo Shadowcrow,
[code lang=php]<?php
warum prüfst Du $_POST,
if (!empty($_POST)) {
wenn Du eigentlich $_FILES prüfen möchtest?
if( $_FILES['datei']['type'] == "application/pdf" && $_FILES['datei']['name'] == $pdf_namen ['fotos']) {
Freundliche Grüße
Vinzenz
hi $name,
warum prüfst Du $_POST,
| if (!empty($_POST)) {
wenn Du eigentlich $_FILES prüfen möchtest?
| if( $_FILES['datei']['type'] == "application/pdf" && $_FILES['datei']['name'] == $pdf_namen ['fotos']) {
gute frage, klarer fall von geistigem schluckauf :-( ich glaube es ging mir um den else zweig, weil es im orininal drei uploads sind (is aber schwachsinnig).
ich überprüfe es jetzt mit
if (isset($_FILES['datei'] ['name']))
und es funzt wunderbar. danke :-)
gruss
shadow