Anzeigen eines Bildes aus einer DB in einer HTML-Seite

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

  • Anzeigen eines Bildes aus einer DB in einer HTML-Seite

    Hallo alle miteinander.

    Ich moechte, Bilddaten aus einer DB auslesen und auf einer HTML-Seite in einem Formular anzeigen.

    Soweit ich das in den dazu passenden Beitraegen gelesen habe, funktioniert das mit PHP nur ueber einen Umweg.

    Diesen habe ich wie folgt versucht zu implementieren:

    1. Ich lese die Daten aus der DB.
    2. Liegen Bilddaten vor, schreibe ich diese in eine temporaere $_SESSION-Variable.
    3. Ich pruefe, ob beim Formularaufbau die temporaere $_SESSION-Variable gesetzt ist.
    3.1. Ist sie nicht gesetzt, gebe ich ein Standardbild aus.
    3.3. Ist sie gesetzt, rufe ich das Skript auf, welches die in der $_SESSION-Variable gespeicherten Bilddaten ausgeben soll.

    So sieht das im Coding aus:

    $_SESSION-Variable belegen (report ist eine eigene Loggingfunktion):
    $n kann die Werte 0 oder 1 annehmen.

    PHP-Code:
    if ($gefunden==TRUE
    {
       
    //Bilddaten gefunden
       
    report(FULL_REPORT,__LINE__," Bilddaten werden fuer die Anzeige bereit gestellt.");
       
    $_SESSION['show_img'.$n]=$zeile[img];
       
    report(FULL_REPORT,__LINE__,$_SESSION['show_img'.$n] );

    Aufruf des Anzeigeskriptes:

    PHP-Code:
    <img src="
    <?php 
    if (!isset($_SESSION['show_img0']))
       echo
    'image/no_pic.gif'
    else 
       echo
    "show.php?id=0"
    ?>
    ">
    Das Skript show.php sieht dann folgendermassen aus:

    PHP-Code:
    <?php
    $ausgabe
    =$_SESSION['show_img'.$_GET['id']];
    unset (
    $_SESSION['show_img'.$_GET['id']]);
    header("Content-Type: jpg");
    echo 
    $ausgabe;
    ?>
    Leider werden die Bilddaten nicht angezeigt.
    In einem ersten Wurf habe ich, verschiedenen Anleitungen folgend
    in show.php die Bilddaten ein weiteres mal gelesen und angezeigt.
    Das hat auch geklappt geklappt. Fand ich aber irgendwie nicht so schoen,
    da ich die Bilddaten ja bereits im Hauptskript aus der DB ausgelesen hatte.

    Hat jemand eine Idee?

    Gruesse

  • #2
    wieso der umweg über die session?
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Den Umweg ueber die Session wollte ich machen, weil ich dachte, dass man Variablen nicht uebergeben kann, dass also sowas wie:

      PHP-Code:
      <img src="
      <?php 
      if (!isset($_SESSION['show_img0']))
         echo
      'image/no_pic.gif'
      else 
         echo
      "show.php?id=0&daten=$zeile['img']"
      ?>
      ">
      nicht funktioniert.

      Oder geht es noch einfacher?
      Ich lass mich immer gerne belehren.

      gruesse

      Kommentar


      • #4
        warum dem script, was die bilder darstellen soll, nich einfach nur einen namen oder id mitgeben.

        den rest, also auch das auslesen aus der DB, kann das script machen.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Das hatte ich ja zuerst gemacht.

          Allerdings lese ich dann erst die Datenbank aus, um festzustellen, ob ich ueberhaupt ein Bild darstellen will,
          oder das "kein-bild-da"-Bild anzeige.
          Erst daraufhin rufe ich das Skript auf und lese den Datensatz,
          den ich gerade erst gelesen habe erneut aus.

          Ausserdem habe ich ein weiteres Problem, welches mich veranlasst hat,
          diese erste (funktionierende) Loesung zunaechst wieder zu verwerfen.

          Fuer das Auslesen der Datenbank verwende ich eine eigene Klasse
          und dort eine Methode zum Lesen von einzelnen Datensaetzen.

          PHP-Code:
          //Ein einzelner Datensatz wird aus der Datenbank gelesen und zurueckgeliefert.
          //Parameter:
          //sql  : SQL-Anweisung fuer die DB
          //zeile: Enthaellt im Erfolgsfall den gelesenen Datensatz, im Fehlerfall die Fehlermeldung.
          function querySingleObject($sql,&$zeile)
          {
             
          report(FULL_REPORT,__LINE__,"Funktion: querySingleObject aufgerufen. ");
             
          report(FULL_REPORT,__LINE__,$sql);
              
              if (
          $result=$this->o_db->query($sql))
             {
                if(
          $zeile=$result->fetch_assoc())
               {
                  
          report(FULL_REPORT,__LINE__," Single Datensatz gelesen. \n");
                  
          $result->close();
                  return 
          OK;
               }
               else
              {
                 
          report(FULL_REPORT,__LINE__," Kein Datensatz vorhanden. \n");
                 
          $zeile='';
                 return 
          NIT_OK;
              }
            } 
            else
           {
             
          $zeile=$this->o_db->error;
             
          report(ERROR_REPORT,__LINE__," FEHLER beim Datensatz lesen. \n".$zeile."\n");
             return 
          NIT_OK;
           }

          Wenn ich diese Methode aufrufe, werden die Bilddaten nicht angezeigt.
          Kommentiere ich die report-Aufrufe aus, werden die Bilddaten angezeigt.

          Da ich also zum einen nicht auf die Loggingfunktion in meiner Datenbankzugriffsklasse verzichten
          und auch redundante Datenbankaufrufe vermeiden moechte,
          habe ich an eine Realisierung ueber die $_SESSION-Variable nachgedacht.
          Leider wie im ersten Post beschrieben ohne Erfolg ;-).

          Selbst, wenn ich mich schlussletzlich doch wieder dazu entscheiden muesste, die erste Variante einzusetzen,
          wuerde es mich doch interessieren, warum die $_SESSION Variante nicht funktioniert.

          gruesse

          Kommentar


          • #6
            hab mit deinen letzten post nur überflogen ..... der erste teil reichte mir schon.

            schreib im html einfach .-... img src="bild.php?id=x" wobei x hier entweder deine id ist, oder von mit aus auch ein bildname ....

            in der bild.php liest du die daten aus der DB aus, zu denen die id passt.
            ist ein datensatz vorhanden, zu ermitteln mit mysql_get_rows(), kannst du ein default-image mit dem script ausgeben. ansonsten halt die daten .....
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              okies, scheint, als muesste ich es wohl doch wieder so machen wie ganz zu anfangs ;-).

              werde dann halt in der bild.php nicht meine db-lese-klasse verwenden, sondern einfach ohne klasse und ohne logging die datensaetze lesen ;-).

              kann mir denn vielleicht trotzdem jemand (unueblich oder nicht) erklaeren, warum die $_SESSION-Variante erst gar nicht funktioniert?

              gruesse

              Kommentar

              Lädt...
              X