Upload fehler in PHP script

wolle-

Mitglied
Hallo alle zusammen,

nachdem ich nun rumprobiert habe dieses Script 4 Stunden zum laufen zu bekommen fallen mir die Haare aus.
Ich bin mir sicher, dass es nur ein KLITZEKLEINER fehler ist - wie immer...


Vielleicht kann mir kurz jemand auf die sprünge helfen?

Wäre sehr nett von euch
(Schonmal vielen Dank!)

Hier das script:

PHP:
<?php
  $pic = $_POST['picfile'];
 
 
 
 $fehler = false;
    if ($pic=="")
 {
     # Kein Bild ausgewählt
  $dateiname = 'no_pic.jpg';
 }
    elseif ($pic_size>500000)
 {
  echo sprache("Die Datei ist zu groß.");
  $fehler = true;
 }
    else
 {
  # Alles ok, Foto auf den Server laden
        $dateiname = "azubis_".md5($pic).".jpg";
        copy($pic, "/var/www/ausbildung2/gfx/azubis/".stripslashes(.$dateiname));
        echo sprache("Das Foto wurde erfolgreich hochgeladen.");
    }


Der Teil der Form:

HTML:
  <td>Foto:</td><td>&nbsp;</td><td><input type="file" name="picfile"></td>
 </tr>
 <tr>
  <td>&nbsp;</td><td>&nbsp;</td><td><input type="submit" name="add" value="Hinzufügen"></td>

Und dieser Fehler kommt:

Warning: copy(Z:\\gfx\\7ford.jpg): failed to open stream: No such file or directory in /var/www/ausbildung2/content/admin/azubi_add_do.php on line 32

Grüße Wolle
 
Also PHP mit Fileuploads... das funktioniert doch ein wenig anderst ,)

Siehe: http://de2.php.net/features.file-upload

als erstes muss dein Formular enctype="multipart/form-data" enhalten, sieht man nicht, keine Ahnung ob du das drin hast.

Dann weiter, die Files die hochgeladen werden, landen nicht in $_POST[] sondern in $_FILES[].

nach der Validierung machst du ein
PHP:
copy($_FILES['picfile']['tmp_name'], "/var/www/ausbildung2/gfx/azubis/".$_FILES['picfile']['name']);
 
Ok!

Als erstes danke für die fixe antwort!

Denke du meinst das so richtig?

HTML:
<form method="post" enctype="multipart/form-data" action="<?=$datei?>.php?sid=<?=sid?>§ion=intern&action=azubi_add_do" name="azubineu">

Einen fehler bekomme ich nun nicht mehr, dass von wegen Stream not opened oder so. Sagt alles Ok! Jedoch wird das Bild nicht in den Richtigen Ordner kopiert trotz recht 777.

Hier die ganze Datei falls das hilft? :=)

PHP:
<?php
  $pic = $_POST['picfile'];

   $fehler = false;
    if ($pic=="")
 {
     # Kein Bild ausgewählt
  $dateiname = 'no_pic.jpg';
 }
    elseif ($pic_size>500000)
 {
  echo sprache("Die Datei ist zu groß.");
  $fehler = true;
 }
    else
 {
  # Alles ok, Foto auf den Server laden
        $dateiname = "azubis_".md5($pic).".jpg";
//        copy($pic, "/var/www/ausbildung2/gfx/azubis/".$dateiname);
       copy($_FILES['picfile']['tmp_name'], "/var/www/ausbildung2/gfx/azubis/".$_FILES['picfile']['name']);  

       // echo sprache("Das Foto wurde erfolgreich hochgeladen.");
    }
 
 # Daten in mySQL eintragen:
 $query_neuedaten_A = "insert into ".$tabletag."_azubis set name='".$_POST['name']."', betrieb='".$_POST['betrieb']."', beruf='".$_POST['beruf']."', jahr='".$_POST['jahr']."';";
# echo $query_neuedaten_A;
 mysql_query($query_neuedaten_A,$conn) or die('MySQL gab einen Fehler zurück: '.mysql_error()); 
 
# #cat poster_id jahr
 $query_neuedaten_B = "insert into ".$tabletag."_azubitype set name='".$_POST['name']."', betrieb='".$_POST['betrieb']."', beruf='".$_POST['beruf']."', pic='".$dateiname."';"; 
 echo $query_neuedaten_B;
 mysql_query($query_neuedaten_B,$conn) or die('MySQL gab einen Fehler zurück: '.mysql_error()); 
?>
</div>
<form enctype="multipart/form-data" method="post" action="<?=$datei?>.php?sid=<?=sid?>§ion=intern&action=azubi_add_do" name="azubineu">
<input type="hidden" name="add" value="add"><br>
<table cellpadding="3" cellspacing="3" border="0">
 <tr>
  <td>Name:</td><td>&nbsp;</td><td><input type="text" name="name"></td>
 </tr>
 <tr>
  <td>Lehrjahr:</td><td>&nbsp;</td>
  <td>
   <select name="jahr">
    <option value="1">Erste</option>
    <option value="2">Zweite</option>
    <option value="3">Dritte</option>
   </select>
  </td>
 </tr>
 <tr>
  <td>Beruf:</td><td>&nbsp;</td><td><input type="text" name="beruf"></td>
 </tr>
 <tr>
  <td>Betrieb:</td><td>&nbsp;</td><td><input type="text" name="betrieb"></td>
 </tr>
 <tr>
  <td>Foto:</td><td>&nbsp;</td><td><input type="file" name="picfile"></td>
 </tr>
 <tr>
  <td>&nbsp;</td><td>&nbsp;</td><td><input type="submit" name="add" value="Hinzufügen"></td>
 </tr>
</table>
</form>
<body>
</body>
</html>

Grüße wolle :-)O
 
$pic_size solltest du noch ändern in $pic['size'] um zu große Bilder auszuschließen.
ansonsten, du speicherst in der Tabelle einen anderen namen ab als übertragen, ich hatte es in meinem ersten Post ein wenig allgemeiner geschrieben, aber hier musst du das auf jeden Fall noch ändern:

PHP:
        $dateiname = "azubis_".md5($_FILES['picfile']['name']).".jpg";
//        copy($pic, "/var/www/ausbildung2/gfx/azubis/".$dateiname);
       copy($_FILES['picfile']['tmp_name'], "/var/www/ausbildung2/gfx/azubis/".$dateiname);

Und: kahmen denn gar keine Bilder an? oder nur mit falschem Namen?

Außerdem musst du unbedingt vor dem kopieren Überprüfen ob es ein Bild-Format ist.Am besten per getimagesize() und checkst gleich noch ob es nicht zu groß von der Auflösung her ist.


PS: was ich grad noch gesehen hab:

PHP:
    if ($pic=="")
 {
     # Kein Bild ausgewählt
  $dateiname = 'no_pic.jpg';
 }

Das funktioniert so nicht, da wenn kein Bild ausgewählt ist er es unten wieder überschreibt. Besser währe es wohl nichts in die Datenbank zu schreiben und beim auslesen das nopic zu setzen.
 
Hm achso, hatte schon versucht das name durch picfile zuersetzen und so, war aber ohne Erfolg.

Auch nun:

1. Kein einziger Fehler
2. Kein neues Bild in dem Ordner
3. Das verstehe ich nicht

Kann ich mir da fehler anzeigen lassen oder wie finde ich nun raus wo die Kuh begraben liegt?

PHP:
 $pic = $_POST['picfile'];
        $dateiname = "azubis_".md5($_FILES['picfile']['name']).".jpg";
//        copy($pic, "/var/www/ausbildung2/gfx/azubis/".$dateiname);
       copy($_FILES['picfile']['tmp_name'], "/var/www/ausbildung2/gfx/azubis/".$dateiname);


HTML:
<form enctype="multipart/form-data" method="post" action="<?=$datei?>.php?sid=<?=sid?>§ion=intern&action=azubi_add_do" name="azubineu">
<input type="hidden" name="add" value="add"><br>
<table cellpadding="3" cellspacing="3" border="0">
 <tr>
  <td>Name:</td><td>&nbsp;</td><td><input type="text" name="name"></td>
 </tr>
 <tr>
  <td>Lehrjahr:</td><td>&nbsp;</td>
  <td>
   <select name="jahr">
    <option value="1">Erste</option>
    <option value="2">Zweite</option>
    <option value="3">Dritte</option>
   </select>
  </td>
 </tr>
 <tr>
  <td>Beruf:</td><td>&nbsp;</td><td><input type="text" name="beruf"></td>
 </tr>
 <tr>
  <td>Betrieb:</td><td>&nbsp;</td><td><input type="text" name="betrieb"></td>
 </tr>
 <tr>
  <td>Foto:</td><td>&nbsp;</td><td><input type="file" name="picfile"></td>
 </tr>
 <tr>
  <td>&nbsp;</td><td>&nbsp;</td><td><input type="submit" name="add" value="Hinzufügen"></td>
 
HI,

wo wils du denn die Datei dann kopieren?

Versuch es mall eine absolute Pfad anzugen. z.B. C:/ordner/...

$pic = $_POST['picfile'];
$dateiname = "azubis_".md5($_FILES['picfile']['name']).".jpg";
// copy($pic, "/var/www/ausbildung2/gfx/azubis/".$dateiname);
$pfad="C:/var/www/ausbildung2/gfx/azubis/" ;
copy($_FILES['picfile']['tmp_name'], $pfad.$dateiname);

so solte es eigentlich funk. Ich habe das zumindest so gemacht.

pesoi
 
Hi du, danke für den Tip,
aber das kann nicht funktionieren.

Habe hier Linux rennen und da gibt es kein C:\

/ <- Hauptstamm

/var/www <- Webordner

:-)

Grüße wolle:)
 
Echt?

Hm das ist ja komisch..

Mal sehen vielleicht hat EngelB noch einen Rat.. :-)

Finde das schon seltsam :confused:

Gruß Wolle
 
Hmm sehr misteriös, es muss aber irgendwie schon am Pfad liegen. Du könntest den Pfad noch dynamisch mitgenerieren lassen und eben einen relativen Pfad zu der php-datei somit angeben.

PHP:
$currend_dir   = getcwd();
$filename = "azubis_".md5($_FILES['picfile']['name']).".jpg";
copy($_FILES['picfile']['tmp_name'], $currend_dir.'/ausbildung2/gfx/azubis/'.$filename);
unlink($_FILES['picfile']['tmp_name']);

Aber das alte hätte auch schon funktionieren müssen. Sind vielleicht PHP Errors irgendwie deaktiviert? Das Die berechtigung des verzeichnisses "azubis" wo sie hinkopiert werden wollen doch nicht 777 ist.

Wenn alles nicht hilft bau noch ein paar echo`s ein o.O aber so generell seh ich auch nix weiter an was es liegen könnte. der dateiname sollte ja eignetlich auch kein problem darstellen hmmm Aber irgendwas muss auf dem Webserver ja ankommen.

print_r($_FILES), vielleicht steht was im error? hmm aber sonst fällt mir spontan auch nix weiter ein.
 
Zurück