Neuling braucht Hilfe bei einer Bildergallerie

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Neuling braucht Hilfe bei einer Bildergallerie

    Hallo

    Habe gerade angefangen mich für php zu interessieren.Ich möchte gerne über eine
    html form einen "Teilekatalog" erstellen.
    Das mit der Eingabe und dem speichern in eine Datei hat (bis auf einen zeilensprung nach jedem Datensatz )auch hingehauen nur das mit den Bildern will
    nicht klappen,
    Aus Grundlagen und Profiwissen habe ich folgendes Listing abgetippt :

    Quellcode

    1. <h1>Willkommen in unserem Bildersammlung </h1>
    2. senden sie uns ihre Bilder
    3. <p>
    4. <form action="<?= $_SERVER['PHP_SELF'] ?>" enctype="multiport/form-data" method=POST>
    5. <input type="file" name="file" size="50">
    6. <input type="submit" value="coverbild senden">
    7. <input type="hidden" name="MAX_FILE_SIZE" value="5000000"
    8. </form>
    9. <?php
    10. $dir = "upload";
    11. if($_POST['file'])
    12. {
    13. $dest = "$dir/{$_FILES['file']['name']}";
    14. if (!copy($_FILES['tmp_name']['name'], $dest))
    15. {
    16. echo "Fehler - kann Datei nicht ablegen <br />\n";
    17. exit;
    18. }
    19. }
    20. $fd = opendir("$dir");
    21. while($cover = readdir($fd))
    22. {
    23. if (preg_match("/\.(jpg|gif|png)$/i",$cover))
    24. {
    25. echo "<a href=\"$cover\">";
    26. echo "<img src=\"$cover\"align=middle border=0 height=80 width=80>";
    27. echo "</a>$cover<br />\n";
    28. }
    29. }
    30. closedir($fd);
    31. ?>
    Alles anzeigen


    Damit wollte ich mich langsam rantasten.
    Wenn ich das Script laufen lasse bekomme ich die fehlermeldung :
    Fehler - kann Datei nicht ablegen. was mache ich falsch ?
    ich habe ein Unterverzeichnis upload angelegt.
    Hoffe ihr könnt mir weiterhelfen.

    Gruss
    Thoran
  • hallo thoran

    ersetze doch gerade mal die Funktion
    copy($_FILES['tmp_name']['name'], $dest)

    durch
    move_uploaded_file($_FILES['tmp_name']['name'], $dest)

    Denn copy dupliziert die Datei auf deinem server - "move" verschiebt sie in den richtigen pfad

    die redundanz ist aber natürlich nicht das problem..
    vielleicht fällt dir das problem selbst auf: vergleich mal folgende zeilen
    $_FILES['file']['name']
    $_FILES['tmp_name']['name']


    na?
    $_FILES['file'] ist korrekt.. das steht für den formular namen des elements. folglich musst du das untere element auch in $_FILES['file']['tmp_name'] ändern

    aber erkundige dich dennoch was CHMOD ist - das ist auch voraussetzung, damit dein script klappt
    klick mit deinem ftp programm mit der rechten maustaste auf den ordner upload und such mal ob du dort was von chmod liest... vielleicht ist es auch unter eigenschaften...
    der ordner braucht die rechte 777 - was so viel heißt, dass der webserver auch dateien in dein ordner ablegen kann (der webserver sorgt ja für den upload über http)
    wenn du keine Zahlen eintippen kannst, sondern stattdessen eine 3x3 Matrix zur auswahl hast, dann alles anklicken
  • nein, windows hat wirklich kein chmod
    aber unter windows brauchst du auch eigentlich gar kein chmod, weil du da immer schreiben darfst (glaub ich zumindest)

    hab gerade noch einen fehler in deinem html formular entdeckt: du hast das eine input element nicht geschlossen

    und mach außerdem noch aus

    Quellcode

    1. if($_POST['file'])

    das hier

    Quellcode

    1. if(isset($_FILES['file'])
  • die fehlermeldung kommt nu nicht mehr.
    bis dahin recht herzlichen dank.
    das script kopiert jedoch auch nicht.
    entweder habe ich das script falsch verstanden oder da ist noch ein fehler.
    mit dem input wähle ich die datei aus.
    wenn ich auf coverbild senden klicke sollte er mir
    das ausgewählte file nach upload kopieren/verschieben oder ?
    im ordner kommt nix an.

    gruss
    thoran
  • diese version ist meine letzte.


    Quellcode

    1. <h1>Willkommen in unserem Bildersammlung </h1>
    2. senden sie uns ihre Bilder
    3. <p>
    4. <form action="<? $_SERVER['PHP_SELF']?>" enctype="mulipart/form-data" method="post">
    5. <input type="file" name="file" size="50">
    6. <input type="submit" value="coverbild senden">
    7. <input type="hidden" name="MAX_FILE_SIZE" value="500000">
    8. </form>
    9. <?php
    10. $dir = "upload";
    11. if(isset($_FILES['file']))
    12. //if($_POST['file'])
    13. {
    14. $dest = "$dir/{$_FILES['file']['name']}";
    15. //if (!copy($_FILES['tmp_name']['name'], $dest))
    16. move_uploaded_file($_FILES['tmp_name']['name'],$dest);
    17. {
    18. echo "Fehler - kann Datei nicht ablegen <br />/n";
    19. exit;
    20. }
    21. }
    22. $fd = opendir("$dir");
    23. while($cover = readdir($fd))
    24. {
    25. if (preg_match("/\.(jpg|gif|png)$/i",$cover))
    26. {
    27. echo "<a href=\"$cover\">";
    28. echo "<img src=\"$cover\"align=middle border=0 height=80 width=80>";
    29. echo "</a>$cover<br />\n";
    30. }
    31. }
    32. closedir($fd);
    33. ?>
    Alles anzeigen


    es sollte nur ein einstieg sein und nu "steige" ich bereits seit 3 tagen auf der stelle
    hab soviel gelesen das ioch schon gar nichts mehr kapiere.
    danke für deine mühen

    gruss
    thoran
  • Habe mir deinen Aktuellen Code mal angesehen und ein wenig Verändert:

    Quellcode

    1. <h1>Willkommen in unserem Bildersammlung </h1>
    2. senden sie uns ihre Bilder
    3. <p>
    4. <form action="<?=$_SERVER['PHP_SELF']?>" name="upload" method="post" enctype="multipart/form-data">
    5. <input type="file" name="file" size="50" />
    6. <input type="submit" value="coverbild senden" />
    7. <input type="hidden" name="action" value="upload" />
    8. </form>
    9. <?php
    10. $dir = "upload";
    11. $max_byte_size = 5242880;
    12. $allowed_types = "(jpg|jpeg|gif|png|tif)";
    13. if($_POST['action'] == 'upload') {
    14. if(!isset($_FILES['file']['name'])) {
    15. die("Bitte wählen Sie eine Datei aus!");
    16. } else {
    17. $dest = $dir.'/'.$_FILES['file']['name'];
    18. if(preg_match("/\." . $allowed_types . "$/i", $_FILES['file']['name'])) {
    19. if($_FILES['file']["size"] <= $max_byte_size) {
    20. if(move_uploaded_file($_FILES['file']['tmp_name'], $dest)) {
    21. die("Bild erfolgreich hochgeladen!");
    22. } else {
    23. die("Datei konnte nicht hochgeladen werden.");
    24. }
    25. } else {
    26. die("Die Datei darf nur eine Größe von " . $max_byte_size . " Byte besitzen.");
    27. }
    28. } else {
    29. die("Die Datei besitzt keine ungültige Endung.");
    30. }
    31. }
    32. }
    33. $fd = opendir("$dir");
    34. while($cover = readdir($fd)) {
    35. if (preg_match("/\.(jpg|gif|png)$/i",$cover)) {
    36. $pfad = "upload/";
    37. echo "<a href=\"".$pfad.$cover."\">";
    38. echo "<img src=\"".$pfad.$cover."\" align=\"middle\" border=\"0\" height=\"80\" width=\"80\">";
    39. echo "</a>$cover<br />\n";
    40. }
    41. }
    42. closedir($fd);
    43. ?>
    Alles anzeigen


    Wie d0nUt schon erwähnte...der größte Fehler war
    $_FILES['file']['name']
    $_FILES['tmp_name']['name']


    Habe die Ausgabe noch etwas überarbeitet und den Pfad auch mal eingegeben...sonst wirst du nie etwas sehen, was in /upload ist...

    Die CHMOD Rechte setzt du am besten auf 777 (für Ordner /upload)

    Dann habe ich dir noch eingebaut, dass die Dateiendung überprüft wird, die Maximale Dateigröße als Variable gespeichert (5242880 = 5MB) und ein Hidden Feld eingefügt, das dem Script sagt, dass das Formular abgesendet wurde...

    Quellcode

    1. if($_POST['action'] == 'upload')


    wünsche dir viel Spaß damit :D