Fehler bei Bilder in Datenbank schreiben

  • PHP

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Agita.

    Fehler bei Bilder in Datenbank schreiben

    Hallo,

    ich wollte mal ausprobieren, wie man Bilder in einer Datenbank speichert
    und wollte ein kleines Script machen, dass es in die Datenbank speichert:

    Datenbank-Script

    PHP-Quellcode

    1. <?php
    2. function startsWith($haystack, $needle)
    3. {
    4. return !strncmp($haystack, $needle, strlen($needle));
    5. }
    6. $title = $_POST["title"];
    7. $description = $_POST["description"];
    8. $owner = $_SESSION["username"];
    9. $mysqli = new mysqli(dbhost,dbuser,dbpassword,dbname);
    10. if($mysqli->connect_error)
    11. {
    12. echo "Fehler!";
    13. exit();
    14. }
    15. $title = $mysqli->real_escape_string($title);
    16. $description = $mysqli->real_escape_string($description);
    17. $owner = $mysqli->real_escape_string($owner);
    18. // Bild auslesen
    19. if (array_key_exists('img',$_FILES)) {
    20. $tmpname = $_FILES['img']['tmp_name'];
    21. $type = $_FILES['img']['type'];
    22. if(startsWith($type,"image/"))
    23. {
    24. $hndFile = fopen($tmpname, "r");
    25. $data = addslashes(fread($hndFile, filesize($tmpname)));
    26. // -------------------------------------------------------
    27. $mysqli->query("INSERT INTO easyshare_imgs (title, description, imgdata, imgtype, owner) VALUES ('$title', '$description', '$data', '$type', '$owner');");
    28. if($mysqli->affected_rows == 0)
    29. {
    30. echo "<div class = 'container'>";
    31. echo "<font size = '20'>Es ist ein Fehler in der Datenbank aufgetreten!</font>";
    32. echo "</div>";
    33. } else {
    34. echo "<div class = 'container'>";
    35. echo "<font size = '20'>Erfolgreich hochgeladen!</font>";
    36. echo "</div>";
    37. }
    38. } else {
    39. echo "<div class = 'container'>";
    40. echo "<font size = '20'>Die Datei ist keine Bilddatei</font>";
    41. echo "</div>";
    42. }
    43. $mysqli->close();
    44. ?>



    Kleine Teile des Scripts, wie das Bild auslesen und startsWith
    habe ich aus dem Internet gefunden und der Rest ist alles selber
    gemacht.

    Wenn ich jetzt von einem Formular die Daten ans Script sende,
    kommt ein Serverfehler:



    Als Hostingpaket habe ich Strato Powerweb Basic.

    Hoffe, jemand kann mir helfen.

    Freue mich auf Antworten

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Fehlercode 500 sagt doch alles aus ;)

    de.wikipedia.org/wiki/HTTP-Statuscode

    Zweitens, musst du schon die temporäre Datei die beim Upload erzeugt wird öffnen mittels fopen und den Inhalt der File mittels fread auslesen (Vorraussetzung Blob als Datentyp für das jeweilige Attribut in der Tabelle)

    Drittens:
    Es ist nicht empfehlenswert Bilder in der Datenbank zu speichern, ebenso wenig wie Email Anhänge oder andere binäre Daten.
    Nicht notwendiger erhöhter Administrationsaufwand und generell lagert man sowas auf das Filesystem aus und speichert höchstens den Dateinamen in der Datenbank.

    Fullqoute...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „fufu“ ()

    add:
    solltest du doch mal kleinere bilder in der DB speichern wollen, was zwar wie schon erwähnt nicht empfehlenswert, aber in manchen situationen okay ist, dann erseitz dein "addslashes" durch "base64_encode". man kann sie zwar auch direkt speichern, aber ein klarer text ist hier empfehlenswert, falls du beispielsweise mal die DB-daten exportieren willst, etc, etc

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Agita“ ()