Bilder uploaden in DB

  • Hallo,

    anhand dieses Tutorials http://www.infos24.de/mysqle/handbuch/9_mysql_binaries.htm versuche ich Bilder in meine DB hochzuladen und wieder auszugeben.
    Nach dem Hochladen in die DB steht in Spalte 'Bild' folgender Eintrag: BLOB - 0 Bytes. Es ist sozusagen leer. Diese Fehlermeldung erscheint nach dem Ausführen des Skripts:

    Code
    [B]Warning[/B]: fread(): supplied argument is not a valid stream resource in [B]C:\xampp\htdocs\myStaff\Datenbank-Test\upload.php[/B] on line [B]18[/B]


    Zeile 18

    PHP
    $bild=addslashes(fread(fopen($datei, "r"), filesize($datei)));



    Hier der Code vom Tutorial (übergabevariablen hinzugefügt):


    Ich bin mir nicht ganz sicher, ob ich die DB richtig eingerichtet habe, da ich nicht weiss, wo diese Anweisungen gemacht werden sollen:

    Code
    Query OK, 0 rows affected (0.16 sec)



    Thanks

  • Frage: Warum willst du überhaupt ein Bild in eine DB stopfen?

    $HTTP_POST_FILES ist veraltet, benutze $_FILES

    Das ist auch schlecht: $bild=addslashes(fread(fopen($datei, "r"), filesize($datei)));

    Und wieso $datei?

    Einmal editiert, zuletzt von bandit600 (9. Januar 2009 um 15:24)

  • eigentlich wollte ich diese variante nur mal testen, aber leider funktioniert es nicht.

    zur zeit habe ich die bilder in einem Ordner und in die DB kommt nur der link. das funktioniert ganz gut. Ist das eine gängige Methode?
    mal ne frage: kann man ein bild über ein Formular in einen bestimmten Ordner hochladen? Also anstatt ins die DB gleich in einen Ordner.

  • Hi,

    danke für den Tip mit move_uploaded_file. Ich lade die Datei in den bestimmten Ordner und in die DB kommt nur der Dateiname.
    Gleichzeitig wird die Datei in einen einheitlichen Dateinamen je Datensatz umbenannt (z.B. 01-img.jpg). Dazu hänge ich die ID des jeweiligen Datensatzes an den Dateinamen voran. So gibt es für jeden Datensatz eine Datei.
    Allerdings gibts mit der Vergabe der ID ein Problem, wenn ich einen neuen Datenssatz hinzufüge: ich hole mir die maximale ID ( z.B 100) über eine Abfrage und sage IDnext = IDmax+1 (z.B. 101). So weit so gut, werden jetzt aber Datensätze zuvor gelöscht (z.B. 99, 100), dann ist IDmax 99 und 100 wäre IDnext. Aber beim Erstellen des neuen Datensatzes vergibt MySQL als neue ID 101 (da ja schon 99, 100 vergeben wurden), da ID auto_increment. Nun meine Frage, wie kann ich in diesem Sonderfall die richtige ID erhalten?

  • danke, das funktioniert jetzt.


    Schön, dass mal jemand eine Rückmeldung gibt und sich auch bedankt. Ist leider keine Selbstverständlichkeit. ;)

  • Da tut sich gleich wieder ein neues kleines Problemchen auf: wie kann man ein input feld mit type="file" auf Eingabe prüfen. es funktioniert irgendwie nicht mit dem name-attribut. Hast du ne Idee? Zur info es gibt mehrer dieser Felder, die unabhängig voneinander geprüft werden sollen.

    Thanks

  • Mach mal ein

    PHP
    print_r($_FILES);


    in dein Script, dann erkennst du selber, was du machen musst. ;)