Autor | Zpráva | ||
---|---|---|---|
6xx Profil * |
#1 · Zasláno: 6. 8. 2007, 16:16:02
Ahoj,
snažím se ukládat obrázky do DB, odeslané obrázky se sice uloží, ale dle všeho se "něco" v nich změní a už nejdou zobrazit. Pokud jsem ten samý obrázek uložil pomocí phpMyAdmin, následné zobrazení funguje bezvadně. Databáze má takovouto strukturu:
Obrázek odesílá tento skriptík (příslušná část):
funkci putRecord mám definovanou jinde jako (mimochodem tak funguje bezproblémově, ověřeno dlouhodobějším používáním), zkráceno:
Zobrazení funguje následovně:
implementaci viewRecord rozepisovat nebudu, funguje (podobně jako putRecord) dobře a je na takřka 90 řádků. Dump databáze, prvni záznam je odeslán pomocí mého skriptu, druhý pomocí phpMyAdmin. První záznam je viditelně kratší a poměrně značně rozdílný oproti tomu "správnému": SQL soubor s tabulkou testovací soubor: testovací JFIF soubor Už jsem (bezvýsledně) zkoušel použít místo addslashes() funkci mysql_real_escape_string(), převod pomocí bin2hex (včetně dodatečného přidání 0x na začátek i zpětné konverze pomocí pack()). Nerad bych používal base64encode() nebo něco podobného, co takhle nabobtná, protože je IMHO prasárna převádět obrázek do textu. Jakékoliv nakopnutí k uspěšnému výsledku bude s radostí uvítáno. |
||
nightfish Profil |
#2 · Zasláno: 6. 8. 2007, 16:46:54
kolik problémů by ubylo, kdyby lidé neukládali binární data do databáze, nýbrž do souborů :-)
když si hned po uploadu dáš echo $photo; (po odstranění addslashes a s patřičnou hlavičkou), tak to obrázek vykreslí správně? |
||
6xx Profil * |
#3 · Zasláno: 6. 8. 2007, 16:56:26
To se ještě vykreslí správně
|
||
6xx Profil * |
#4 · Zasláno: 7. 8. 2007, 10:15:17
Došel jsem k částečnému řešení problému. Ještě jednou jsem prozkoumal jak daný obrázek odesílá phpMyAdmin. Odesílá ho jako hexadecimální včetně 0x sekvence na začátku. Znova jsem tedy zkusil použít funkci bin2hex a fungovalo to. Problém je v tom, že v případě většího obrázku se nevloží nic (a proto jsem si myslel, že to nejde), ale s tím už se snad poperu sám.
OT: nightfish je nějaká narážka na nightwish nebo náhoda? |
||
6xx Profil * |
#5 · Zasláno: 7. 8. 2007, 17:34:09
Problém vyřešen kompletně. Tady bych chtěl všechny upozornit:
Jestli se pokoušíte nacpat větší datový objem do mysql a nic se nevloží a mysql_querry nevrací! FALSE, s největší pravděpodobností jde o chybu 1153. Stačí nastavit větší hodnotu max_allowed_packet v /etc/my.cnf. Zvláštní je, že v případě menších* souborů mysql správně vrátí chybu č. 1153. *Když jsem uploadoval soubor s velikostí ca. 850 KiB, chyba se nevypsala, u souboru s velikostí okolo 500 KiB už ano. |
||
Časová prodleva: 8 měsíců
|
|||
jana.girl Profil * |
#6 · Zasláno: 7. 4. 2008, 10:05:47
Dobrý den, řeším také problém s vkládáním obrázků do databáze. Vkládání mám tedy už vyřešené, ale se zobrazením obrázků mám problémy. Bohužel nemohu to vyřešit zmíněným způsobem - upload na server, jelikož je to školní úkol, a je tam zadáno, že data se mají ukládat do databáze.
Problém je v tom, že po vypsání obrázku z databáze mi to vypíše pouze nesmyslné znaky. Hlavičky mám nastavené a myslím že i dobře ;-). Moc prosím o pomoc, určo bude zádrhel v nějaké funkci, ale protože jsem s tím nehla, zkouším to vyřešit přes fórum. Do datábáze vkládám obr GIF - velikost 8B. $fileName = $_FILES['foto']['name']; $tmpName = $_FILES['foto']['tmp_name']; $fileSize = $_FILES['foto']['size']; $fileType = $_FILES['foto']['type']; $fp = fopen($tmpName, 'r'); $content = fread($fp, filesize($tmpName)); $content = base64_encode(addslashes($content)); fclose($fp); $fileName = addslashes($fileName); $prikaz=MySQL_Query("INSERT INTO foto (foto) VALUES ( '$fileName')"); if (!$prikaz) { echo "Došlo k chybě při ukládání dat."; } else { echo "Data byla úspěšně uložena<br><br>"; } Stránka vypíše - Data byla úspěšně uložena. A v databázi se zobrazí nová položka. header("Content-Type: image/gif"); $id=$_GET["foto"]; $sql = "SELECT foto FROM foto WHERE id = $id"; $vysledek_sql = mysql_query($sql); $data = mysql_fetch_assoc($vysledek_sql); echo base64_decode($data["foto"]); ?> Po tomto vypsání obrázku se zobrazí : ěçÎű† Hlavičku mám uloženou uplně na záčku html kódu. Nevíte náhodou v čem mám chybu. Děkuji za pomoc. |
||
Časová prodleva: 16 let
|
0