Benedikt: Dateiupload

Hi, ich möchte Bilder in meiner DB speichern.
Um nicht jedes Bild einzeln hochladen zumüssen mach ich das über eine Zip-Datei.

Um die Datei in der DB zu speichern muss ich allerdings den (utf8?) String in einen hex-Wert umwandeln. (Datentyp BLOB in DB)

Kann mir da jemand weiterhelfen?

Bis jetzt habe ich folgendes:

$file = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$tmp = "";
for ($z = 0; $z < strlen($file); $z++)
  $tmp .= dechex(ord($file[$z]));
$tmp = "0x" . $tmp;

Allerdings wandelt er nicht alles richtig um.

  1. Lieber Benedikt,

    Du möchtest wirklich die Bilddateien selbst in der DB speichern?

    Nach allem, was man hier so ab und zu mitliest, wäre ein Abspeichern der Dateien in einem dafür vorgesehenen Verzeichnis viel sinnvoller, wobei natürlich in der DB eine Referenz auf die jeweiligen Bilddateien abgelegt wird.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Ich habe mich  mit dem für und wieder beschäftigt und für die DB-Lösung entschieden. Und werde auch dabei bleiben. Bitte beantwortet einfach nur die Frage.

      1. Hello,

        das Hochladen kannst Du auch mittels eines "Multi-Upload-Formulars" bewerkstelligen.
        Die maximale Größe der hochzuladenden Daten musst Du ohnehin passend einstellen

        Nach dem Hochladen:
        1. Prüfen auf Single- oder MultiUpload
        2. Fehlerwerte ($_FILES[$upload_feldname]['error'] oder $_FILES[$upload_feldname]['error'][$x])
           abfragen und nur solche Uploads mit Error == 0 weiterverarbeiten
        3. Hochgeladende Dateien prüfen auf Typ, z.B. mittels get_image_size()
        4  Magic Quotes entfernen, falls welche gesetzt sind.
        5. Hochgeladene Dateien in Transferbuffer für den DB-Eintrag überführen und mittels
           spezieller Funktion escapen (z.B. mysql_real_escape_string())
        6. Insert durchführen.

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

  2. echo $begrüßung;

    Um nicht jedes Bild einzeln hochladen zumüssen mach ich das über eine Zip-Datei.
    Um die Datei in der DB zu speichern muss ich allerdings den (utf8?) String in einen hex-Wert umwandeln. (Datentyp BLOB in DB)

    Nein, auf gar keinen Fall. Die Bilddaten sind Binärdaten, und kein Text, dessen Zeichen durch ein oder mehrere Bytes kodiert sind. Du musst die Bytes so nehmen, wie sie kommen und keinerlei Umwandlung beim Lesen vornehmen.

    Beim Einfügen in eine Datenbank sind allerdings einige Regeln zu beachten, die je nach DBMS unterschiedlich sind. Einige Systeme (z.B. Oracle) haben ein spezielles Handling für BLOBs. Andere Systeme übergeben die Daten als Zeichenkette (z.B. MySQL), wobei bestimmte Zeichen besondes zu notieren sind, damit sie nicht als Sonderzeichen interpretiert werden. Du solltest dich in der Dokumentation deines Systems erkunden, welche Zeichen das sind und in der PHP-Extension für dein DBMS nachsehen, welche Funktion dir diese Arbeit abnimmt (z.B. MySQL: Funktion mysql_real_escape_string()).

    echo "$verabschiedung $name";