Ankündigung

Einklappen
Keine Ankündigung bisher.

Bild aus Datenbank auslesen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Bild aus Datenbank auslesen

    Hallo zusammen,

    also als erstes weiß ich das man Bilder nicht in eine Datenbank speichern sollte, sind aber nur wenige und mein Chef will es so.

    Um das Bild aus der SQL Datenbank auszulesen braucht man ja ein externes Skript, weil man ja ansonsten nur die Binärdaten des Bildes ausgelesen bekommt. Dieses hab ich folgendermaßen erstellt und funktioniert soweit auch:

    PHP-Code:
    <?php
     
        
     mysql_select_db
    ("..."); 
     
       
    $sql 'SELECT image FROM images WHERE id = 1';
       
    $result mysql_query($sql);
       
    $bild mysql_fetch_row($result);
         
         
    $sql=mysql_query($sql) or die(mysql_error());
      
    header("Content-Type: image/jpeg");
      echo 
    $bild[0];
           
     
    ?>

    Verbind ich jetzt die externe php mit der eigentlichen Homepage über:

    PHP-Code:
    <?php include('showpic.php'); ?>
    bekomm ich beim Aufruf im Browser folgende Aussage:

    "Die Grafik kann nicht angezeigt werden, weil sie Fehler enthält"

    Genau das wollte ich doch mit der externen php vermeiden und es geht trotzdem nicht. Kann mir da jemand weiterhelfen?

    Viele Grüße

  • #2
    aller wahrscheinlichkeit kommt es da zu einer zusätzlichen ausgabe(leerzeichen/header already sent/errors/ ...).

    Kommentar


    • #3
      Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
      Choosing an API
      Warum man mysql* generell nicht (mehr) nutzen sollte.
      Wie man von mysql* auf PDO umsteigt
      Wissenswertes zum Thema SQL-Injection

      Kommentar


      • #4
        Zitat von geeko Beitrag anzeigen
        "Die Grafik kann nicht angezeigt werden, weil sie Fehler enthält"

        Genau das wollte ich doch mit der externen php vermeiden und es geht trotzdem nicht. Kann mir da jemand weiterhelfen?
        Schau dir an was der Browser da als Antwort bekommt. Am einfachsten geht das wenn du das header("Content-Type: image/jpeg"); zum Testen rausnimmst. Da siehst du dann evtl. Fehlermeldungen von PHP und/oder Leerzeichen vor den Bild.

        Kommentar


        • #5
          Danke erstmal für die schnellen Antworten.

          Schau dir an was der Browser da als Antwort bekommt. Am einfachsten geht das wenn du das header("Content-Type: image/jpeg"); zum Testen rausnimmst.
          Nehm ich den header raus, bekomm ich wieder das Problem, dass mir die Bilder als Binärdaten angezeigt werden (sonst keine Fehlermeldung), was ich ja durch den externen Aufruf der Bilder vermeiden wollte. Komm mir grad vor wie in einem Teufelskreis.

          Kommentar


          • #6
            Mehr Code bitte, vorallem von dort, wo du das Bild einbindest/nutzt.
            [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

            Kommentar


            • #7
              Zitat von geeko Beitrag anzeigen
              Nehm ich den header raus, bekomm ich wieder das Problem, dass mir die Bilder als Binärdaten angezeigt werden.
              Das war auch das Ziel der Übung! Hast du geschaut ob vor dem Bild Leerzeichen/Umbrüche kommen? (Quelltext anzeigen oder header("Content-Type: text/plain"); ) Wenn nicht liegt der Fehler nicht bei der Darstellung sondern wahrscheinlich schon beim Speichern. Du kannst auch mal den File-Header posten (einfach die ersten 10-20 Zeichen), daran erkennt man ob das ein Bild ist oder nur Datenmüll.

              Kommentar


              • #8
                Vielleicht versteh ich hier was komplett falsch, aber warum überhaupt include?

                Wenn das erste Snippet doch funktioniert wie du sagst, dann sollte ja beim
                direkten Aufruf deiner "showpic.php" das Bild entsprechend angezeigt werden.

                Wird diese Datei aber jetzt includet, dann muss man ja davon ausgehen, das vor
                oder nach dem include noch etwas anderes kommt (sonst würde das ja von
                vornherein keinen Sinn machen) und wenn das der Fall ist, dann ist es ja klar,
                dass das Bild nicht korrekt dargestellt werden kann.

                Eigentlich sollte es doch völlig ausreichen die showpic.php per img-tag in der
                Webseite einzubinden, irgendwie verstehe ich nicht was du da mit dem include
                bezwecken willst...

                Kommentar


                • #9
                  Was hier falsch läuft ist primär einmal, dass er Bilder in der Datenbank speichert. Das macht man nämlich einfach nicht (trotz dem, dass es den BLOB-Datentyp gibt, wirklich.).

                  Ansonsten, ja, das showpic.php wird garantiert in ein src-Attribut gehören.
                  [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                  Kommentar


                  • #10
                    Danke für die Antworten.

                    Mit dem imv tag hats natürlich sofort funktioniert. Mit dem include Befehl war ein unnötiger Denkfehler. Danke für die Hinweise.

                    Und ja ich weiß, dass Bilder nicht in eine Datenbank gehören aber wie so oft, macht man halt einfach nur das, was einem gesagt wird ^^.

                    Kommentar


                    • #11
                      Gibt es dafür eine nachvollziehbare Begründung?

                      Kommentar


                      • #12
                        Zitat von ChristianK Beitrag anzeigen
                        Was hier falsch läuft ist primär einmal, dass er Bilder in der Datenbank speichert. Das macht man nämlich einfach nicht (trotz dem, dass es den BLOB-Datentyp gibt, wirklich.).
                        Nein, deine Aussage ist falsch. Ob Bilder in der Datenbank gespeichert werden ist eine Frage der Vor- und Nachteile. In unseren Umfeld gibt es u.U. zwar schwere Nachteile, das macht es aber nicht falsch, maximal ungünstig.

                        Datenbank:
                        +Referentielle Integrität
                        +kein Handling von externen Ressourcen (z.B. Bild von Festplatte löschen)
                        +Transaktionen
                        +Portabilität
                        +Rechtemanagement
                        +Replikation
                        +/-Backup Handling
                        -je nach DBMS ungünstiger Ressourcen verbrauch

                        als externe Ressource/Dateisystem:
                        +Ressourcenverbrauch
                        +einfaches einbinden in HTML Code (über Webserver mit Zugriff aufs Dateisystem)
                        +Datei übertragung mit Standardtools (Explorer/FTP/SFTP/rsync usw...)
                        +/-Backup Handling
                        -Handling von externen Ressourcen
                        -Referentielle Integrität (Datenbank und Dateisystem können inkonsistent werden)

                        Kommentar


                        • #13
                          Bild aus Datenbank auslesen

                          Du magst recht haben. Jemand, der seine Kenntnisse als Anfänger einstuft wird jedoch (noch) nicht in der Lage sein, das korrekt abzuwägen oder vermutlich keine Applikation entwickeln, bei der das entscheidend ist.
                          [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                          Kommentar


                          • #14
                            Ist aber auch in dem Fall nicht besser, das Verfahren so als "Falsch" einzustufen.

                            Kommentar


                            • #15
                              möglicherweise sollte man da mal offtopic komplett neu starten.
                              falsch ist sicher nicht die perfekte beschreibung, erc da haste recht.

                              zu den punkten einzeln:
                              +Referentielle Integrität

                              das mag immer ein argument für ne db sein.
                              bei bildern? nehmen wir profilbilder, mkan läd ein hoch oder auch nicht, schon bringt mir die echt wenig.

                              +kein Handling von externen Ressourcen (z.B. Bild von Festplatte löschen)

                              dafür den ganzen traffic auf einer maschine, keine möglichkeit komplett extenre bilder einzubiden (gravatar bspws. um bei profilbilder zu bleiben).
                              und zur not: es gibt ja cron.

                              +Transaktionen
                              +Portabilität

                              nunja, ich halte bilder von externen resource für genauso portabilitiertbar, transaktionen, ok, klassisch db eben.

                              +Rechtemanagement

                              das wiederum stimmt, nur kann ich eben genauso wie ich dbusber anlegenm kann auch os user anlegen, also nix damit.

                              +Replikation
                              verteilte dateisysteme und damit wesentlich grössere datenmengen.

                              +/-Backup Handling
                              (..)

                              -je nach DBMS ungünstiger Ressourcen verbrauch

                              als externe Ressource/Dateisystem:
                              +Ressourcenverbrauch
                              +einfaches einbinden in HTML Code (über Webserver mit Zugriff aufs Dateisystem)
                              macht nicht so den unterschied.

                              +Datei übertragung mit Standardtools (Explorer/FTP/SFTP/rsync usw...)
                              bringt ja d´nur die ganze integrietät der aplikation durcheinander.

                              +/-Backup Handling

                              -Handling von externen Ressourcen
                              seh ich vorteile.

                              -Referentielle Integrität (Datenbank und Dateisystem können inkonsistent werden)
                              (s.o.)


                              ok, aber als anfänger blick ich eben nicht durch, geb ich ja zu.
                              bei welchem aplikationstyp kommen denn die vorteile zum tragen?

                              Kommentar

                              Lädt...
                              X