Autor | Zpráva | ||
---|---|---|---|
MartinOtepka Profil * |
#1 · Zasláno: 3. 3. 2009, 12:50:58
Ahoj,
chci uploadovat obrázky do db. Zdej je obrazek_upload.php <form name="upload" action="obrazek_upload.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="id" value="<? echo $id ?>"> <input type="hidden" name="MAX_FILE_SIZE" value="30000"> <input type="hidden" name="action" value="true"> <table border="0" cellpadding="6" cellspacing="0" align="center"> <tr> <td colspan="2"> podporovány pouze formáty JPEG/JPG a PNG<br> maxim. povolený rozměr 200x200 pixelů<br>maxim. povolená velikost 30 000 bytů </td> </tr> <tr> <td colspan="2"> <input type="file" name="binFile"> <input type="submit" value="upload"> </td> </tr> </table> </form> <? $pripoj = mysql_connect("mysql.meteorss.cz","db-meteorss","*********" ); mysql_select_db("db-meteorss", $pripoj); // inicializace proměnných + bezpečnostní ošetření proměnné $id if(!isset($id)): $id=0; else: $id+=0; endif; if(!isset($chyba)): $chyba=""; endif; if(isset($action)): // formulář byl odeslán if(trim($HTTP_POST_FILES['binFile']['name'])==""): // musím vybrat nějaký soubor $chyba="vyberte platný soubor"; elseif($HTTP_POST_FILES['binFile']['size']==0): // vybraný soubor musí mít nějakou velikost $chyba="vybraný soubor má nulovou velikost"; elseif($HTTP_POST_FILES['binFile']['size']>30000): // soubor nesmí být větší než 30 000 bytů (POZOR!, element MAX_FILE_SIZE formuláře lze snadno obejít) $chyba="soubor je příliš velký -<br>maxim. velikost nesmí překročit 30 000 bytů"; elseif(!is_uploaded_file($HTTP_POST_FILES['binFile']['tmp_name'])): // zkontroluji, zda zpracovávaný soubor není podvržen (potenciální útočník může zmást skript např. tím, že za nahrávaný soubor bude vydávat soubor již umístěný na serveru) $chyba="přístup odepřen"; endif; if($chyba==""): // vybraný soubor zatím splňuje požadovaná kritéria $typ=strrchr($HTTP_POST_FILES['binFile']['name'], "."); // ze jména souboru zjistím jeho formát if($typ!=".jpg" && $typ!=".png"): // mohu nahrát pouze soubory *.jpg nebo *.png $chyba="můžete použít pouze formát JPEG (JPG) nebo PNG"; else: if($typ==".jpg"): // soubor je formátu *.jpg $typ_file="image/jpeg"; // do tabulky obrazek soubor uložím jako image //jpeg - viz skript obrazek_vypis.php v dalším výpisu $im=imagecreatefromjpeg($HTTP_POST_FILES['binFile']['tmp_name']); // pomocí funkce imagecreatefromjpeg() z knihovny php_gd.dll získám identifikátor obrázku $im if(imagesx($im)>200 || imagesy($im)>200): // pomocí funkcí imagesx() a imagesy() z knihovny php_gd.dll zkontroluji šířku a délku obrázku v pixelech $chyba="obrázek je příliš velký - jeho šířka ani výška nesmí překročit 200 pixelů"; else: // hodnoty udávající skutečnou šířku a výšku obrázku zjištěné pomocí funkcí imagesx() a imagesy() načtu do proměnných $width a $height, které uložím do příslušných polí tabulky obrazek $width=imagesx($im); $height=imagesy($im); endif; imagedestroy($im); // uvolním paměť rezervovanou pro obrázek else: // soubor je formátu *.png, následující příkazy jsou obdobné jako u obrázku formátu *.jpg, jen s tím rozdílem, že do tabulky obrazek soubor uložím jako image/png $typ_file="image/png"; $im=imagecreatefrompng($HTTP_POST_FILES['binFile']['tmp_name']); if(imagesx($im)>200 || imagesy($im)>200): $chyba="obrázek je příliš velký - jeho šířka ani výška nesmí překročit 200 pixelů"; else: $width=imagesx($im); $height=imagesy($im); endif; imagedestroy($im); endif; endif; if($chyba==""): // poslaný soubor splňuje všechna požadovaná kritéria a mohu ho nahrát do tabulky obrazek $binFile=str_replace(";", "", $HTTP_POST_FILES['binFile']['tmp_name']); // v tomto případě poněkud paranoidní bezpečnostní opatření - odstraním všechny možné výskyty ; z nahrávaného souboru $obrazek = addslashes(fread(fopen($binFile, "r"), filesize($binFile))); // soubor načtu jako binární text $aktual = mysql_query("UPDATE obrazek SET foto='$obrazek', nazev='".$HTTP_POST_FILES['binFile']['name']."', velikost=".$HTTP_POST_FILES['binFile']['size'].", typ='$typ_file', vyska=$width, sirka=$height WHERE id=$id"); // do pole foto příslušného záznamu definovaného pomocí proměnné $id tabulky obrazek uložím binární text souboru, do pole nazev jméno souboru, do pole velikost jeho velikost v bytech, do pole typ jeho nadefinovaný typ a do polí sirka a vyska jeho skutečné rozměry v pixelech if($aktual): if(mysql_affected_rows()==1): ?> // aktualizace proběhla v pořádku - mohu provést načtení obrázku zpět do prohlížeče <table border="0" cellpadding="5" cellspacing="0" align="center"> <tr align="center"> <td><br><strong>obrázek byl úspěšně nahrán</strong></td> </tr> <tr align="center"> // vypíši jméno souboru <td>jméno souboru: <? echo $HTTP_POST_FILES['binFile']['name'] ?></td> </tr> <tr align="center"> // vypíši velikost souboru <td>velikost souboru v bytech: <? echo $HTTP_POST_FILES['binFile']['size'] ?></td> </tr> <tr align="center"> // vypíši typ souboru <td>typ souboru: <? echo $typ_file ?></td> </tr> <tr> <td align="center"> // pomocí skriptu obrazek_vypis.php s předaným parametrem id vygeneruji obrázek, ke skriptu obrazek_vypis.php viz dále <img src="obrazek_vypis.php?id=<? echo $id ?>" border="0" width="<? echo $width ?>" height="<? echo $height ?>"> </td> </tr> </table> // link na úvodní formulář <br><div align="center"><a href="obrazek_upload.php">zpět</a></div> // ukončení této větve skriptu </body> </html> <? MySQL_Close($pripoj); die(); else: // poslaný soubor je totožný s již uloženým souborem $chyba="obrázek nebyl aktualizován"; endif; else: // k aktualizaci nedošlo $chyba="porucha v komunikaci s databází - obrázek se nepodařilo nahrát!"; endif; endif; endif; endif; // výpis chybové hlášky if($chyba!=""): ?> <br><br><div align="center"><strong><? echo $chyba ?></strong></div> <? endif; ?> Poté co vyberu obrázek k nahrání a chci ho uploadovat, tak to vždyvyhodí chybovou hlášku "vyberte platný soubor" Nevíte kde může být chyba? |
||
SwimX Profil |
#2 · Zasláno: 3. 3. 2009, 12:54:22 · Upravil/a: SwimX
//omluva, něco mi poslalo půlku příspěvku. :)
|
||
SwimX Profil |
#3 · Zasláno: 3. 3. 2009, 12:55:23
MartinOtepka
„chci uploadovat obrázky do db.“ Proč do databáze? to se nedělá. Uložil bych si soubor do složky - http://php.vrana.cz/ukladani-souboru-od-uzivatele.php a pak zapsal cestu k němu do tabulky. |
||
MartinOtepka Profil * |
#4 · Zasláno: 3. 3. 2009, 13:10:44
„SwimX“
„Proč do databáze? to se nedělá.“ jj děkuju za radu, ale neřeší to problém tohodle kódu. |
||
Časová prodleva: 5 dní
|
|||
pago Profil * |
#5 · Zasláno: 8. 3. 2009, 11:05:40
cauko..Prosim ta mohol by si mi sem hodit HTML kod na UPLOAD iba ten formular a tlacidko na odoslanie a este kde by som mal napisat EMAIL..:)
|
||
Alphard Profil |
#6 · Zasláno: 8. 3. 2009, 11:26:50
pago
html formulář je na prvních 20 řádcích kódu email můžete napsat do <input type="text" name="email"> ale bez nějakého serverového scriptu to nepojede |
||
pago Profil * |
#7 · Zasláno: 8. 3. 2009, 18:55:32
„pago“
„html formulář je na prvních 20 řádcích kódu“ „email můžete napsat do <input type="text" name="email">“ „ale bez nějakého serverového scriptu to nepojede“ „pago“ „html formulář je na prvních 20 řádcích kódu“ „email můžete napsat do <input type="text" name="email">“ „ale bez nějakého serverového scriptu to nepojede“ hm dik...a kde by som tento riadok mal dať do stredu alebo nakoniec??? |
||
pago Profil * |
#8 · Zasláno: 8. 3. 2009, 18:58:34
„„pago““
„„html formulář je na prvních 20 řádcích kódu““ „„email můžete napsat do <input type="text" name="email">““ „„ale bez nějakého serverového scriptu to nepojede““ „„pago““ „„html formulář je na prvních 20 řádcích kódu““ „„email můžete napsat do <input type="text" name="email">““ „„ale bez nějakého serverového scriptu to nepojede““ „hm dik...a kde by som tento riadok mal dať do stredu alebo nakoniec???“ A este html kod alebo ako sa to vola niesom v tom nejaky profik len sa ucim..,kde by som mal napisat stranku.. To je ten server Script?? |
||
Alphard Profil |
#9 · Zasláno: 8. 3. 2009, 19:01:54
|
||
pago Profil * |
#10 · Zasláno: 8. 3. 2009, 20:48:11
„pago“
„dejte si ho tam, kde ho chcete mít“ „Četl jste tohle? Upload a download souborů“ Dik za pomoc uz som sa spojil s jednim chalanom on m dal nejake veci... dik este ras a cau |
||
Časová prodleva: 15 let
|
0