Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Upload plików graficznych + tworzenie 2 miniaturek o różnych wielkościach
Forum PHP.pl > Forum > PHP
vodkon
Witam jak zrobić upload plików graficznych png,jpg itd. na serwer, skrypt ma po uruchomieniu utworzyć rekord w bazie danych i zapisać dane o wielkości oryginalnego pliku, typ i inne uzupełniające resztę skryptów w serwisie. Gdzie id jest tworzone automatycznie i następnym zabiegiem będzie pobranie z utworzonego rekordu id i przemiana go funkcją md5($MySQL['id']); która będzie nazwą pliku np. /img/d41d8cd98f00b204e9800998ecf8427e który będzie zapisany w katalogu /img/ i będzie aktualizował w rekordzie pole img i dawał tam to co utworzy z np. md5(2) potem tworzył 2 różne miniaturki jedną w rozmiarach 570x270 w wysokiej jakości i zapisywał do katalogu /img/d41d8cd98f00b204e9800998ecf8427e_tm dodawał końcówkę _tm i utworzył drugą o rozmiarach 200x120 i zapisał ją w postaci md5hash_tmd, wielkości muszą być zawsze takie same jak podałem najlepiej aby obrazki były przycinane żeby zdjęcia nie były rozciągane. Dodatkowo jak zrobić aby wybierał tylko pliki graficzne typ "image/*" ?
KOD SQL:
  1. CREATE TABLE IF NOT EXISTS `galeria` (
  2. `id` int(10) NOT NULL AUTO_INCREMENT,
  3. `typ` varchar(30) COLLATE utf8_polish_ci NOT NULL,
  4. `size` int(20) NOT NULL,
  5. `wydarzenia` int(1) NOT NULL DEFAULT '0',
  6. `wydarzenia_nazwa` varchar(220) COLLATE utf8_polish_ci NOT NULL,
  7. `img` text COLLATE utf8_polish_ci NOT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=1 ;


  1. <?php
  2. if($_POST['img'] == 1){
  3. if($_FILES['plik']['size'] < 8400000 || $_FILES['plik']['size'] != 0){
  4. if(is_uploaded_file($_FILES['plik']['tmp_name']) || !isset($_FILES['plik'])){
  5. mysql_connect("", "", "")or die("Brak połączenia z serwerem.");
  6. mysql_select_db("")or die("ERROR MySQL: Zszgoleniow.pl Baza danych nie odpowiada!");
  7. mysql_query('SET CHARACTER SET utf8');
  8. $size = $_FILES['plik']['size'];
  9. $typ = $_FILES['plik']['type'];
  10. $imgmysql="INSERT INTO galeria (typ,size,wydarzenia_nazwa,wydarzenia) VALUES ('$typ','$size','Wydarzenie #1','1')";
  11. $mysqlidimg = mysql_query($imgmysql);
  12. $imageid = mysql_insert_id($mysqlidimg);
  13. $impath = md5($imageid);
  14.  
  15. //SKRYPT WRZUCANIA I PRZERABIANIA ZDJĘĆ
  16.  
  17. $mysqluptateimg="UPDATE galeria SET img = '$impath' WHERE id = '$imageid'";
  18. mysql_query($mysqluptateimg);
  19. }else{ echo "Nie wybrano pliku"; } }else{ echo "Plik jest za duży"; } }
  20. ?>
  21. <form method="POST" enctype="multipart/form-data">
  22. <input type="hidden" name="img" value="1">
  23. <input type="file" name="plik" size="40" />
  24. <input type="submit" value="Uploaduj" />
  25. </form>
thek
A może warto by sprawdzać z użyciem czegoś w stylu mysql_insert_id albo odpowiednikiem?
CuteOne
Cytat
// TU pobieranie z powrotem rekordu z bazy nie wiem jak za bardzo to zrobić aby zwrócił id rekordu

mysql_insert_id();

1. Używasz starego i beznadziejnego kodu ($HTTP_POST, mysql_*) w dodatku mieszasz zapis do bazy z uploadem i kodem html w jednym pliku.
2. Jeżeli nie wiesz jak tworzyć miniaturki:
google -> php image resize
google -> php miniatury
3. Jeżeli nie wiesz jak uploadować(poprawnie) pliki na serwer:
google -> php manual move_uploaded_files (zobacz w komentarze)
vodkon
To jest testowo utworzony kod, poprawiłem kod mam nadzieje że poprawnie, wiem jak uploadować pliki na serwer ale jak przy tym zmieniać ich rozmiary bez utraty jakości tak jak napisałem w pierwszym, dodatkowo jak wyjąć rozszerzenie uploadowanego pliku np. .jpg, .png, .jpeg?
CuteOne
  1. $ext = end( explode( '.', $_FILES['file']['name']));
  2. echo $ext;
vodkon
EDIT:
DOBRA ZAPOMNIAŁEM O $ GLOBALNYCH:

global $imgpath; global $typ;

kod działa poprawnie:
******************


Napisałem ale coś nie działa.. nie wiem jak to poprawić

KOD:
  1. error_reporting(E_ALL); ini_set('memory_limit', '256M'); if(isset($_POST['img'])){ if($_POST['img'] == 1){
  2. $size = $_FILES['plik']['size']; if($size < 2097152 || $size != 0){
  3. if(is_uploaded_file($_FILES['plik']['tmp_name']) || !isset($_FILES['plik'])){ $typ = $_FILES['plik']['type'];
  4. if($typ == 'image/bmp' || $typ == 'image/gif' || $typ == 'image/jpeg' || $typ == 'image/png'){
  5.  
  6. mysql_connect("", "", "")or die("Brak połączenia z serwerem.");
  7. mysql_select_db("zszgoleniow")or die("ERROR MySQL: Zszgoleniow.pl Baza danych nie odpowiada!");
  8. mysql_query('SET CHARACTER SET utf8'); $extt = end( explode( '.', $_FILES['plik']['name']));
  9. $ext = strtolower($extt);
  10. $imgmysql="INSERT INTO galeria (typ,ext,size,wydarzenia_nazwa,wydarzenia) VALUES ('$typ','$ext','$size','Wydarzenie #1','1')";
  11. $mysqlidimg = mysql_query($imgmysql); $imageid = mysql_insert_id();
  12. $impath = md5($imageid); $imgpath = '/img/'.$impath.'.'.$ext;
  13. move_uploaded_file($_FILES['plik']['tmp_name'], $imgpath);
  14. function ksimg_tm($width, $height, $dst){ global $imgpath; global $typ;
  15. list($w, $h) = getimagesize($imgpath); switch($typ){
  16. case 'image/bmp': $img = imagecreatefromwbmp($imgpath); break;
  17. case 'image/gif': $img = imagecreatefromgif($imgpath); break;
  18. case 'image/jpeg': $img = imagecreatefromjpeg($imgpath); break;
  19. case 'image/png': $img = imagecreatefrompng($imgpath); break;
  20. } $new = imagecreatetruecolor($width, $height);
  21. if($typ == "image/gif" or $typ == "image/png"){
  22. imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127));
  23. imagealphablending($new, false); imagesavealpha($new, true); }
  24. imagecopyresampled($new, $img, 0, 0, 0, 0, $width, $height, $w, $h); switch($typ){
  25. case 'image/bmp': imagewbmp($new, $dst); break;
  26. case 'image/gif': imagegif($new, $dst); break;
  27. case 'image/jpeg': imagejpeg($new, $dst); break;
  28. case 'image/png': imagepng($new, $dst); break; } }
  29. $dst='/img/'.$impath.'_tm.'.$ext; $dst2='/img/'.$impath.'_tmd.'.$ext;
  30. ksimg_tm('200', '120', $dst);
  31. ksimg_tm('570', '270', $dst2);
  32. $mysqluptateimg="UPDATE galeria SET img = '$impath' WHERE id = '$imageid'";
  33. mysql_query($mysqluptateimg);
  34. }else{ echo "Dozwolone tylko pliki graficzne!"; } }else{ echo "Nie wybrano pliku"; } }else{ echo "Plik jest za duży, ustawiony rozmiar 2MB"; } } }
CuteOne
Używaj jakiegoś IDE do formatowania kodu bo wstyd wstawiać takie coś smile.gif

Przyjrzyj się temu warunkowi
  1. if (is_uploaded_file($_FILES['plik']['tmp_name']) || !isset($_FILES['plik']))
vodkon
Obrabianie obrazu na miniaturki


  1. function ksimg_tm($width, $height, $dst, $imgpath){ $typ = $_FILES['Filedata']['type'];
  2. list($w, $h) = getimagesize($imgpath); switch($typ){
  3. case 'image/bmp': $img = imagecreatefromwbmp($imgpath); break;
  4. case 'image/gif': $img = imagecreatefromgif($imgpath); break;
  5. case 'image/jpeg': $img = imagecreatefromjpeg($imgpath); break;
  6. case 'image/png': $img = imagecreatefrompng($imgpath); break;
  7. } $new = imagecreatetruecolor($width, $height)or die('Cannot Initialize new GD image stream'); $ratio = max($width/$w, $height/$h);
  8. $h = $height / $ratio; $w = $width / $ratio;
  9. if($typ == "image/gif"){ imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127));
  10. imagealphablending($new, false); imagesavealpha($new, true); }
  11. if($typ == "image/png"){ imagealphablending($new, false); imagesavealpha($new, true); }
  12. imagecopyresampled($new, $img, 0, 0, 0, 0, $width, $height, $w, $h); switch($typ){
  13. case 'image/bmp': imagewbmp($new, $dst); break;
  14. case 'image/gif': imagegif($new, $dst); break;
  15. case 'image/jpeg': imagejpeg($new, $dst, 100); break;
  16. case 'image/png': imagepng($new, $dst, 0); break; } imagedestroy($new); }
  17.  
  18. //Przykład $dst='/img/'.$impath.'_tm.'.$ext;
  19.  
  20. ksimg_tm('200', '120', $dst, $imgpath);
  21.  
  22. $dts = ścieżka zapisu miniaturki nowego obrazu
  23. $imgpath = miejsce oryginalnego obrazu
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.