Autor Zpráva
MartinOtepka
Profil *
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">
&nbsp;&nbsp;
<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
//omluva, něco mi poslalo půlku příspěvku. :)
SwimX
Profil
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 *
SwimX
Proč do databáze? to se nedělá.

jj děkuju za radu, ale neřeší to problém tohodle kódu.
pago
Profil *
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
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 *
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 *
„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
pago
dejte si ho tam, kde ho chcete mít

Četl jste tohle? Upload a download souborů
pago
Profil *
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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0