Image in die Datenbank einlesen und auslesen

  • Hallo, ich bräuchte leider Hilfe. Ich habe im Internet ein Script gefunden, welches ich umgeändert habe um Bilder in die Datenbank einzulesen und auszulesen. Jedoch klappt nur das Einlesen
    in die Datenbank aber nicht das auslesen kann mir jemand dabei helfen.
    Erst einmal werde ich die im Internet gefundene Datei hin kopieren und
    dann das abgeänderte von mir. Leider muss ich dazu sagen ich bin totale Anfängerin und brauch es für ein Projekt im Studium. Ich sitze seit einigen Tagen dran und komme nicht voran Ich hoffe es kann mir jemand dabei helfen. Danke.



    die Datei index.php an, die für das Hochladen und Anzeigen der Bilder verantwortlich ist :


    image.php benötigt, die sich um das Auslesen der Bilder aus der Datenbank kümmert:



    Jetzt das veränderte von mir :( ich hoffe ich hab nicht alzuviel falsch gemacht.

    die Datei index.php an, die für das Hochladen und Anzeigen der Bilder verantwortlich ist :





    die Datei Test2.php benötigt, die sich um das Auslesen der Bilder aus der Datenbank kümmert:




  • Das letzte Script: die Datei Test2.php

    Du nutzt FETCH_OBJ, bekommst also ein Object (per $object->property angesprochen).

    Du sprichst es allerdings als Array an: echo $row['image'];


    Außerdem fehlt ein ; in Zeile 8 :)


    Probier mal das hier:


    Bitte immer Daten (egal aus welcher Quelle - selbst, wenn es aus der eigenen db kommt) per PLatzhalter in die SQL query schreiben.


    Und die anderen Scripte nicht vergessen zu updaten, um Platzhalter zu verwenden.



    EDIT: btw - was ist in der db.images das Feld `image` für ein Typ?

    -- hab den Artikel gefunden - hat sich erledig. Sicherlich Type BLOB.

    Nur noch zur Ergänzung der Prepared Statements -Geschichte:

    wie gesagt alle anderen Scripte updaten, und immer Platzhalter zu nutzen.

    Ab dann kannst Du nämlich auch addslashes weglassen.

    PHP
    Aus// Vorbereiten für den Upload in DB
    $data = addslashes(file_get_contents($image));

    wird dann

    PHP
    // Bilddaten lesen
    $data = file_get_contents($image);
  • Also bei mir zeigt er an:

    Notice: Undefined index: idimage in C:\xampp\htdocs\bok\Test2.php on line 8

    ich weiß aber ehrlich gesagt nicht wie ich das löschen soll :(

    ich kenn mich wirklich kaum mit php aus

    soll ich am besten $image=1; setzen oder aus der datenbank aufrufen?

    Also momentan sieht mein Code folgendermaßen aus.


    PHP
    <?php
        
        $idimage = $_GET['idimage'];
        $statement = $pdo->prepare("SELECT image, mimetype FROM imagedb WHERE idimage='$idimage'");
        $statement->execute();
        while($row = $statement->fetch(PDO::FETCH_BOTH)) {
        header("Content-type: $row->mimetype");
        echo $row->image;
        }
    ?>




    habe die variale id in idimage geändert nicht wundern, selbstverständlich auch in der Datenbank

  • Hey,


    diese Notiz kommt, wenn die variable nicht definiert ist. Was ich dir vorschlagen würde bei der Variable ist folgendes:

    PHP
    $idimage = isset($_GET['idimage']) ? $_GET['idimage'] : null ;
    // wenn ? dann : sonst

    Dies weist $idimage, wenn kein Bild mit dem Formular über GET gesendet wurde, null zu. Somit ist sie auch definiert, wenn kein Bild gesendet wurde.


    PHP
    while($row = $statement->fetch(PDO::FETCH_BOTH))

    PDO::FETCH_BOTH ? Meintest du nicht PDO::FETCH_OBJ ?


    Bitte berücksichtige das, was cotton geschrieben hat. Dies ist sehr wichtig.


    Stef

  • Ich Danke euch :) also PDO::FETCH_BOTH hatte ich rum experimentiert, jedoch vergessen wieder rückgängig zu machen. Also die Bilder werden in die Datenbank eingelesen jedoch ohne dieses $data = addslashes(file_get_contents($image)); liest er die Bilder auch nicht ein.. Also egal irgendwie bekomme ich das nicht hin. Aber Fehlermeldungen zeigt er mir dank euch nicht mehr an :)

  • um Bilder in die Datenbank einzulesen und auszulesen.

    [ ... ]

    und brauch es für ein Projekt im Studium.


    Die erste Frage, die sich mir stellt: Wozu willst Du die Bilder in die Datenbank einlesen?

    Normalerweise reicht es, die Dateinamen zur Verfügung zu haben und dann das passende Bild aus der Datei zu laden.


    Das Zweite wäre: Es finden keinerlei Prüfungen dessen statt, was hochgeladen wurde. Du speicherst zwar den Mimetyp ab, aber was, wenn da eben nicht z. B. image/png enthalten ist, sondern application/octet-stream ?

    Für solche Prüfungen eigenen sich z. B. mime_content_type und exif_imagetype; für Bildgrössenprüfungen bietet sich getimagesize an, und die Dateigrösse lässt sich leicht mit filesize kontrollieren.


    Als Drittes: Bei dieser Zeile

    $statement=$pdo->prepare("INSERT INTO imagedb VALUES('', '$data', '$mime')");

    muss man als Gefragter annehmen, dass die Tabelle auch mit diesen drei Spalten, in dieser Reihenfolge und mit passenden Typen erstellt ist. Zur Fehlersuche und zum Fehlerausschluss ist es aber hilfreicher, wenn man sieht, was tatsächlich erstellt wurde.

    Das Vierte: Bei dieser Zeile

    $statement->execute();

    kann ein Fehler vorkommen, den du aber nicht abfragst. Also erhälst Du keine Fehlermeldung, wenn es nicht gerade ein kritischer Fehler ist. Bei execute also besser so etwas wie

    if ( $statement->execute() )

    {

    // mach' das Gewünschte

    }

    else

    {

    // Fehlerausgabe

    }

    Bei deinem SELECT dürfte das zwar etwas überdimensioniert sein, aber schadet auch nicht. Und vielleicht vertippt man sich ja auch mal bei einer SELECT-Abfrage, was zu ansonsten unbemerkten Fehlern führen kann.


    Und (erstmal) zum Schluss: Wieviele Header kann man senden, nachdem man eine oder mehrere Ausgaben gesendet hat?

    1. while($row = $statement->fetch(PDO::FETCH_BOTH))
    2. {
    3. header("Content-type: $row->mimetype");
    4. echo $row->image;
    5. }

    Dass das zu keinen Fehlern geführt haben soll, macht mich etwas stutzig. Könnte nur sein, dass das Programm garnicht dort ankam oder die Query keine zur übergebenen ID passenden Bilder gefunden hat. Stelle ich das mit einer foreach-Schleife nach, wird mir zwar auch kein Fehler ausgegeben (was mich ebenfalls stutzig macht), aber auch nur das erste Bild angezeigt. Mache ich das mit den Bilddateinamen, werden alle Bilder ausgegeben (siehe Erste Frage).

  • Ich Danke dir vielmals, ich hab jetzt nochmal nachgeschaut und bin zum Entschluss gekommen ein anderes Script zu nehmen.



    Ich Danke euch das ihr euch die Zeit genommen habt um mir zu Antworten :D

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!