Oldal: 1 / 2 12 UtolsóUtolsó
Eredmény: 1 - 10 (11) összesen

Téma: Blob kép megjelenítése adatbázisból Codeigniter-el

  1. #1
    Új tag
    Csatlakozott
    11-08-02
    Hozzászólás
    8
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás Blob kép megjelenítése adatbázisból Codeigniter-el

    Sziasztok!

    Codeigniterben jártas személyektől szeretnék segítséget kérni. Adatbázisban tárolok képeket BLOB formátumban, attól most tekintsünk el, hogy célszerűbb a kép útvonalát tárolni, jelen esetben muszáj BLOB-ban tárolnom és onnan kiolvastatnom. Az adatbázis szintén adott, semmit nem változtathatok rajt,

    CREATE TABLE `aru` (
    `cikksz` Varchar(20) NOT NULL,
    `megnev` Varchar(255) NOT NULL,
    `ar` INTEGER UNSIGNED,
    `index_kep` LONGBLOB,
    `kep` LONGBLOB,
    PRIMARY KEY(`cikksz`)
    )
    TYPE = InnoDB;

    A feladatom az lenne, hogy az index kép csak akkor töltődjön le, ha az valóban látszik is a böngészőablakban (felesleges requestek minimalizálása), továbbá a nagy képet csak akkor kérje le és mutassa meg egy új layer-en (fancybox, lightbox, ami szimpatikus), amikor a felhasználó rákattint az index képre.
    A problémám az lenne, hogy az adatbázisból lekérem a képeket, de kiíratáskor mindenféle zagyvaság jelenik meg a kép helyén. Több helyen olvastam, hogy a header információkat kell megváltoztatni kiíratás előtt így, header('Content-type: image/jpeg'); de nálam, amint megadom ezt a sort, az addigi dolgok sem jelennek meg, csak egy tök üres oldal. Próbáltam már így is megadni, $this->output->set_header('Content-type: image/jpg'); az eredmény ugyanaz. Olvastam még olyan lehetséges megoldást, miszerint az addslashes() alkalmazása feltöltéskor, és a stripslashes() alkalmazása kiolvasáskor megoldja a problémát. Nálam sajnos ez sem hozott eredményt. Valamint ez nem is lenne jó esetemben, mivel nem kell konkrét feltöltő formot készítenem, egyszerűen phpMyAdminon keresztül megy minden adat feltöltése, szóval nem is tudnám alkalmazni az előbb említett függvényeket, de egy próbát azért tettem velük.
    Hogy tudnám megoldani, hogy megjelenjenek helyesen a képek? Mit csináltam rosszul? A view fájlom egy része, ami megjeleníti az adatokat:
    ...

    <?php
    foreach ($products as $prod){
    ?>
    <tr>
    <td width="20%"><?php echo $prod->cikksz."<br />"?></td>
    <td width="40%"><?php echo $prod->megnev."<br />"?></td>
    <td width="20%"><?php echo $prod->ar."<br />"?></td>
    <td width="20%">
    <?php
    // $this->output->set_header('Content-type: image/jpg'); // Ha a header be van állítva nem jelenít meg semmit, csak üres oldalt. Ha másik fájlban próbálom meg kiiratni, ahol csak az image/jpeg header van beállítva (a kettős MIME type elkerülése miatt), az eredmény ugyanaz.
    // header('Content-type: image/jpeg'); //másik header lehetőség
    // $this->output->set_output($prod->index_kep)."<br />";
    echo anchor($prod->kep, $prod->index_kep, array('class' => 'small_image'));
    ?>

    </td>
    </tr>
    <?php
    }
    ?>
    </table>
    </div><!--End of display-content-->
    </body>
    </html>


    A hibás részeket kikommenteztem, azért vannak a kódban a // jelek.
    Valamint azt tudom, hogy a nagy kép megjelenítése nem lesz jó így echo anchor($prod->kep, $prod->index_kep, array('class' => 'small_image')); ,mert helytelenül hivatkozok rá, szóval örülnék, ha esetleg arra is jönne megoldás, hogy hogyan hivatkozhatnék a kép eredetijére a kiolvasás után, hogy a fancybox megjelenítse.

    Előre is köszönöm a segítséget!



  2. #2
    Bölcs benedictus logója
    Csatlakozott
    10-04-23
    Hozzászólás
    1.574
    Begyűjtött 2 köszönetet
    2 hozzászólásával

    Alapbeállítás re: Blob kép megjelenítése adatbázisból Codeigniter-el

    a headert csak bármi kiiratás előtt változtathatod. kezdődjön azzal a php.



  3. #3
    Adminisztrátor BagiZoli logója
    Csatlakozott
    07-04-26
    Hely
    8200, Királynék városa
    Hozzászólás
    3.855
    Begyűjtött 320 köszönetet
    154 hozzászólásával

    Alapbeállítás re: Blob kép megjelenítése adatbázisból Codeigniter-el

    Húha, most lehet, hogy badarságot fogok írni, de lehet segíteni fogok. Szóval ha egy html outputba szeretnél betenni egy képet, akkor ahhoz az img tagot kell használni. És az img tagban src értékében meghívott php fájlban kellene a jpeg-es headert használni. Szóval szerintem kellene egy új php amit parametrizálsz aszerint, hogy melyik tartalomhoz kérdezed le a képet, ill. mekkora méretben. Ezek alapján pedig a jpg-s headerrel kiíratsz egy valid képet.



  4. #4
    problémageneráló ptrth logója
    Csatlakozott
    11-01-04
    Hely
    Diliház
    Hozzászólás
    209
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Blob kép megjelenítése adatbázisból Codeigniter-el

    Idézet Bagi Zoltán eredeti hozzászólása Hozzászólás megtekintése
    Húha, most lehet, hogy badarságot fogok írni, de lehet segíteni fogok. Szóval ha egy html outputba szeretnél betenni egy képet, akkor ahhoz az img tagot kell használni. És az img tagban src értékében meghívott php fájlban kellene a jpeg-es headert használni. Szóval szerintem kellene egy új php amit parametrizálsz aszerint, hogy melyik tartalomhoz kérdezed le a képet, ill. mekkora méretben. Ezek alapján pedig a jpg-s headerrel kiíratsz egy valid képet.
    Szerintem ez egy jó megoldás. Én hasonlót használok egy oldalam contact formjában a CAPTCHA-nál. A html-ben ennyi van:

    Kód:
     <img src="captcha.php" alt="CAPTCHA">
    Azaz, úgy hívom meg a képet megjelenítő php-t, mintha egy sima képfile lenne. A képet megjelenítő captcha.php írja ki magát a képet, és megfelelő header fejlécet generál hozzá. Mindenképpen két külön file kell az oldal html-jének és a képmegjelenítő scriptnek, mert az egyiknek html, a másiknak jpg headerrel kell kimennie. A kettő nem tehető egy file-ba. A képmegjelenítő script első sora a kép header kiküldése legyen.

    Ettől eltérő alternatív megoldásnak csak azt tudom elképzeni, ha a script magát a file-t fizikailag is létrehozza a szerveren, és azt hivatkozza be, de ahogy olvasom, az a megoldás nem járható.



  5. #5
    Új tag
    Csatlakozott
    11-08-02
    Hozzászólás
    8
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Blob kép megjelenítése adatbázisból Codeigniter-el

    Köszi szépen a segítséget, sikerült megoldanom, hogy megjelenjenek az index_képek.
    Segítségül azoknak, akik hasonló cipőben járnának. A controllerben a következő kódot adtam meg:

    public function getsmallpic($product_id){
    $image = $this->db->select('index_kep');
    $image = $this->db->where('cikksz',$product_id);
    $image = $this->db->get('aru');
    $image = $image->row();

    // Show image
    $this->output->set_header('Content-type: image/jpg');
    $this->output->set_output($image->index_kep);
    }


    A view fájlban pedig a következőképpen jelenítettem meg:

    <td width="20%"><img src="<?php print base_url().'index.php/site/getsmallpic/'.$prod->cikksz; ?>" /></td>

    Viszont szeretnék kérdezni még a felesleges requestek minimalizálásáról. Konkrétan ahol nem tároltam indexképet, ott megjeleníti a kis négyzetet, ami jelzi, hogy nem találja a képet. Ezt kellene kiküszöbölnöm, vagyis csak akkor töltődjön le az indexkép, ha az látszik is a böngészőben.
    Egyenlőre még az eredeti méretű kép fancyboxos megjelenítésével vacakolok, de holnap délután 4-ig van időm, szerintem összejön ez is, és requestes is, ha kapok hozzá egy kis segítséget.
    Köszi mégegyszer.



  6. #6
    Adminisztrátor BagiZoli logója
    Csatlakozott
    07-04-26
    Hely
    8200, Királynék városa
    Hozzászólás
    3.855
    Begyűjtött 320 köszönetet
    154 hozzászólásával

    Alapbeállítás re: Blob kép megjelenítése adatbázisból Codeigniter-el

    Valami nem stimmel a sorrendben. Hogyan akarod vizsgálni, hogy egy kép látszik-e a böngészőben mielőtt renderelnéd? Először azt kellene megnézned hogy a $prod->cikksz-hoz tartozik-e blob mező. Ha igen, akkor renderelsz, ha nem akkor meg azt csinálsz amit akarsz Ehhez nem kell túl bonyolúlt struktúra, egy if-else megteszi



  7. #7
    Új tag
    Csatlakozott
    11-08-02
    Hozzászólás
    8
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Blob kép megjelenítése adatbázisból Codeigniter-el

    Újabb köszönet.
    Nem nagyon gondoltam végig ezt a requestes dolgot, mert a BLOB aggasztott igazán, de így rátérve már látom, hogy valóban pofonegyszerű a dolog, sima if..else a view-ban, és meg is van oldva. Remek.



  8. #8
    Új tag
    Csatlakozott
    11-08-02
    Hozzászólás
    8
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Blob kép megjelenítése adatbázisból Codeigniter-el

    Nem szeretnék balféknek tűnni, de újabb problémám lenne a fancyboxal a nagyméretű képek megjelenítésekor. Már pár órája a feladat felett ülök, és kissé le vagyok merülve agyilag, lehet megint nem nagy kunszt a probléma, de azért kérdeznék.
    Szóval a fancybox az indexképekre kattintáskor elkezdi betölteni a nagyméretű képet, de ugyanúgy a karaktersorozatokat jeleníti meg a kép helyett, akár a getsmallpic(), akár a getoriginalpic() függvényeket hívom meg. Azt gondoltam, hogy ha ugyanúgy hivatkozok a képre a linkben, mint a kép forrása esetén, működni fog, de mint mondom, a kép helyett a karakterek sokasága látszik.
    (Megjegyzés: Tudom, hogy két függvény lehetne egyben, és ellenőrizhetném pl a fájlméretet és az alapján lekérhetném a megfelelő képet, de ez gyorsabb megoldásnak tűnt, copy-paste, csak függvény és változónevet kellet módosítani, szigorúan a fáradtság miatt. :P )

    Szóval a kérdésem, hogy hogyan oldhatnám meg, ha magában a táblázatban már megfelelően megjelennek az indexképek, akkor a fancybox is megjelenítse őket?
    Az alábbi módon próbálom meg megjeleníteni őket:

    <?php if ($prod->index_kep){?>
    <a class="small_image" href="<?php echo base_url().'index.php/site/getoriginalpic/'.$prod->cikksz; ?>">
    <img src="<?php echo base_url().'index.php/site/getsmallpic/'.$prod->cikksz; ?>" />
    </a>
    <?php
    }
    ?>




  9. #9
    Adminisztrátor BagiZoli logója
    Csatlakozott
    07-04-26
    Hely
    8200, Királynék városa
    Hozzászólás
    3.855
    Begyűjtött 320 köszönetet
    154 hozzászólásával

    Alapbeállítás re: Blob kép megjelenítése adatbázisból Codeigniter-el

    <?php echo base_url().'index.php/site/getoriginalpic/'.$prod->cikksz; ?> valid képet ad a böngészőben? Nem csak a bináris jelenik meg? Korrekt a header?



  10. #10
    Új tag
    Csatlakozott
    11-08-02
    Hozzászólás
    8
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Blob kép megjelenítése adatbázisból Codeigniter-el

    Idézet Bagi Zoltán eredeti hozzászólása Hozzászólás megtekintése
    <?php echo base_url().'index.php/site/getoriginalpic/'.$prod->cikksz; ?> valid képet ad a böngészőben? Nem csak a bináris jelenik meg? Korrekt a header?
    Csak bináris karakterek jelennek meg. A header korrekt, így néz ki a függvény, ami a képet töltené be:

    HTML kód:
    public function getoriginalpic($product_id){
            $image = $this->db->select('kep');
            $image = $this->db->where('cikksz',$product_id);
            $image = $this->db->get('aru');
            $image = $image->row();
    
            $this->output->set_header('Content-type: image/jpg');
            $this->output->set_output($image->kep);
        }




Oldal: 1 / 2 12 UtolsóUtolsó

A téma címkéi:

Könyvjelzők

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod
  •