Seite 1 von 2
Bildupload funktioniert nicht richtig
Verfasst: Do 09.Jun, 2011 10:51
von Holger
Nachdem ich das Problem lösen konnte (vielen Dank für alle Hinweise!)
http://www.oxpus.de/viewtopic.php?f=14&t=9791
habe ich noch ein kleineres Problem:
Ich gebe die Daten hier ein
foerslag.php
Die Daten werden an
lagra.php
übergeben und in der DB gespeichert und nochmal zur Bestätigung angezeigt.
Code: Alles auswählen
mysql_query("INSERT INTO mat_restaurant (`name`, `type`, `ort`, `telefon`, `adress`, `speciality`, `mattider`, `createdby`, `hemsida`, `parkering`, `kommentar`) VALUES
('$name', '$type', '$ort', '$telefon', '$adress', '$speciality', '$mattider', 'Holger', '$hemsida', '$parkering', '$kommentar')
") || die(mysql_error());
$mat_id = mysql_insert_id();
Danach übergebe ich per Link die ID an upload.php, z.B.
upload.php?mat_id=24
Code: Alles auswählen
echo('<a href="upload.php?mat_id='.$mat_id.'">Klicka här</a> för att ladda upp bilder.');
In upload.php habe ich ein Script, mit dem ich Ordner anlegen und Dateien hochladen kann.
Ich möchte einen Ordnernamen = ID anlegen und dort die Bilder reinladen.
Das geht, wenn ich die ID statisch eingebe, aber nicht per $mat_id
Irgendwo habe ich einen kleinen Fehler und finde ihn nicht.
Code: Alles auswählen
<?php
error_reporting(E_ALL);
// Funktionen definieren
// -----------------------------------------------
function checkUpload($myFILE, $file_extensions, $mime_types, $maxsize)
{
$errors = array();
// Uploadfehler prüfen
switch ($myFILE['error']){
case 1: $errors[] = "Bitte wählen Sie eine Datei aus, die <b>kleiner als ".ini_get('upload_max_filesize')."</b> ist.";
break;
case 2: $errors[] = "Bitte wählen Sie eine Datei aus, die <b>kleiner als ".$maxsize/(1024*1024)." MB</b> ist.";
break;
case 3: $errors[] = "Die Datei wurde nur teilweise hochgeladen.";
break;
case 4: $errors[] = "Es wurde keine Datei ausgewählt.";
return $errors;
break;
default : break;
}
// MIME-Type prüfen
if(count($mime_types)!=0 AND !in_array(strtolower($myFILE['type']), $mime_types)){
$fehler = "Falscher MIME-Type (".$myFILE['type'].").<br />".
"Erlaubte Typen sind:<br />\n";
foreach($mime_types as $type)
$fehler .= " - ".$type."\n<br />";
$errors[] = $fehler;
}
// Dateiendung prüfen
if($myFILE['name']=='' OR (count($file_extensions)!=0 AND !in_array(strtolower(getExtension($myFILE['name'])), $file_extensions))){
$fehler = "Falsche Dateiendung (".getExtension($myFILE['name']).").<br />".
"Erlaubte Endungen sind:<br />\n";
foreach($file_extensions as $extension)
$fehler .= " - ".$extension."\n<br />";
$errors[] = $fehler;
}
// Dateigröße prüfen
if($myFILE['size'] > $maxsize){
$errors[] = "Datei zu groß (".sprintf('%.2f',$myFILE['size']/(1024*1024))." MB).<br />".
"Erlaubte Größe: ".$maxsize/(1024*1024)." MB\n";
}
return $errors;
}
// gibt die Dateiendung einer Datei zurück
function getExtension ($filename)
{
if(strrpos($filename, '.'))
return substr($filename, strrpos($filename, '.')+1);
return false;
}
// erzeugt einen Zufallswert
function getRandomValue()
{
return substr(md5(rand(1, 9999)),0,8).substr(time(),-6);
}
// erzeugt einen neuen Dateinamen aus Zufallswert und
// Dateiendung
function renameFile ($filename)
{
return getRandomValue().".".getExtension($filename);
}
// Werte zur Dateiprüfung initialisieren
// -----------------------------------------------
$maxsize = 2*1024*1024;
$file_extensions = array('jpg', 'jpeg', 'jpe', 'gif', 'png');
$mime_types = array('image/pjpeg', 'image/jpeg', 'image/gif', 'image/png', 'image/x-png');
// Upload-Ordner definieren
// -----------------------------------------------
$mat_id = $_POST['mat_id'];
$pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
$ordner = "/$pfad/$mat_id/";
// Anzahl Dateifelder festlegen
// -----------------------------------------------
$anzahl_dateifelder = 5;
// Beginn des Skriptes
// -----------------------------------------------
// Falls der Benutzer auf "Upload" gedrückt hat,
// werden die Dateien überprüft
if(isset($_POST['submit']) AND $_POST['submit']=='Upload'){
mkdir("$pfad/$mat_id",0777);
// jede Datei einzeln testen
for($i=0; $i<$anzahl_dateifelder; $i++){
$myFILE['name'] = $_FILES['Datei']['name'][$i];
$myFILE['type'] = $_FILES['Datei']['type'][$i];
$myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
$myFILE['error'] = $_FILES['Datei']['error'][$i];
$myFILE['size'] = $_FILES['Datei']['size'][$i];
// Fehlerarray erzeugen
$errors = array();
$errors = checkUpload($myFILE, $file_extensions, $mime_types, $maxsize);
if(count($errors)){
echo "<p>\n".
"Die ".($i+1).". Datei (".$myFILE['name'].") konnte nicht gespeichert werden.<br />\n";
foreach($errors as $error)
echo $error."<br />\n";
echo "</p>\n";
}
else {
do {
$neuer_name = renameFile($myFILE['name']);
} while(file_exists($ordner.$neuer_name));
if(@move_uploaded_file($myFILE['tmp_name'], $ordner.$neuer_name)){
echo "<p>\n".
"Die ".($i+1).". Datei (".$myFILE['name'].") wurde erfolgreich gespeichert.<br />\n".
"</p>\n";
}
else{
echo "<p>\n".
"Die Die ".($i+1).". Datei (".$myFILE['name'].") konnte nicht gespeichert werden.<br />\n".
"Es ist ein Upload-Fehler aufgetreten.<br />\n".
"Bitte versuchen Sie es später erneut.<br />\n".
"<br />\n".
"Sollte der Upload noch immer nicht funktionieren, informieren Sie uns bitte per Email.<br />\n".
"<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
"</p>\n";
}
}
}
echo "<p>\n".
"<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
"</p>\n";
}
// Beim ersten Aufruf des Skriptes wird das
// Upload-Formular angezeigt
else{
echo "<h1>Laden Sie mehrere Bilder hoch!</h1>\n";
echo "<h2>Erlaubte Dateiendungen sind:</h2>\n";
foreach($file_extensions as $extension)
echo " - ".$extension."\n<br />";
echo "<h2>Erlaubte Dateigröße:</h2>\n";
echo " - maximal ".($maxsize/(1024*1024))." MB\n<br />";
echo " <form ".
"action=\"".$_SERVER['PHP_SELF']."\" ".
"method=\"post\" ".
"enctype=\"multipart/form-data\">\n";
echo " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".$maxsize."\" />\n";
for($i=0; $i<$anzahl_dateifelder; $i++){
echo " <label for=\"Datei\">".($i+1).". Datei auswählen</label>\n";
echo " <input type=\"file\" name=\"Datei[".$i."]\" id=\"Datei[".$i."]\" />\n";
echo " <br />\n";
}
echo " <input type=\"submit\" name=\"submit\" value=\"Upload\" />\n";
echo " </form>\n";
}
?>
Ich vermute, der Fehler liegt hier:
Code: Alles auswählen
// Upload-Ordner definieren
// -----------------------------------------------
$mat_id = $_POST['mat_id'];
$pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
$ordner = "/$pfad/$mat_id/";
und/oder hier:
Code: Alles auswählen
if(isset($_POST['submit']) AND $_POST['submit']=='Upload'){
mkdir("$pfad/$mat_id",0777);
Sieht jemand hier einen offensichtichen Fehler?
Re: Bildupload funktioniert nicht richtig
Verfasst: Do 09.Jun, 2011 10:55
von Holger
Eine weitere Info: so wie es jetzt ist, werden die Bilder hochgeladen, aber es wird kein Ordner angelegt und die hochgelandenen Bilder liegen direkt im Ordner "bilder".
Re: Bildupload funktioniert nicht richtig
Verfasst: Do 09.Jun, 2011 12:04
von Holger
Mit
Code: Alles auswählen
$mat_id = $_GET['mat_id'];
$pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
$ordner = "bilder/$mat_id/";
$ordner2 = "/$pfad/$mat_id/";
mkdir($ordner2);
chmod($ordner2, 0777);
konnte ich den Ordner anlegen und CHMOD777 einstellen. Soweit so gut.
Aber die Datei wird nicht in den Ordner geladen.
Re: Bildupload funktioniert nicht richtig
Verfasst: Do 09.Jun, 2011 19:38
von oxpus
Hi,
du bist sicher, dass
so korrekt ist, wo du im HTML-Formular den Namen des Input-Feldes mit
benannt hast?
Wäre dann nicht eher
richtig?
Im Zweifel einfach mal $_FILES mit
anzeigen lassen, dann siehst du, wie das Array aufgebaut ist.
Re: Bildupload funktioniert nicht richtig
Verfasst: Do 09.Jun, 2011 20:21
von Holger
Danke! Werde ich testen!
Re: Bildupload funktioniert nicht richtig
Verfasst: Mi 15.Jun, 2011 13:03
von Holger
Hm, gilt das oben nicht für alle hier?
Code: Alles auswählen
$myFILE['name'] = $_FILES['Datei']['name'][$i];
$myFILE['type'] = $_FILES['Datei']['type'][$i];
$myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
$myFILE['error'] = $_FILES['Datei']['error'][$i];
$myFILE['size'] = $_FILES['Datei']['size'][$i];
Re: Bildupload funktioniert nicht richtig
Verfasst: Mi 15.Jun, 2011 13:19
von Holger
Mit
Code: Alles auswählen
$myFILE['name'] = $_FILES['Datei'][$i]['name'];
$myFILE['type'] = $_FILES['Datei']['type'][$i];
$myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
$myFILE['error'] = $_FILES['Datei']['error'][$i];
$myFILE['size'] = $_FILES['Datei']['size'][$i];
bekomme ich
Die 1. Datei () konnte nicht gespeichert werden.
Falsche Dateiendung ().
Erlaubte Endungen sind:
- jpg
- jpeg
- jpe
- gif
- png
Der Ordner wird aber angelegt.
Und mit
Code: Alles auswählen
$myFILE['name'] = $_FILES['Datei'][$i]['name'];
$myFILE['type'] = $_FILES['Datei']['type'][$i];
$myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
$myFILE['error'] = $_FILES['Datei']['error'][$i];
$myFILE['size'] = $_FILES['Datei']['size'][$i];
echo print_r($_FILES);
bekomme ich:
Array ( [Datei] => Array ( [name] => Array ( [0] => 609710_0428756.jpg [1] => [2] => [3] => [4] => ) [type] => Array ( [0] => image/jpeg [1] => [2] => [3] => [4] => ) [tmp_name] => Array ( [0] => /tmp/phpMLZMy0 [1] => [2] => [3] => [4] => ) [error] => Array ( [0] => 0 [1] => 4 [2] => 4 [3] => 4 [4] => 4 ) [size] => Array ( [0] => 20592 [1] => 0 [2] => 0 [3] => 0 [4] => 0 ) ) ) 1
Die 1. Datei () konnte nicht gespeichert werden.
Falsche Dateiendung ().
Erlaubte Endungen sind:
- jpg
- jpeg
- jpe
- gif
- png
Array ( [Datei] => Array ( [name] => Array ( [0] => 609710_0428756.jpg [1] => [2] => [3] => [4] => ) [type] => Array ( [0] => image/jpeg [1] => [2] => [3] => [4] => ) [tmp_name] => Array ( [0] => /tmp/phpMLZMy0 [1] => [2] => [3] => [4] => ) [error] => Array ( [0] => 0 [1] => 4 [2] => 4 [3] => 4 [4] => 4 ) [size] => Array ( [0] => 20592 [1] => 0 [2] => 0 [3] => 0 [4] => 0 ) ) ) 1
Die 2. Datei () konnte nicht gespeichert werden.
Es wurde keine Datei ausgewählt.
Array ( [Datei] => Array ( [name] => Array ( [0] => 609710_0428756.jpg [1] => [2] => [3] => [4] => ) [type] => Array ( [0] => image/jpeg [1] => [2] => [3] => [4] => ) [tmp_name] => Array ( [0] => /tmp/phpMLZMy0 [1] => [2] => [3] => [4] => ) [error] => Array ( [0] => 0 [1] => 4 [2] => 4 [3] => 4 [4] => 4 ) [size] => Array ( [0] => 20592 [1] => 0 [2] => 0 [3] => 0 [4] => 0 ) ) ) 1
Die 3. Datei () konnte nicht gespeichert werden.
Es wurde keine Datei ausgewählt.
Array ( [Datei] => Array ( [name] => Array ( [0] => 609710_0428756.jpg [1] => [2] => [3] => [4] => ) [type] => Array ( [0] => image/jpeg [1] => [2] => [3] => [4] => ) [tmp_name] => Array ( [0] => /tmp/phpMLZMy0 [1] => [2] => [3] => [4] => ) [error] => Array ( [0] => 0 [1] => 4 [2] => 4 [3] => 4 [4] => 4 ) [size] => Array ( [0] => 20592 [1] => 0 [2] => 0 [3] => 0 [4] => 0 ) ) ) 1
Die 4. Datei () konnte nicht gespeichert werden.
Es wurde keine Datei ausgewählt.
Array ( [Datei] => Array ( [name] => Array ( [0] => 609710_0428756.jpg [1] => [2] => [3] => [4] => ) [type] => Array ( [0] => image/jpeg [1] => [2] => [3] => [4] => ) [tmp_name] => Array ( [0] => /tmp/phpMLZMy0 [1] => [2] => [3] => [4] => ) [error] => Array ( [0] => 0 [1] => 4 [2] => 4 [3] => 4 [4] => 4 ) [size] => Array ( [0] => 20592 [1] => 0 [2] => 0 [3] => 0 [4] => 0 ) ) ) 1
Die 5. Datei () konnte nicht gespeichert werden.
Es wurde keine Datei ausgewählt.
Re: Bildupload funktioniert nicht richtig
Verfasst: Mi 15.Jun, 2011 13:52
von Holger
Mit
Code: Alles auswählen
$myFILE['name'] = $_FILES['Datei']['name'][$i];
$myFILE['type'] = $_FILES['Datei']['type'][$i];
$myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
$myFILE['error'] = $_FILES['Datei']['error'][$i];
$myFILE['size'] = $_FILES['Datei']['size'][$i];
echo print_r($_FILES);
wir der Ordner angelegt, und die Datei eine Ebene höher gespeichert, also nicht im Ordner. Das ist das einzige jetzt ...
Re: Bildupload funktioniert nicht richtig
Verfasst: Mi 15.Jun, 2011 16:31
von oxpus
Holger hat geschrieben:Hm, gilt das oben nicht für alle hier?
Code: Alles auswählen
$myFILE['name'] = $_FILES['Datei']['name'][$i];
$myFILE['type'] = $_FILES['Datei']['type'][$i];
$myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
$myFILE['error'] = $_FILES['Datei']['error'][$i];
$myFILE['size'] = $_FILES['Datei']['size'][$i];
Ja natürlich! Die erste Zeile hatte ich nur als Beispiel genannt
Also so ist das korrekt:
Code: Alles auswählen
$myFILE['name'] = $_FILES['Datei'][$i]['name'];
$myFILE['type'] = $_FILES['Datei'][$i]['type'];
$myFILE['tmp_name'] = $_FILES['Datei'][$i]['tmp_name'];
$myFILE['error'] = $_FILES['Datei'][$i]['error'];
$myFILE['size'] = $_FILES['Datei'][$i]['size'];
Re: Bildupload funktioniert nicht richtig
Verfasst: Do 16.Jun, 2011 08:47
von Holger
Wenn ich das ändere dann bekomme ich Falscher MIME-Type (). beim Upload.
Mit der alten version hat der Upload geklappt, nur wird der Pfad zum Ordner nicht berücksichtigt.
Re: Bildupload funktioniert nicht richtig
Verfasst: Do 16.Jun, 2011 16:48
von oxpus
Deine Version wäre aber unlogisch.
Hast du denn immer eine feste Anzahl Bilder, die du auf einmal hochladen willst?
Wenn ja, wäre es besser, du würdest im HTML-Formular kein Array als Feldnamen verwenden, sondern feste Nummern.
Also z. B. Datei_1, Datei_2, Datei_3...
Dann könntest du in einer Schleife von x bis y die Werte aus $_FILES auslesen mit
um nur ein Beispiel zu nennen (gilt dann natürlich für alle Werte von $_FILES).
Dann wäre das Prpblem mit einer sauberen Zuordnung schon einmal Geschichte.
Warum verwendest du beim Ordnernamen allerdings den absoluten Pfad und nicht den relativen vom Script aus?
Nur mal so in den Raum geworfen...
Mach doch mal ein
vor der Zeile
Code: Alles auswählen
if(@move_uploaded_file($myFILE['tmp_name'], $ordner.$neuer_name)){
Da müsste wenn dann der korrekte Pfad enthalten sein.
Wenn dort noch eine Verzeichnisebene fehlt, dann ist vielleicht $mat_id leer?!?
Re: Bildupload funktioniert nicht richtig
Verfasst: Do 16.Jun, 2011 19:59
von Holger
Aber mit $mat_id wird korrekt ein Ordner angelegt, mit der korrekten Nummer:
Code: Alles auswählen
$mat_id = $_GET['mat_id'];
$pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
$ordner = "bilder/$mat_id/";
$ordner2 = "/$pfad/$mat_id/";
mkdir($ordner2);
chmod($ordner2, 0777);
Ich will ja mit der ID später den Ordner auslesen um auf der Index-Seite ein Bild und auf der Detail-Seite alle Bilder anzuzeigen, das klappt auch schon.
Nur das Bild-im-Ordner-Speichern funktionert nicht.
Das Bild wird also hier abgelegt:
var/www/vhosts/maskinisten.net/httpdocs/mat/bilder
und nicht hier
var/www/vhosts/maskinisten.net/httpdocs/mat/bilder/
$mat_id
Re: Bildupload funktioniert nicht richtig
Verfasst: Fr 17.Jun, 2011 11:38
von oxpus
Deswegen solltest du ja das echo ausführen, ob der Pfad dann noch vorhanden ist (und vollständig ist), wenn die Pfadangabe für das verschieben der Bilddatei verwendet wird.
Nicht, dass $mat_id dann leer ist und damit das Bild wie du bereits nun schon mehrfach erwähntest im falschen Ordner landet...
Re: Bildupload funktioniert nicht richtig
Verfasst: Fr 17.Jun, 2011 13:31
von Holger
Ok, mit
bekomme ich
08e6bea8309952.jpg
Die 1. Datei (609710_0428756.jpg) wurde erfolgreich gespeichert.
Da fehlt also der Ordnername
Aber mit
Code: Alles auswählen
$mat_id = $_GET['mat_id'];
$pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
$ordner = "bilder/$mat_id/";
$ordner2 = "/$pfad/$mat_id/";
echo"$ordner<br />";
echo"$ordner2<br />";
Bekomme ich beim Aufrufen des Skriptes angezeigt:
bilder/28/
/var/www/vhosts/maskinisten.net/httpdocs/mat/bilder/28/
Kann der Fehler sein, dass die $mat_id beim Klicken auf Upload nicht weitergegeben wird?
Code: Alles auswählen
// Upload-Ordner definieren
// -----------------------------------------------
$mat_id = $_GET['mat_id'];
$pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
$ordner = "bilder/$mat_id/";
$ordner2 = "/$pfad/$mat_id/";
echo"$ordner<br />";
echo"$ordner2<br />";
mkdir($ordner2);
chmod($ordner2, 0777);
// Anzahl Dateifelder festlegen
// -----------------------------------------------
$anzahl_dateifelder = 5;
// Beginn des Skriptes
// -----------------------------------------------
// Falls der Benutzer auf "Upload" gedrückt hat,
// werden die Dateien überprüft
if(isset($_POST['submit']) AND $_POST['submit']=='Upload'){
// jede Datei einzeln testen
for($i=0; $i<$anzahl_dateifelder; $i++){
$myFILE['name'] = $_FILES['Datei']['name'][$i];
$myFILE['type'] = $_FILES['Datei']['type'][$i];
$myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
$myFILE['error'] = $_FILES['Datei']['error'][$i];
$myFILE['size'] = $_FILES['Datei']['size'][$i];
// echo print_r($_FILES);
// Fehlerarray erzeugen
$errors = array();
$errors = checkUpload($myFILE, $file_extensions, $mime_types, $maxsize);
if(count($errors)){
echo "<p>\n".
"Die ".($i+1).". Datei (".$myFILE['name'].") konnte nicht gespeichert werden.<br />\n";
foreach($errors as $error)
echo $error."<br />\n";
echo "</p>\n";
}
else {
do {
$neuer_name = renameFile($myFILE['name']);
} while(file_exists($ordner.$neuer_name));
echo $order.$neuer_name;
if(@move_uploaded_file($myFILE['tmp_name'], $ordner.$neuer_name)){
echo "<p>\n".
"Die ".($i+1).". Datei (".$myFILE['name'].") wurde erfolgreich gespeichert.<br />\n".
"</p>\n";
}
else{
echo "<p>\n".
"Die Die ".($i+1).". Datei (".$myFILE['name'].") konnte nicht gespeichert werden.<br />\n".
"Es ist ein Upload-Fehler aufgetreten.<br />\n".
"Bitte versuchen Sie es später erneut.<br />\n".
"<br />\n".
"Sollte der Upload noch immer nicht funktionieren, informieren Sie uns bitte per Email.<br />\n".
"<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
"</p>\n";
}
}
}
echo "<p>\n".
"<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
"</p>\n";
}
// Beim ersten Aufruf des Skriptes wird das
// Upload-Formular angezeigt
else{
echo "<h1>Laden Sie mehrere Bilder hoch!</h1>\n";
echo "<h2>Erlaubte Dateiendungen sind:</h2>\n";
foreach($file_extensions as $extension)
echo " - ".$extension."\n<br />";
echo "<h2>Erlaubte Dateigröße:</h2>\n";
echo " - maximal ".($maxsize/(1024*1024))." MB\n<br />";
echo " <form ".
"action=\"".$_SERVER['PHP_SELF']."\" ".
"method=\"post\" ".
"enctype=\"multipart/form-data\">\n";
echo " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".$maxsize."\" />\n";
for($i=0; $i<$anzahl_dateifelder; $i++){
echo " <label for=\"Datei\">".($i+1).". Datei auswählen</label>\n";
echo " <input type=\"file\" name=\"Datei[".$i."]\" id=\"Datei[".$i."]\" />\n";
echo " <br />\n";
}
echo " <input type=\"submit\" name=\"submit\" value=\"Upload\" />\n";
echo " </form>\n";
}
Re: Bildupload funktioniert nicht richtig
Verfasst: Fr 17.Jun, 2011 17:49
von oxpus
Wo kommt denn der Input für die Zeile
her?
Soll das aus dem Upload-Formular kommen oder aus einer URL, mit der das Formular aufgerufen wird?
Re: Bildupload funktioniert nicht richtig
Verfasst: Sa 18.Jun, 2011 19:32
von Holger
Das kommt aus der vorhergehenden Seite, die per URL das Upload-Skript mit dem mat_id versieht.
Also a href= ... .php&mat_id=27 nur als Beispiel.
Das klappt auch, der Ordner wird z.B. korrekt angelegt.
Und auch
gibt das Gewünschte aus.
Re: Bildupload funktioniert nicht richtig
Verfasst: Sa 18.Jun, 2011 22:19
von oxpus
Äh, wie kann der Ordner korrekt angelegt werden, wenn $mat_id nicht gesetzt ist?!?
Re: Bildupload funktioniert nicht richtig
Verfasst: So 19.Jun, 2011 11:52
von Holger
Jute Frage ...
Aber wenn ich ein Bild hochlade wird der Ordner mit der korrekten Nummer und CHMOD777 angelegt (im Ordner /bilder/).
Leider wird das Bild auch direkt in /bilder/ abgelegt und nicht in dem Nummern-Ordner.
Das ist der einzige Punkt der noch hakt.
Was ich schon überlegt habe: der Ordner wird ja vor dem Bildupload angelegt, oder.
Sobald ich ein Bild hochlade, ruft upload.php sich selber wieder auf, mit
Code: Alles auswählen
if(isset($_POST['submit']) AND $_POST['submit']=='Upload'){
Dann ist $mat_id nicht mehr gesetzt, oder?
Re: Bildupload funktioniert nicht richtig
Verfasst: So 19.Jun, 2011 13:52
von oxpus
Richtig. Deshalb muss $mat_id auch als hidden Input dem Formular hinzugefügt werden und mit $_POST dann ausgewertet werden.
Nur dann liegt der richtige Ordnername beim ablegen des Bildes auch vor.
Die "kleinen" Hürden eben, die einem beim programmieren verrückt machen können
Und daher fragte ich dich ja bewusst, woher $mal_id kommt, um dich auf genau diesen Punkt zu "schupsen".
Der Aha-Effekt ist dann nämlich am grössten, wie ich finde...
Re: Bildupload funktioniert nicht richtig
Verfasst: So 19.Jun, 2011 18:46
von Holger
Das Problem ist nur: ich habe diesen hidden-Trick schon versucht, und ich habe auch versucht den mat_id abzugreifen ... so wie vor dem IF aber nach dem IF halt.
Hat aber nicht geklappt.
Ich werde es morgen nochmal versuchen!
Danke Karsten!
Re: Bildupload funktioniert nicht richtig
Verfasst: So 19.Jun, 2011 20:30
von oxpus
Du findest die richtige Stelle schon.
Bedenke aber auf jeden Fall, dass du $mat_id auch mit $_POST ausliest, sonst ist der Wert weiterhin nicht verfügbar.
Am besten ersetzt du die Zeile
durch
Code: Alles auswählen
$mat_id = if (isset($_GET['mat_id'])) ? intval($_GET['mat_id']) : intval($_POST['mat_id']);
Das sollte reichen, um die Variable auch aus dem Formular heraus zu erhalten.[*]
Re: Bildupload funktioniert nicht richtig
Verfasst: Mo 20.Jun, 2011 08:49
von Holger
Ne, das letzte klappt nicht, ich bekomme eine weisse Seite.
Sind die Klammern so richtig?
Re: Bildupload funktioniert nicht richtig
Verfasst: Mo 20.Jun, 2011 11:51
von oxpus
Doch, die Klammern sind korrekt, aber das "if" muss da weg...
Re: Bildupload funktioniert nicht richtig
Verfasst: Mo 20.Jun, 2011 12:04
von Holger
Ja, jetzt wird was mitgeschickt, aber leider nur eine 0 (null)
Die FORM sieht nun so aus:
Code: Alles auswählen
echo " <form ".
"action=\"".$_SERVER['PHP_SELF']."\" ".
"method=\"post\" ".
"enctype=\"multipart/form-data\">\n";
echo " <input type=\"hidden\" name=\"MAT_ID\" value=\"".$mat_id."\" />\n";
echo " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".$maxsize."\" />\n";
for($i=0; $i<$anzahl_dateifelder; $i++){
echo " <label for=\"Datei\">".($i+1).". Datei auswählen</label>\n";
echo " <input type=\"file\" name=\"Datei[".$i."]\" id=\"Datei[".$i."]\" />\n";
echo " <br />\n";
}
echo " <input type=\"submit\" name=\"submit\" value=\"Upload\" />\n";
echo " </form>\n";
Es wird nun also ein Ordner 31 (Beispiel) und ein Ordner 0 angelegt ...
Im Ordner 0 wird die Datei auch abgelegt.
Code: Alles auswählen
// Falls der Benutzer auf "Upload" gedrückt hat,
// werden die Dateien überprüft
if(isset($_POST['submit']) AND $_POST['submit']=='Upload'){
$mat_id = (isset($_GET['mat_id'])) ? intval($_GET['mat_id']) : intval($_POST['mat_id']);
$pfad = "var/www/vhosts/maskinisten.net/httpdocs/mat/bilder";
$ordner = "bilder/$mat_id/";
$ordner2 = "/$pfad/$mat_id/";
echo"$ordner<br />";
echo"$ordner2<br />";
mkdir($ordner2);
chmod($ordner2, 0777);
// jede Datei einzeln testen
Re: Bildupload funktioniert nicht richtig
Verfasst: Mo 20.Jun, 2011 12:13
von oxpus
Dieser Part war ja auch nur das Auslesen aus dem Formular.
$mat_id muss aber noch als "hidden"-input im Formular hinterlegt werden