[PHP MySQL] Upload galerii do bazy danych

0

Witam. Szukam skryptu (moze ktos taki posiada) do galerii zdjec. Otoz:

  1. uzytkownik w formularzu wybiera zdjecie
  2. do zdjecia dodaje sie opis
  3. to zdjecie zostaje dodane do wyznaczonego katalogu
  4. nazwa i zdjecie zostaja dopisane do bazy danych (np. baza galeria)

ew. 5. tworzy sie miniaturka z tego
6. czy mozna przy dodawaniu zdjecia stworzyc katalog? i do kazdego innego katalogu ardresowac inna galerie? z poziomu www oczwyscie.

dzieki!

0

Najlepiej było by go napisać samemu :P
1,2. Formularz z odpowiednimi polami
3. Funkcja http://php.net.pl/manual/pl/function.move-uploaded-file.php
4. zwykły insert do bazy
5. Funkcje z biblioteki GD:
http://php.net.pl/manual/pl/function.imagecreate.php
http://php.net.pl/manual/pl/function.imagecopyresized.php
6. Można mkdir()http://php.net.pl/manual/pl/function.mkdir.php

Miłej zabawy :P</url>

0

ok, mam cos takiego (na razie bez miniaturek tworzonych automatycznie):

akcja = dopisz, jak nazwa funkcji, moze to zbedne.

w MyUpload.php nic nie zmienialem.

require_once("MyUpload.php");

function dopisz($czy, $akcja, $nazwa, $opis, $galeria, $image, $img, $img_size, $size)
{
	if( $_POST['submit'] != '' )
	{
		$galeria = $_GET['galeria'];
		
		$pobierz_katalo = mysql_query("select*from galeria_kat where id='$galeria'");

		while ($kat = mysql_fetch_array($pobierz_katalo))
		{
			$u = $_POST['u'];
			$u = new MyUpload( $_FILES['image']['name'], $_FILES['image']['tmp_name'], 

$_FILES['image']['size'], $_GET['image']['width'], $_GET['image']['height']);
			$p = $_POST['p'];
			$p = new MyUpload( $_FILES['img']['name'], $_FILES['img']['tmp_name'], 

$_FILES['img']['size'], $_GET['img']['width'], $_GET['img']['height']);

			chmod ($_FILES['image']['tmp_name'], 0644);
			chmod ($_FILES['img']['tmp_name'], 0644);    

			$result = $_POST['result'];
			$result = $u->upload( "../../img/upload/$kat[katalog]/" );
			$resul = $_POST['resul'];
			$resul = $p->upload( "../../img/upload/$kat[katalog]/" );  

			print $result;
			print $resul;
		}
	}

	$czy = $_POST['czy'];  
	$akcja = $_GET['akcja']; 

	if(isset($_POST['czy']) != "tak")
	{
		$nazwa = $_POST['nazwa'];
		$opis = $_POST['opis'];
		$image = $_FILES['image']['name'];
		$img = $_FILES['img']['name'];	
		$galeria = $_POST['galeria'];

		print "<form enctype='multipart/form-data' method='post' action='strony/galeria.dodaj.php'>";  
		print "<input type='hidden' name='MAX_FILE_SIZE' value='1500000'>";
		echo "<input type=hidden name=czy value=tak>";
		echo "<input type=hidden name=akcja value=dopisz>";

		echo "<table width=\"85%\" height=\"40\" border=\"0\" align=\"center\" cellpadding=\"10\" 

cellspacing=\"10\" bgcolor=\"#003366\"><tr><td align=\"center\" valign=\"middle\" class=adminmainfont><font 

color=\"#FFFFFF\"><strong>DOPISZ ZDJĘCIE</strong></font></td></tr></table>";

		echo "<table width=\"85%\" border=\"0\" align=\"center\" cellpadding=\"10\" cellspacing=\"10\" 

bgcolor=\"#EFEFEF\">";	

		print "<tr align=\"center\"><td align=\"right\" valign=\"middle\" 

class=adminmainfont><strong>Nazwa:</strong></td>";
		print "<td align=\"left\" valign=\"middle\" class=adminmainfont><input type=text name='nazwa' 

style=width:75%></td></tr>";	  
		print "<tr align=\"center\"><td align=\"right\" valign=\"middle\" 

class=adminmainfont><strong>Opis:</strong></td>";
		print "<td align=\"left\" valign=\"middle\" class=adminmainfont><input type=text name=opis 

style=width:75%></td></tr>";
		
		print "<tr align=\"center\"><td align=\"right\" valign=\"middle\" 

class=adminmainfont><strong>Plik:</strong></td>";
		print "<td align=\"left\" valign=\"middle\" class=adminmainfont><input type='file' name='image' 

style=width:75%></td></tr>";

		print "<tr align=\"center\"><td align=\"right\" valign=\"middle\" 

class=adminmainfont><strong>Miniaturka:</strong></td>";
		print "<td align=\"left\" valign=\"middle\" class=adminmainfont><input type='file' name='img' 

style=width:75%></td></tr>";

		$pobierz_rodzaj = mysql_query("select*from galeria_kat order by id desc");

		echo "<tr><td width=\"25%\" align=\"right\" valign=\"middle\" 

class=adminmainfont><strong>Galeria:</strong></td>";
		echo "<td width=\"75%\" align=\"left\" valign=\"middle\" class=adminmainfont>";	  
		echo "<select name=galeria style=width:75%>";

		while ($rekord2 = mysql_fetch_array($pobierz_rodzaj))
		{
			echo "<option value=\"$rekord2[id]\">$rekord2[nazwa]</option>";
		}

			echo "</select>";
			echo "</td></tr>";

		print "<tr align=\"center\"><td colspan=\"2\" valign=\"middle\" class=adminmainfont>";
		print "<input type=submit name=submit value=Dodaj style=width:60px></td></tr>";
		echo "</form>\n";
		print "</table>";
	}
	else
	{
		$result = $_GET['result'];

		if (strstr($result,'Kopiowanie obrazka powiodło się.')==$result)
		{
			$result = $_GET['result'];
			echo "TAK: $result";
			$nazwa = $_POST['nazwa'];
			$opis = $_POST['opis'];
			$galeria = $_POST['galeria'];
			$image = $_FILES['image']['name'];
			$size = $_FILES['image']['size'];
			$img = $_FILES['img']['name'];
			$img_size = $_FILES['img']['size'];

			$nowy = $_POST['nowy'];

			$nowy = "insert into galeria (nazwa, opis, galeria, image, img, img_size, size) values 

('$nazwa', '$opis', '$galeria', '$image', '$img', '$img_size', '$size')";

			$nowy_wpis = mysql_query($nowy);

			if($nowy_wpis)
			{
				echo "Dodałem nowy obrazek.<p><a href=../admin.php?lamelux=dodajzdjecie>wroc</a>";
			}
			else
			{
				echo "Nie udało się dodać obrazka.<br>".mysql_error();
			}
		}
	}
}
	dopisz($czy, $akcja, $nazwa, $opis, $galeria, $image, $img, $img_size, $size);

formularz dodajacy dane do tabeli galera_kat zawiera nazwe kategorii, jej opis oraz tworzy na folder (np. 08_02_10_03_02_58) - data, godzina z sekundami. I ten skrypt ma przerzucac tam wgrany plik, gdzie wskaze w formularzu galeria_kat.

Moze inaczej. W formularzu wybieramy galeria: i tam pobierane sa nazwy galerii z galeria_kat. No wiec wgrane zdjecia powinny zostac przerzucane do ../../galeria/$folder_stworzony_przez_formularz.

I moj problem jest nastepujacy: Dodaje zdjecia do bazy danych, wszystkie pola, ale nie pojawia mi sie, ze Kopiowanie obrazka powiodło się i nie wkleja mi zdjec do folderow.

Gdzie lezy przyczyna?

0

Odpowie mi ktos?:(

0

Nie wyświetla żadnego błędu?? Zobacz może ścieżki padają, ja zawsze uzywam bezwzględnych. Jak chcesz to do 5-6 będe na gg. Masz w profilu moim.

P.S.
Więcej nie pomoge bo nie wiem nawet jak wygląda myupload.php

0

Zamienilem kilka rzeczy, usunalem includowanie MyUpload, zrobilem na podstawie move_uploaded_file, kilka $_GET zmienilem na $_POST, usunalem z dopisz() kilka warunkow, bo pozniej je i tak powtarzam i dziala :) przenosi w wyznaczone miejsce :)

powiedz mi prosze, jak moge zrobic teraz miniaturke z kazdego uploadowanego pliku?

0

np:

function MakeTNEx($fname,$Image,$MaxSize){
  $filename = sprintf("%s/%s",$fname,$Image);
  $filename1 = sprintf("%s/tn/tn_%s",$fname,$Image);  
  if (file_exists($filename1)) return;
  if  (!file_exists("$fname/tn")) mkdir ("$fname/tn", 0777);
  $im = imagecreatefromjpeg($filename);
  $w = imageSX($im);
  $h = ImageSY($im);  
  if ($w > $h) 
  {
   $nw = $MaxSize;
   $nh = $h*$nw/$w;
  }else {
   $nh = $MaxSize;
   $nw = $w*$nh/$h;
  }  
  $im1 = imagecreatetruecolor($nw,$nh);
  ImageCopyResized($im1,$im,0,0,0,0,$nw,$nh,$w,$h);
  ImageJpeg($im1,$filename1);
  ImageDestroy($im);
  ImageDestroy($im1);    
}

$fname - folder w ktorym jest obrazek
$Image - nazwa obrazka
$MaxSize - maksymalny rozmiar

miniaturka, tworzona jest w folderze $fname w katalogu tn (nalezy go utworzyc).

0

Już mu na gg napisałem :>

0

Chlopaki poddaje sie... jest 4 rano, a ja nadal nie moge tego zrobic. Uploaduje mi plik, tworzy mi miniaturke, ale jest ona cala czarna. Tworzy mi plik jpg z dobra nazwa (75 px x 75 px), ale ten kwadrat ejst caly czarny. bez obrazu. dlaczego?

Moj upload:

mysql_select_db("galeria_kat");
$galeria = $_POST['galeria'];

$pobierz_katalog = mysql_query("select*from galeria_kat where id='$galeria'");

while ($kat = mysql_fetch_array($pobierz_katalog))
{
$uploaded = "../../galeria/$kat[katalog]/". $_FILES['image']['name'];

if (is_uploaded_file($_FILES['image']['tmp_name']))
{
require("miniaturka.php");

if ($_FILES['image']['size'] > 1024*1024*1024)
{
print "Plik jest za duży!";
}
else
{
move_uploaded_file($_FILES['image']['tmp_name'],$uploaded);

print "Operacja przebiegła pomy¶lnie - zdjęcia zostało przesłane na serwer<p>";
}
}
else
{
print "Wyst±pił <strong>bł±d</strong> podczas przesyłania pliku na serwer!<p>";
}
}

Includowany plik "miniaturka.php":

$nazwapliku=$_GET['image'];
$im=ImageCreateFromJPEG($nazwapliku);
$szer=ImagesX($im);
$wys=ImagesY($im);
$szerokosc=75;
$wysokosc=75;
$mini=imagecreatetruecolor($szerokosc, $wysokosc);
ImageCopyResized($im, $mini, 0, 0, 0, 0, $szerokosc, $wysokosc, $szer, $wys);

ImageJpeg($mini, "../../galeria/$kat[katalog]/miniaturka_". $_FILES['image']['name']);
ImageDestroy($im);
ImageDestroy($mini);
0

reichel - jestes wielki! tylko Twoj skrypt mi dziala:)

function MakeTNEx($fname,$Image,$MaxSize)
{
	$filename = sprintf("%s/%s",$fname,$Image);
	$filename1 = sprintf("%s/m_%s",$fname,$Image);  

	if (file_exists($filename1))
	{
		return;
	}

	if  (!file_exists("$fname/"))
	{
		mkdir ("$fname/", 0777);
	}

	$im = imagecreatefromjpeg($filename);
	$w = imageSX($im);
	$h = ImageSY($im);  

		$nw = $MaxSize;
		$nh = $MaxSize; 

	$im1 = imagecreatetruecolor($nw,$nh);

	ImageCopyResized($im1,$im,0,0,0,0,$nw,$nh,$w,$h);
	ImageJpeg($im1,$filename1,100);
	ImageDestroy($im);
	ImageDestroy($im1); 
}

MakeTNEx("../../galeria/$kat[katalog]/",$_FILES['image']['name'],75);

powiedz mi tylko, jak miniaturke dodac do bazy danych do pola img? i do img_size zapisac jej rozmiar?

0

Jesli chesz dodac do bazy, tworzysz nowe pole BLOB np img_tn i dodajesz (nie terzeba zapisywac do pliku, jest funkcja z GD, ktora od razu zapisuje do strumienia).

0

reichel:
Z nieba mi spadłeś! Właśnie szukam takiej funkcji!

Konkretnie: mam obrazek, zuploadowany przez użytkownika.

Chcę na tym obrazku wykonać kilka manipulacji, i wrzucić do BD, do pola typu BLOB.

Sęk w tym, że po wszystkich manipulacjach, mam jedynie "uchwyt" do obrazka. Mogę go wysłać do przeglądarki (na przykład funkcją imagejpeg). Mogę go zapisać na dysku. Ale nie potrafię z niego zrobić zwykłego stringa.

Jeżeli robię operacje w drugą stronę (plik z BD -> obróbka -> wyświetlenie) to nie ma problemu - jest funkcja createimagefromstring, która sobie z tym znakomicie radzi. Niestety, nie znalazłem funkcji "odwrotnej" - funkcja imagestring służy do pisania po obrazku :).

Możesz napisać, jak się ta funkcja z GD nazywa?

0

hm grubo ponad roczek temu szukałem takiej funkcji i skończyłem na:

ob_start();
ImageJPEG($img);
$txt = ob_get_clean();

może coś się od tego czasu zmieniło albo coś przeoczyłem ?

0

człowieku wielkość liter! z małej litery pisz te funckcje żeby sie podświetlały w dremweaver na niebiesko

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