ugrás a tartalomhoz

Kép adatbázisba való feltöltése és lekérdezése (tudom már sokadszor :( )

mrjoel · 2007. Jún. 3. (V), 21.07
Üdv!
Egy olyan problémám lenne, hogy képet szeretnék adatbázisba feltölteni. Meg is találtam az ehhez tartozó kódot az előző fórumokban, de nekem sajna nem működik. Léterhoztam az ott leírt adatbázist, meg kódot de nem tölti fel a képet. Innen van a kód: http://www.phpbuilder.com/columns/florian19991014.php3
Ha php3-ba mentem el akkor egyáltalán nem működik hibát ír ki. Ha php-ba mentem meg nem csinál semmit, csak frissül egyet a form és ennyi.(lehet függ attól is hogy az extra.hu tárhelyét és adatbázisát használom?) Sokan írták, hogy a képnek inkább csak az elérési útvonalát adjam meg a táblában, de azt sehol nem találtam mi is ennek a megoldása. Így nagyon megköszönném, ha valaki tudna adni egy működö adatbázisba kép feltöltő kódot (akár magát a képet akár az elérési útvonalát), és egy működő megjelenítőt, ami csak szimplán a felrakott képet hozza elő az oldalon. Légyszi ne csak beszúrt mondatokat vagy kioktatást, hogy itt keress meg ott keress, mert már elég rég vacakolok vele. Tehát egy vagy két vagy amennyi, teljesen kész php kell.
Előre is köszi!
 
1

He?

janoszen · 2007. Jún. 3. (V), 21.22
PHP3? Mivan? Lassan PHP 6-ot írunk!

Egyébként az adatbázisba feltöltéskor arra kell figyelni, hogy a maximum csomag méret nagyobb legyen a fájlméretnél, amit persze csak a szerver konfigjában tudsz beállítani, viszont a kliens konfigban IS be kell állítani. A kész kódot meg barátom, felejtsd el, mert senki nem fog itt neked ingyenbérniggerkedni, főleg nem úgy, hogy kemény 20 perce vagy tag és semmit nem tettél le az asztalra.

Tessék elolvasni a doksit, tessék beszélni a rendszergazdával (aki nélkül amúgy sem fog menni semmi) és igenis tessék egy kicsit szenvedni. Vagy alternatív megoldásként ott a munka-fórum, abba tedd bele, megfelelő bérezés ellenében biztos mindenki szívesen megcsinálja.

Üdv

J
2

Igen

tolmi · 2007. Jún. 4. (H), 09.09
Így van. Tökéletesen egyetértek proclubbal!
És hogy hasznom is legyen: Adatbázisból kép visszahozahozatalánál nagyon fontos, hogy amikor a képet olvasod fel lekéréskor, akkor a megfelelő MIME header-t küldd el. header nélkül különösen az IE szokott hátast dobni, de emlékeim szerint a FX is belehal.
3

Érdemes?

Max Logan · 2007. Jún. 4. (H), 09.27
Érdemes DB-ben tárolni?

A közelmúltban volt egy topic erről és ha jól rémlik, akkor azt írta vki, hogy nem igazán érdemes adatbázisban tárolni a képeket. Belegondolva ezzel pontosan azt érjük el, hogy sok kérés érkezik az adatbázis szerverhez, amit éppen minimalizálni szokott az ember a terhelés csökkentése végett.
5

attól függ

virág · 2007. Jún. 4. (H), 09.32
szerintem attól függ hogy mi a szitu és a milyen a munka amin dolgozol. amúgy szerintem érdemes db-ben tárolni, nem szokott bajt okozni. ez a téma főleg PHP-nál szokott előtérbe kerülni, mert pl. ASP.NET-nél teljesen természetes (már akinek), hogy a képek adatbázisban vannak, egészen nagy alkalmazások működnek így. szerintem mindkét megoldás jó, csak átgondoltan kell félépíteni a rendszert + tervezés. adatbázis szerver nem hülye + kesselés meg ilyenek + természetesen a rendszer is kessel, ugyebár :) és akkor nem lehet gáz (persze lehet, de minimalizálható). én mindkét módszert szeretem :)
6

Nem érdemes

janoszen · 2007. Jún. 4. (H), 10.04
Nem érdemes, én jól megszivattam magam vele, mert amikor megpróbáltam egy másolatot csinálni a devel szerverre, eldobta magát az egész és sehogy se lehetett életre kelteni.

Ráadásul elszartam 2 órát azzal, hogy kiderítsem, hogy bizony a csomagméret a kliens és a szerver oldalon is számít.

El kell tárolni lemezem, adni neki valami egyedi azonosítót oszt az infókat róla bevágni az adatbázisba, ha 50kB-nál nagyobb (default csomagméret 64kb asszem)
4

"teljesen kész php kell"

virág · 2007. Jún. 4. (H), 09.28
ha cinikus akarnék lenni, akkor azt írnám, hogy jó pénzért szívesen írok neked ilyet, de mivel nem akarok cinikus lenni, ezért:

ha tanulni akarsz, akkor proclub hozzászólása szerintem kielégítő választ adott

ha csak használni akarsz ilyet, akkor keress a neten példákat, vagy kész szkripteket erre, biztosan találsz szerintem

szerintem tisztelj meg bennünket azzal, hogy ha elkezdted megírni és ha eközben elakadsz, akkor konkrét, kóddal kapcsolatos hibában kérsz segítséget


sztem :)
7

Köszi a segítségeket!

mrjoel · 2007. Jún. 4. (H), 12.58
Köszi a segítségeket! Igaz én se voltam a leg tisztelettudóbb, de a válaszok, főleg az első eléggé flegma volt, szerintem ezt normálisabban is lehetett volna közölni, de fátylat rá, vannak ilyen típusú emberek. Szóval itt van a kód amivel próbálkozom, de nem műxik: ez a store.php:

<?php

if ($submit) {

mysql_connect("*********.extra.sql","*******","*********");
mysql_select_db("binary_data");

$data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));

$result=mysql_query("insert into binary_data (description,bin_data,filename,filesize,filetype) ".
"values ('$form_description','$data','$form_data_name','$form_data_size','$form_data_type')");

$id= mysql_insert_id();
print "<p>This file has the following Database ID: <b>$id</b>";

mysql_close();

} else {

?>

<form method="post" action="<?php echo $PHP_SELF; ?>" enctype="multipart/form-data">
File Description:<br>
<input type="text" name="form_description" size="50">
<input type="hidden" name="max_file_size" value="1000000">
<br>File to upload/store in database:<br>
<input type="file" name="form_data" size="50">
<p><input type="submit" name="submit" value="submit">
</form>

<?php

}

?>

Amint írtam az extra.hu tárhelyét használom. És itt van egy binary_data tábla e megfelelő sorokkal amik a következők:
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
description CHAR(50),
bin_data LONGBLOB,
filename CHAR(50),
filesize CHAR(50),
filetype CHAR(50).

Kb. ennyi amit tudok. Ebben kérném a segítséget, hogy miért nem működik?

Előre is köszi mégegyszer az építő jellegű megoldásokat!
8

Nem fog menni

janoszen · 2007. Jún. 4. (H), 18.50
Mint az első hozzászólásomban rávilágítottam, a szerveren be kell állítani a max packet size-t. Mivel egy ingyenes, osztott tárhelyen vagy, ez valószínűleg az emlegetett 64 kB. Ergo, az egyetlen dolog, amit csinálhatsz, hogy 50kB-os darabokban töltöd föl a PHP-ból. (Fogod a file-t, 50kB-os darabokra szabdalod és hozzáfűzögeted a meglevőhöz.)

A némileg értelmesebb megoldás, amit Te is mondtál, hogy fájlban letárolni. Lemented lemezre és a BLOB helyett egy VARCHAR(255) mezőt alkalmazol, amibe beleírod az elérési útvonalat. Innentől kezdve csak annyi a dolgod, hogy a PHP oldalon ezt a fájlt berántsd, ha róla van szó.
9

Varchar

mrjoel · 2007. Jún. 4. (H), 20.17
Írtad hogy a bolb helyett varchar(255)-t használjak. A táblába az elérési útvonalat milyen formában kell megadni?
Ezt egy sima lekérdezéssel tudom majd behívni és kiíratni?
10

Na jó

janoszen · 2007. Jún. 5. (K), 08.58
Hajjaj, Te nagyon nem vagy tisztában a dolgokkal... na kb így nézhet ki
SELECT filename FROM files WHERE id=16
Ebből megkapod a filenamet, és így hívod be:
<?php $fp = fopen(dirname(__FILE__) . $a['filename'], "r"); ...
Tehát a fájl relatív útvonalát tárolod el és az alapján nyitod meg.

Ja és légyszi barátkozz meg a Weblaboros fórummal, ha valamire válaszolsz akkor a válasz gombot használd, hogy látni lehessen mi mire válasz.