Wysłanie miniatur do bazy. Pomocy

0

Witam, prosze o pomoc w rozwiązaniu mojego problemu. Mianowicie nie wiem jak wysłać stworzona miniaturkę do bazy. Do folderu wysyła pięknie lecz chcę by miniaturka znalazła się w bazie.


    <?php
    if (isset($_FILES['plik'])){
    if ($_FILES['plik']['error']==UPLOAD_ERR_OK) {
    $filename=$_POST['tytul'];	//Nazwa wysłanego pliku
    $filetype=$_FILES['plik']['type'];	//Typ wysłanego pliku
    $filesize=$_FILES['plik']['size']; //Rozmiar wysyłanego pliku
    $filediscribe=$_POST['opisZdjecia']; //Opis wysyłanego pliku
    list($szer, $wys) = getimagesize($_FILES['plik']['tmp_name']); //pobieranie szerokosci i wysokosci zdjecia
    $filesrc=$_FILES['plik']['tmp_name']; //Ścieżka do pliku tymczasowego na serwerze
    if ($filetype=="image/png" || $filetype=="image/x-png" ||
    $filetype=="image/gif" || $filetype=="image/jpeg" ||
    $filetype=="image/pjpeg"){
    $plik=fopen($filesrc,"r"); //otwórz ten plik w trybie do odczytu
    $mysqlplik = addslashes(fread($plik,$filesize));
    $img = imagecreatefromjpeg($filesrc);
    if($szer >= 300 && $wys >=300){
    $szer_mini = $szer * 0.1;
    $wys_mini = $wys * 0.1;
    }else{
    $szer_mini = $szer;
    $wys_mini = $wys;
    }
    $img_mini = imagecreatetruecolor($szer_mini, $wys_mini);
    imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $szer_mini , $wys_mini, $szer , $wys);
     
     
    //TU JEST PROBLEM
    imagejpeg($img_mini, "grafika_mini.jpg", 100);
    $mysqlmini = imagejpeg($img_mini, "grafika_mini.jpg", 100);
    imagedestroy($img);
    imagedestroy($img_mini);
     
    fclose($plik);
    unlink($filesrc);
    $mysqlfiletype = addslashes($filetype);
     
    $mysqlfilename = addslashes($filename);
     
     
     
    if(!isset($_SESSION['login'])){
    $przypiszID=0;
    $sql1="INSERT INTO zdjecia ()
    VALUES ('','$mysqlplik','$filename','$mysqlfiletype','$filesize','$filediscribe','$przypiszID','')";
    //Wykonujemy zapytanie $sql1
    $result1=mysql_query($sql1,$conn)
    or die ('Błąd wykonania zapytania 1: '. mysql_error());
    $sql2="INSERT INTO miniaturki ()
    VALUES ('','$mysqlmini','$filename','$mysqlfiletype','$filesize','$filediscribe','$przypiszID','')";
    //Wykonujemy zapytanie $sql1
    $result1=mysql_query($sql2,$conn)
    or die ('Błąd wykonania zapytania 2: '. mysql_error());
    }elseif(isset($_SESSION['login'])){
    $pok=mysql_query("SELECT ID_uzytkownika FROM uzytkownicy WHERE login='{$_SESSION['login']}'");
    $pokazID=mysql_fetch_row($pok);	
    $przypiszID=$pokazID[0];	
    $sql1="INSERT INTO zdjecia ()
    VALUES ('','$mysqlplik','$filename','$mysqlfiletype','$filesize','$filediscribe','$przypiszID','')";
    //Wykonujemy zapytanie $sql1
    $result1=mysql_query($sql1,$conn)
    or die ('Błąd wykonania zapytania 1: '. mysql_error());
    $sql2="INSERT INTO miniaturki ()
    VALUES ('','$mysqlmini','$filename','$mysqlfiletype','$filesize','$filediscribe','$przypiszID','')";
    //Wykonujemy zapytanie $sql1
    $result1=mysql_query($sql2,$conn)
    or die ('Błąd wykonania zapytania 2: '. mysql_error());
    }
    }
    else {
    die("Nieobsługiwany format pliku !!!");
    exit;
    }
    }
    else
    {
    die("Błąd podczas wysyłania pliku !!!");
    exit;
    }
    }
    else
    {
    die("Nie wskazano pliku do wysłania !!!");
    exit;
    }
    ?>
     
    <h1>Dodano zdjęcie do bazy. Za chwilę zostaniesz przekierowany. </h1> 
0

Umieszczanie plików/danych binarnych w bazie jest takim sobie pomysłem. Trzymanie tam obrazków jest zdecydowanie TRAGICZNYM pomysłem.

Dodatkowo:

  1. addslashes nie zabezpiecza przez SQL Injection, poczytaj chociaż manual
  2. rozpoznawanie wysłanego pliku po MIME type to kolejna potencjalna dziura - tę wartość może każdy podstawić dowolną
  3. mysql_* jest przestarzałe i pewnie w następnej wersji PHP już tego nie będzie, używaj PDO
  4. przy zapytaniach INSERT lepiej podawaj nazwy kolumn, unikniesz problemów po dostawieniu kolumny pomiędzy innymi
  5. file_get_contents zamiast otwierania i czytania plików, skoro i tak chcesz go w całości
  6. wcięcia w kodzie
  7. pisanie wszystkiego jednym ciągiem - popakuj to sobie w logiczne funkcje czy coś, w formie:
    • odebranie pliku
    • przetworzenie pliku (miniatury)
    • zapis danych
0

Do wrzucania plikow do bazy mozesz uzyc pola BLOB (Binary Large Object), ogolnie jest to zla koncepcja a jedynym slusznym jej wytlumaczeniem dla mnie jest wtedy gdy skanujesz dokumenty i takie wrzucasz do bazy. Mam na mysli systemy rzadowe , jak w jakims urzedzie, zusy , urzad skarbowy itd. to wtedy mozesz trzymac kilka wersji a jak zaginie wersja papierowa to masz je w bazie. Ale inaczej to bardzo zly pomysl.

1 użytkowników online, w tym zalogowanych: 0, gości: 1