Bilder aus Datenbank mit json laden

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

  • Bilder aus Datenbank mit json laden

    hi Community,

    ich habe folgendes Problem.

    Ich möchte ein Bild aus der Datenbank laden welches in binärdaten abgelegt ist.

    meine datenbankstrucktur sieht folgendermassen aus

    --------------------------------------
    Datenbank
    --------------Tabelle-----------------
    Feld1-----Feld2------Feld3-----Feld4-
    index----- Bild ------ Text ---- Preis -
    int------- Blob ------Vchar ----float
    AI


    jetzt habe ich folgendes probiert

    PHP-Code:
     
    $tageartTabellen 
    "SELECT * FROM arttages";
    $tageartErgebnis mysql_query($tageartTabellen) or die ("SQL-Fehler: In Abfragedefinitionen 1000: ");
    while(
    $tageArtikelResult mysql_fetch_array($tageartErgebnisMYSQL_ASSOC)) {$tbtages[] = array(
    'tagbld01' => $tageArtikelResult['tagbld01']);}
    echo 
    $tbtages[0]; 
    der code funktioniert soweit.
    sobald ich dies jetzt mit json probiere
    würde so aussehen

    PHP-Code:
    $tageartTabellen "SELECT * FROM arttages";
    $tageartErgebnis mysql_query($tageartTabellen) or die ("SQL-Fehler: In Abfragedefinitionen 1000: ");
    while(
    $tageArtikelResult mysql_fetch_array($tageartErgebnisMYSQL_ASSOC)) {$tbtages[] = array(
    'tagbld01' => $tageArtikelResult['tagbld01']);}
    echo 
    json_encode($tbtages); 
    jetzt bekomme ich als ergebnis NULL.

    kann mir jemand von euch sagen was ich hier falsch mache?

    vielen dank im voraus.

    powersave

  • #2
    Hallo,

    vermutlich stößt du an die Grenzen des Arbeitsspeichers, vgl. json - PHP json_encode size limit? - Stack Overflow

    JSON wurde aber auch nie darauf ausgelegt, Binärinhalte zu transportieren. Du könntest versuchen, das Bild so wie es ist übertragen und die anderen Informationen z. B. als Extension-Headers.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      json_encode() mag schlicht keine Binärdaten.

      Je nachdem, welche Möglichkeiten deine Gegenstelle hat, könntest du die Binärdaten base64 kodieren und an json_encode übergeben, wobei du dabei ca. 30% Aufschlag bei der zu übertragenden Datenmenge bekommst.
      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
      Schön - etwas Geschichte kann ja nicht schaden.
      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

      Kommentar


      • #4
        Zitat von Quetschi Beitrag anzeigen
        die Binärdaten base64 kodieren und an json_encode übergeben.
        schlauer bub!....

        aber jetzt mal ernst....

        wie bekomme ich die daten bei jquery für eine jqxgrid ausgelesen?

        ich bastle jetzt schon seit einer woche daran rum und bekomme es nicht hin....

        ein code schnipzel wäre nicht schlecht...

        powersave

        Kommentar


        • #5
          Mal nach „jqxgrid image“ oder so gesucht?

          - jQuery Grid with Image Column - Javascript, HTML5, jQuery Widgets

          Edit: Vielleicht schafft das Ding data-URIs. Data URI scheme - Wikipedia, the free encyclopedia (verfügbar ab IE8). Ansonsten müsstest du dir ein getimage.php?id=<bild-id> Script schreiben, das du dort als URL setzen kannst und das die Bilder aus der DB holt und mit dem richtigen MIME-Type ausliefert.
          Zuletzt geändert von mermshaus; 31.08.2012, 13:04.

          Kommentar


          • #6
            Zitat von mermshaus Beitrag anzeigen
            Mal nach „jqxgrid image“ oder so gesucht?
            warum soll ich danach suchen wenn ich diese benutze?

            ich versuche es nochmal verständlich zu erklären....

            die Bilddaten liegen mir in binärer form bereits vor...
            ich bekomme sie nur nicht transportiert das ich das Bild in der jqxGrid anzeigen lassen kann....

            im phpscript bekomme ich das bild korrekt angezeigt...

            wie schicke ich die daten nun weiter....

            das ich das bild im javascript an das jqxGrid übergeben kann.
            Zuletzt geändert von powersave; 31.08.2012, 18:56.

            Kommentar


            • #7
              So wie es mermshaus verlinkter Seite aussieht, musst du das Bild über ein PHP-Script als eigene Resource bereitstellen und die so entstandene Adresse in deinem Json-Objekt übergeben und diese dann wie dort gezeigt einbinden.
              Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
              Schön - etwas Geschichte kann ja nicht schaden.
              Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

              Kommentar


              • #8
                Ja nun,
                habe nach jqxGrid und Image in Google gesucht und nichts entsprechendes gefunden. Auf der Seite von jqxWidget werden zwar Images geladen und angezeigt aber nicht direkt aus einer Datenbank.

                Bei den link Wikipedia werde ich nicht so recht schlau.
                Brauchte mal ein Ansatz wie so ein Script aussieht oder funktioniert.

                Wie geschrieben:
                in php bekomme ich das bild ohne base64_encode direkt angezeigt,
                allerdings nur mit echo $bild; ohne json_encode.

                Mit $bild = base64_encode(datenbankfeld) und als ausgabe echo json_encode($bild); werden mir nur die binärdaten angezeigt und nicht das Bild. Das wird auf alle fälle wohl richtig sein? Wenn ich nun das Feld in jqxGrid einbinde sehe ich leider nur die binärdaten. Müssen die binärdaten direkt bei der Liste umgewandelt werden? wenn ja, wie?

                powersave

                Kommentar


                • #9
                  Um das Bild aus der Datenbank zu laden übergibst du ja einem PHP-Skript eine ID welches wiederrum dir die Binärdaten liefert.
                  Versuche nicht jqxGrid die Binärdaten zu geben sondern den Link zu der PHP-Datei mit der ID als GET Parameter.
                  Das PHP-Skript selbst gibt sich dann als Bild-Resource aus und zeigt somit das Bild an.
                  Wenn du dir dann den generierten Quellcode vom jqxGrid ansiehst wird da sowas stehen wie "<img src='image.php?bildid=1234'>"

                  Kommentar


                  • #10
                    Danke für deine Antwort boeserfrosch ,

                    ich habe eine spalte mit bilder, eine mit einer autoid, eine mit text und eine als float. ich selektiere keinen einzelnen datensatz sondern lese die daten komplett per select * from tabellenname in jqxGrid ein.

                    ich steh irgenwie auf den schlauch. ja ich habe ein php-script.
                    ich hole die daten wie folgt aus php:

                    Code:
                    var resource = {
                    async: false,
                    datatype: "json",
                     
                    datafields: [
                    {name: 'bild'},
                    {name: 'text'},
                    {name: 'preis', type: 'float'},], [URL="http://www.php-resource.de/forum/'phfoods.php'"]url:'phfoods.php'[/URL]};
                     
                    var dataAdapter = new $.jqx.dataAdapter(resource);
                    und übergebe sie dann den entsprechenden columns.

                    Code:
                     
                    $('#Grid').jqxGrid({
                      width:  309,
                      height: 636,
                      rowsheight: 159, 
                      source: dataAdapter, 
                      columnsresize: false,
                      enableanimations: false, 
                      showheader: false,
                      selectionmode: 'singlerow',
                      verticalscrollbarstep: 159, 
                      showemptyrow: false,
                      theme: 'energyblue',
                     
                      columns:[
                      {text:'Bild',   dataField:'bild', width:289},
                      {text:'Text', dataField:'text',width:250,},
                      {text:'Preis', dataField:'preis', cellsalign:'right', cellsformat:'c2'}]
                    });
                    und wie die bilder?

                    danke im voraus
                    powersave

                    Kommentar


                    • #11
                      Ok du hast also deine PHP-Datei phfoods.php von deinem Posting oben.
                      PHP-Code:
                      $tageartTabellen "SELECT bild,text,preis FROM arttages";
                      $tageartErgebnis mysql_query($tageartTabellen) or die ("SQL-Fehler: In Abfragedefinitionen 1000: ");
                      while(
                      $tageArtikelResult mysql_fetch_array($tageartErgebnisMYSQL_ASSOC)) {
                      $tbtages[] = array('Bild' => $tageArtikelResult['id'],'Text' => $tageArtikelResult['text'],'Preis' => $tageArtikelResult['preis']);}
                      echo 
                      json_encode($tbtagesJSON_FORCE_OBJECT)); 
                      Dein resource Objekt sieht dann etwa so aus:
                      Code:
                      var resource = {
                      async: false,
                      datatype: "json",
                       
                      datafields: [
                      {name: 'bild'},
                      {name: 'text'},
                      {name: 'preis', type: 'float'},], url:'phfoods.php'};
                       
                      var dataAdapter = new $.jqx.dataAdapter(resource);
                      Und die übergabe der Spalten dann etwa so:

                      Code:
                      $('#Grid').jqxGrid({
                        width:  309,
                        height: 636,
                        rowsheight: 159, 
                        source: dataAdapter, 
                        columnsresize: false,
                        enableanimations: false, 
                        showheader: false,
                        selectionmode: 'singlerow',
                        verticalscrollbarstep: 159, 
                        showemptyrow: false,
                        theme: 'energyblue',
                       
                        columns:[
                        {text:'Bild',   dataField:'bild', width:289, cellsrenderer: imagerenderer},
                        {text:'Text', dataField:'text',width:250,},
                        {text:'Preis', dataField:'preis', cellsalign:'right', cellsformat:'c2'}]
                      });
                      
                      var imagerenderer = function (row, datafield, value) {
                         return '<img style="margin-left: 5px;" height="60" width="50" src="image.php?id=' + value + '"/>';
                      }
                      Und deine image.php sieht dann in etwa so aus:

                      PHP-Code:
                      <?php
                      header
                      ('Content-Type: image/gif');
                      $tageartTabellen "SELECT bild FROM arttages WHERE id=".intval($_GET["id"]);
                      $tageartErgebnis mysql_query($tageartTabellen) or die ("SQL-Fehler: In Abfragedefinitionen 1000: ");
                      while(
                      $tageArtikelResult mysql_fetch_array($tageartErgebnisMYSQL_ASSOC)) 
                      {
                      echo 
                      $tageArtikelResult['bild'];
                      }
                      ?>
                      Das ganze ist ungetestet, eventuell musst du den Header noch anpassen aber ich denke das bringt dich ein ganzes Stück weiter.
                      So würde ich das zumindest aufziehen.

                      Das ganze ließ sich relativ schnell über
                      http://www.jqwidgets.com/jquery-grid-with-image-column/
                      und
                      http://www.jqwidgets.com/jqxgrid-wit...rgejsonresult/
                      zusammen basteln auch wenn man wie ich mit jqxGrid vorher noch nicht gearbeitet hat.
                      Zuletzt geändert von boeserfrosch; 01.09.2012, 00:55. Grund: JSON_FORCE_OBJECT eingefügt

                      Kommentar

                      Lädt...
                      X