Webcity.pl


  Programowanie obiekt...

  Programowanie obiekt...

  Open Power Template ...

  Wywiad z Wembzz /Inv...

  [tutorial] Realistyc...

 

 02.02.06 - [new] E-video - artykuł

 30.01.06 - [update] Artykuł o sesjach

 18.12.05 - [update] PDO - artykuł

 19.08.05 - [new+upd] Aktualizacja materia...

 26.04.05 - [update] Nowy artykuł



  Pomocy WML
[php]Sesje nie działają, ...
[actionscript 2.0] [flash...
Problem z talicami w php
[ocena] llll.pl darmowe a...
Kamera na stronie interne...
Kamera na stronie interne...
[xml] Jak wyciągnąć dane
Wizualizacja w JS - POMOC
Web Developer - stała / f...

... i wiele innych wątków na forum ›

Partnerzy
› allRSS.info - katalog zasobów RSS
› iloveflyer.org - webdesign
› webserv.pl - serverpack
› skryptoteka.pl - mnóstwo skryptów
› vel.pl - hosting
› TelePraca.net - pracuj swobodnie
› PHP Solutions - magazyn PHP
› HELION - wydawnictwo informatyczne

Ksišżka dnia

CityMag
Wpisz swój e-mail, aby zaprenumerować nasz Magazyn, który zawiera najnowsze informacje ze świata i najciekawsze teksty.
 

Szukasz czegoś?
Nasza wyszukiwarka znajdzie wszystko, czego szukasz.
 

Szukanie zawansowane


  Reklama
  Redakcja
  Hosting
  Kanał

© WebCity.pl Team
 
 
  Forum Forum
Kursy Kursy
Porady Porady
Recenzje Recenzje
Newsy Newsy
Katalog stron WWW Katalog
Skrypty PHP Skrypty
Download Oferty i praca
Artykuły:
 Teoria
 Praktyka
 Promocja
 Inne
 

 Webcity.pl |

Upload obrazka do bazy danych MYSQL

Autor: Mikołaj Hnatiuk
   Jeżeli chcecie wgrać jakiś obrazek do bazy danych, ograniczając również jego wymiary i wielkość, tu jest coś co może Wam pomóc. Na początek przedstawię może jak ma wyglądać forma do uploadingu:

<FORM ACTION="upload.php" METHOD="POST" ENCTYPE="multipart/form-data"
ACCEPT="image/gif, image/jpeg">
<input type="hidden" name="MAX_FILE_SIZE" value="8192">
Wyślij ten plik: <input name="userfile" type="file">
<br /><input type="submit" value="Send File">
</form>

atrybut ACCEPT sprawdza, czy typ pliku to GIF lub JPEG. Jeżeli nie, zwraca błąd. Pole ukryte MAX_FILE_SIZE sprawdza, czy wielkość pilku nie przekracza 8192 bajtów i zwraca błąd jeżeli rozmiar jest większy.

   Utwórzmy więc teraz tabelę mysql, która będzie przechowywać nasz obrazek:

CREATE TABLE nazwa_tabeli(id INT NOT NULL auto_increment DEFAULT '0', byte BLOB,
image_type VARCHAR(15) );

Teraz napiszmy klasę, która będzie to wszytko obsługiwać:

<?php
class ImageUploader
{
   var $name;
   var $type;
   var $size;
   var $temp;
   var $error;
   var $image;

   function ImageUploader(){ }

   function init()
   {
      global $_FILES;

      $this -> error = $_FILES['userfile']['error'];
      if($this -> error != 0)
      {
         echo 'PHP zwrócił następuący błąd: '.$this -> error;
         return FALSE;
      }
      $this -> name = $_FILES['userfile']['name'];
      $this -> type = $_FILES['userfile']['type'];
      $this -> size = $_FILES['userfile']['size'];
      $this -> temp = $_FILES['userfile']['tmp_name']; /* 1 */
      return TRUE;
   }

   function validate()
   {
      if($this -> type !='image/gif' && $this -> type !='image/pjpeg') /* 2 */
      {
         echo 'To nie jest poprawny typ pliku dla obrazka';
         return FALSE;
      }
      if($this -> size >= 8192)
      {
         echo 'Plik jest za duży.';
         return FALSE;
      }


      $rozmiar = getimagesize($this -> temp); /* 3 */
      if($rozmiar[1]>150 || $rozmiar[2]>150)
      {
         echo 'Jeden z wymiarów obrazka przekracza 150 pixeli';
         return FALSE;
      }
      return TRUE;
   }

   function savefile($id)
   {
      global $forum;
      global $db;
      if (!$fh = fopen($this-> temp, "r"))
      {
         echo 'Nie można otworzyć pliku z katalogu tymczasowego';
         return FALSE;
      }
      $this -> image = addslashes(fread($fh, $this -> size)); /* 4 */
      $db -> query("INSERT INTO nazwa_tabeli (byte, image_type) VALUES('".$this -> image."',
'".$this -> type."');
      return TRUE;
   }

   function deleteimage($id)
   {
      global $db;
      $db-> query("DELETE FROM nazwa_tabeli WHERE id=".$id.");
   }

   function ClearAll()
   {

      $db -> query("DELETE FROM nazwa_tabeli WHERE id>=0");
   }
}
?>

Objaśnienia do komentarzy:
   1 - Ścieżka do naszego obrazka, tymczasowo przechowywanego na serwerze.
   2 - Tutaj po prostu sprawdzamy, czy plik jest poprawnego typu. Ta funckcja zwróci błąd, jeżeli nie ustawiliście limitowania typów pliku w forumularzu html do uploadingu.
   3 - Sprawdzamy wymiary obrazka.
   4 - addslashes, bo w danych obrazka mogą być różne dziwne 'krzaczki' (taki bardzo profesjonalny termin ... ) i MySQL wyrzuci błąd składni.

Teraz może napiszę, jak z tej klasy korzystać, chociaż nie jest to 'cud programowania', ale mimo wszystko np.:

   $db = @new db('localhost', 'nazwabazy', 'user', 'pass');

   if(!$img = @new avart )
   {
      error('Wystąpił nieznany błąd podczas tworzenia klasy ImageUploader');
      break;
   }
   if($img -> init())
   {
      if($img -> validate())
      {
         if($img -> savefile()
         {
            echo 'Twój obrazek został pomyślnie zapisany';
         }
      }
   }

Następną rzeczą będzie wyświetlenie naszego obrazka. Utwórzcie sobie nowy plik php np. imagev.php i wklepcie:

<?php
if($_GET['id'])
{
   $db_server ='localhost';
   $db_user = 'user';
   $db_password = 'pass';
   $db_name = 'nazwabazy';
   if(!@mysql_connect($db_server,$db_user,$db_password))
      echo 'Error connecting to mysql server';

   if(!@mysql_select_db($db_name))
      echo 'Error selecting database';

      $result = @mysql_query("select byte , image_type from nazwatabeli where id=".$_GET['id']);

      $data = @mysql_result($result,0,"byte");
      $type = @mysql_result($result,0,"image_type");

      header("Content-type: ".$type);
      echo $data;

}

?>

No i teraz kiedy chcecie wyświetlić obrazek, jako ścieżkę obrazka w tagu IMG podajecie np. imagev.php?id=5 i tyle ! Jakby coś było nie tak: knapik@acn.waw.pl

Powrót

 
 
Twój domowy serwer!