Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z galerią zdjęć
Forum PHP.pl > Forum > Przedszkole
tr86
Mam w każdej kategorii osobny upload zdjęć i przegląd galerii. Problem polega na tym, że gdy dodam chociaż jedno zdjęcie do galerii A, to pokazują się w niej wszystkie zdjęcia z każdej galerii (tak jakby nie rozpoznawało po ID).

Tak wygląda skrypt odczytujący zdjęcia z galerii:

  1. $connect = mysql_connect("mysql2.yoyo.pl","user","haslo")
  2. or die ("Nie można nawiązać połączenia.");
  3. or die ("Nie ma takiej bazy danych.");
  4.  
  5. $zapytanie2 = mysql_query ("select * from konferencje where id='$wynik'")
  6. or die('błąd: '.mysql_error());
  7.  
  8. $zapytanie = mysql_query ("select * from galeria where id_konf='$wynik'")
  9. or die('błąd: '.mysql_error());
  10.  
  11. $ile = mysql_num_rows($zapytanie);
  12.  
  13. $galeria = mysql_fetch_array($zapytanie);
  14. $galeria2 = mysql_fetch_array($zapytanie2);
  15.  
  16. if($ile > 0)
  17. {
  18.  
  19. echo ('<font color="#FFD666">');
  20. echo ('<center><b>Konferencja '.$galeria2['nazwa_konf'].' - <font color="red">Galeria zdjęć</font></b></center><br>');
  21. $dir = opendir('galeria');
  22. while(false !== ($file = readdir($dir))) {
  23. if($file != "." && $file != "..") {
  24. $data = file("galeria/".$file);
  25. $size = $data[1];
  26. if($size > 200) {
  27. $size = (int)($size/200)." KB";
  28. }
  29. else {
  30. $size = $size." B";
  31. }
  32. }
  33. echo ('<img src="galeria/'.$file.'" width="250px" height="200px" border="2"/>');
  34. }
  35. closedir($dir);


Czy ktoś ma jakiś pomysł na rozwiązanie tego?
Zosiek
Twój kod otwiera folder galeria i wyświetla wszystkie zdjęcia tam zawarte.
tr86
No tak, a chciałbym żeby wyświetlały tylko te związane z daną kategorią...
Zosiek
No to zrób dla każdej kategorii pod folder, i w poleceniu opeddir, file i a href dodaj zmienną z nazwą kategorii którą jak widzę pobierasz z bazy danych
tr86
Też myślałem o takim rozwiązaniu, tylko jak teraz stworzyć nazwy tych podfolderów?

  1. if(is_uploaded_file($zdjecie_tmp))
  2. {
  3. move_uploaded_file($zdjecie_tmp, "galeria/$zdjecie_nazwa");


Zosiek
przy wrzucaniu pliku formularz z możliwością (stworzenia albo zaznaczenia) kategorii i najpierw tworzysz folder (albo jak jest tylko do wyboru to porotu wrzucasz tam) jeśłi nie istnieje potem wrzucasz tam fotki.
tr86
A jak stworzyć takie kategorie? Mam folder Galeria, a w nim chciałbym mieć foldery o nazwach np. Galeria28, Galeria29, Galeria30, gdzie te numery to by były id kategorii (w moim przypadku konferencji) i w nich by były dopiero umieszczane zdjęcia i odpowiednio wyświetlane na stronie.
Próbowałem przed chwilą czegoś takiego, ale nie działa...:

  1. move_uploaded_file($zdjecie_tmp, "galeria/galeria$wynik/$zdjecie_nazwa");
Zosiek
a nie lepiej sam numer bez przedrostka??
a i powinno być
  1. move_uploaded_file($zdjecie_tmp, 'galeria/galeria'.$wynik.'/'.$zdjecie_nazwa.'');
tr86
Niestety wyskoczyły błędy w tej funkcji i się wogóle zdjęcie nie zapisało.

Warning: move_uploaded_file(galeria/30/1.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /var/www/sites/yoyo.pl/t/e/testowyportalik/organizowane_konf.php on line 1303
Zosiek
Mój stary upload
  1. $upload_dir = "galeria".$wynik."/";
  2. $file_path = $upload_dir.$zdjecie_nazwa;
  3. move_uploaded_file($zdjecie_tmp, $file_path);


Mówi o tym że nie może otworzyć folderu, do którego próbujesz wrzucić zdjęcie.
tr86
Dzięki, ale nie chciałbym teraz wszystkiego przerabiać...bo upload mi działa, tylko właśnie problem z tymi podfolderami ;/
Zosiek
No to tworzysz jeśli nie istnieje folder w momencie przesyłana pliku, a potem
  1. move_uploaded_file($zdjecie_tmp,"galeria/galeria".$wynik."/".$zdjecie_nazwa."");
tr86
Zrobiłem tak jak mówiłeś, stworzyłem folder w momencie przesyłania zdjęcia.

  1. mkdir("galeria/$wynik");


Tylko teraz zdjęcia się nie wyświetlają w galerii hmmm...Może to wynika z uprawnień? Bo zdjęcia są przesyłane na FTP, gdzie jest folder galeria (755) a w nim stworzyły mi się 2 foldery 29 i 30 też z uprawnieniami 755. Zdjęcia w tych folderach mają uprawnienia 600.
Zosiek
600 daje uprawnienia tylko właścicielowi (odczyt i zapis)
tr86
Tak wiem. Wcześniej musiałem zmieniać ręcznie dla każdego zdjęcia uprawnienia z 600 na 644 by były widoczne, a teraz nawet to nie pomaga...
Zosiek
Pokaż kod uplaodu razem z move_upload_file ( w momencie ładowania zdjeć po move _upload nadaj im chmod()
tr86
UPLOAD

  1. <form enctype="multipart/form-data" action="organizowane_konf.php?co=dodajzdjecie&wynik='.$wynik.'"
  2. method="POST">
  3. <input type="hidden" name="MAX_FILE_SIZE" value="1024000" />
  4. <tr>
  5. <td>Zdjęcie: (max do 1 MB) <font color="red">*</font></td>
  6. <td><input name="zdjecie" type="file" /></td></tr><br>
  7. <tr>
  8. <td>Tytuł zdjęcia: <font color="red">*</font></td>
  9. <td><input name="tytul_zdjecia" type="text" size=36 maxlength=60/></td></tr><br>
  10. </table>
  11. <input type="submit" value="Dodaj zdjęcie" />
  12. <input type="reset" value="Wyczyść" />
  13. </form>
  14.  
  15. mkdir("galeria/$wynik");
  16.  
  17. if ($co == 'dodajzdjecie')
  18. {
  19. $zapytanie = mysql_query ("select * from konferencje where id='$wynik'")
  20. or die('błąd: '.mysql_error());
  21.  
  22. $id = mysql_fetch_array($zapytanie);
  23.  
  24. $zdjecie_tmp = $_FILES['zdjecie']['tmp_name'];
  25. $zdjecie_nazwa = $_FILES['zdjecie']['name'];
  26. $zdjecie_rozmiar = $_FILES['zdjecie']['size'];
  27. $max_rozmiar_zdjecia = 1024000;
  28. $tytul_zdjecia = $_POST['tytul_zdjecia'];
  29.  
  30. // sprawdzenie rozmiaru zdjęcia
  31. if ($zdjecie_rozmiar > $max_rozmiar_zdjecia)
  32. {
  33. echo('<div id="TRESC"><center><font color="red">Rozmiar przesyłanego zdjęcia jest za duży. Maksymalny rozmiar pliku to 1MB.</font><br><br>');
  34. echo('<a href=organizowane_konf.php?co=zdjecie&wynik='.$wynik.'>Proszę wrócić i spróbować ponownie.</a></center></div>');
  35. }
  36.  
  37. // sprawdzenie czy pola sa puste
  38. if (empty($_FILES['zdjecie']['name']) or empty($_POST['tytul_zdjecia']))
  39. {
  40. echo('<div id="TRESC"><center><font color="red">Uzupełnij wszystkie wymagane pola.</font><br><br>');
  41. echo('<a href=organizowane_konf.php?co=zdjecie&wynik='.$wynik.'>Proszę wrócić i spróbować ponownie.</a></center></div>');
  42. }
  43.  
  44. $is_doc = explode('.', $zdjecie_nazwa);
  45. $is_doc[1] = strtolower($is_doc[1]);
  46.  
  47. if (($is_doc[1] == 'jpeg')|| ($is_doc[1] == 'jpg') || ($is_doc[1] == 'bmp')||($is_doc[1] == 'gif'))
  48. {
  49. if(is_uploaded_file($zdjecie_tmp))
  50. {
  51. move_uploaded_file($zdjecie_tmp,"galeria/".$wynik."/".$zdjecie_nazwa."");
  52.  
  53. $query = "INSERT INTO galeria SET
  54. id_konf='$wynik',
  55. nazwa_pliku='$zdjecie_nazwa',
  56. tytul_zdjecia='$tytul_zdjecia'";
  57. }
  58. }
  59. else
  60. {
  61. echo('<div id="TRESC"><center><font color="red">Nieprawidłowy format lub zbyt duży rozmiar przesyłanego zdjęcia.</font><br><br>');
  62. echo('<a href=organizowane_konf.php?co=zdjecie&wynik='.$wynik.'>Proszę wrócić i spróbować ponownie.</a></center></div>');
  63. }
  64. if(!mysql_query($query, $connect))
  65. {
  66. echo("Wystąpił błąd zapytanie zostało odrzucone...<br>");
  67. return;
  68. }
  69.  
  70.  
  71. if(!mysql_close())
  72. {
  73. echo("Wystąpił błąd podczas zamykania połączenia z serwerem MySQL...<br>");
  74. }
  75. else
  76. {
  77. echo ('<center>Zdjęcie dodano pomyślnie! <br><br><br>');
  78. echo ('<a href="organizowane_konf.php?co=galeria&wynik='.$wynik.'">Przeglądaj galerię</a><br><br><br>');
  79. echo ('<a href="organizowane_konf.php?co=zdjecie&wynik='.$wynik.'">Dodaj kolejne zdjęcie</a><br><br><br></center>');
  80. echo ('<center><a href=organizowane_konf.php?co=szczegoly&wynik='.$wynik.'>Wróć do strony konferencji</a></center>');
  81. }
  82.  
  83. }
Zosiek
1. Mkdir daj pod warunkiem if dodajzdjecie ( i daj warunek że jeśli istniej taki folder to aby nie tworzył bo wyswietli bład (ale zdjecie przeniecsie)
2. Co zawiera zmienna $co oraz $wynik??
3. Po co pobierasz * z bazy
tr86
Cytat(Zosiek @ 11.10.2009, 17:01:15 ) *
1. Mkdir daj pod warunkiem if dodajzdjecie ( i daj warunek że jeśli istniej taki folder to aby nie tworzył bo wyswietli bład (ale zdjecie przeniecsie)
2. Co zawiera zmienna $co oraz $wynik??
3. Po co pobierasz * z bazy



ad.1. Jak dałem pod tym ifem to wyszedł błąd z funkcją mkdir. Ten warunek jesli folder juz istnieje chyba jest niepotrzebny, bo nie wyskakuje żaden taki błąd...
ad.2. Zmienna $co to tak jakby osobny link (przejście do kolejnej strony). Tak zrobiłem, aby mieć wszystko w jednym pliku, więc to nie ma żadnego znaczenia.
Zmienna $wynik tylko pobiera mi nazwę konferencji, więc to też mało istotne.
ad.3. jw. z tym wynikiem.


PS. Mam nadzieje, że nie nadużywam Twojej pomocy...
Zosiek
1. Mkdir wywali błąd że folder istnieje jeśli będzie taki owy
2. Z tego co mi dałeś zmienna $co i $wynik nie maja tego co trzeba bo wysyłasz je w formularzu metodą GET (ale $wynik chyba nie bo jest w formularzu))
3. Formularz nie powinien się wyświetlić ponieważ jest między znacznikami <?php ?> a powinien być w tym wypadku echowany echo()
4. U mnie po tych małych poprawkach kod dizłą. Tworzy, zapisuje do bazy.
5. Mówisz że nei wyświetla w galerii fotki a jaki tam jest skrypt.
Wydaje mi się, że pomocy nadużywa ten, który za nia nie dzękuej po rozwiązaniu problemu smile.gif
tr86
Superrrrrrrrr już działa smile.gif
Jeszcze tylko by się przydało zrobić tego chmoda, bo tak musze zmieniać ręcznie uprawnienia.
Chmod musiałby zmieniać się automatycznie z 600 na 644 dla każdego pliku, czy dałoby się tak zrobić? Przejrzałem manuala i takie coś jest:

// Odczyt i zapis dla właściciela, odczyt dla wszystkich
chmod("/katalog/plik", 0644);

U mnie to chyba powinno wyglądać tak (ale pewnie się mylę...):
chmod("/galeria/'.$wynik.'/'.$file.'", 0644);

Co do skryptu odczytującego pliki z galerii, to zrobiłem identycznie z tymi folderami jak w uploadzie:

  1. $dir = opendir("galeria/".$wynik."");
  2. while(false !== ($file = readdir($dir))) {
  3. if($file != "." && $file != "..") {
  4. $data = file("galeria/".$wynik."/".$file);
  5. $size = $data[1];
  6. if($size > 200) {
  7. $size = (int)($size/200)." KB";
  8. }
  9. else {
  10. $size = $size." B";
  11. }
  12. }
  13. echo ('<img src="galeria/'.$wynik.'/'.$file.'" width="250px" height="200px" border="2"/>');
  14. }
  15. closedir($dir);
Zosiek
No tam trochę z ' i " pomatałeś ale masz tu mój stary chmod z mojego starego uplaodu tongue.gif
  1. $baza='galeria/'.$wynik.'/'.$file.'';
  2. chmod($baza, 0644);
tr86
Cytat(Zosiek @ 11.10.2009, 18:03:17 ) *
No tam trochę z ' i " pomatałeś ale masz tu mój stary chmod z mojego starego uplaodu tongue.gif
  1. $baza='galeria/'.$wynik.'/'.$file.'';
  2. chmod($baza, 0644);



Ta operacja działa na folder, a nie na pliki w nim znajdujące się.
Folder powinien mieć 755, a pliki 644 ;p
Zosiek
chmm U mnei zmienia chmaody plikom. Zaraz sprawdzę na drugim serwerze.
tr86
Cytat(Zosiek @ 11.10.2009, 18:17:47 ) *
chmm U mnei zmienia chmaody plikom. Zaraz sprawdzę na drugim serwerze.



Hmmm no to troszkę to dziwne worriedsmiley.gif wstydnis.gif

Ta sama sprawa dotyczy też u mnie downloadu dokumentów, bo żeby coś pobrać, to trzeba podać hasło...a chciałbym, żeby każdy bez podawania hasła mógł sobie wybraną rzecz ściągnąć.
Zosiek
I działa
daj
  1. $dir = opendir("galeria/".$wynik."");
  2. while(false !== ($file = readdir($dir))) {
  3. if($file != "." && $file != "..") {
  4.  
  5. $baza='galeria/'.$wynik.'/'.$file.'';
  6. chmod($baza, 0644);
  7. }
  8. }

tu
  1. if(is_uploaded_file($zdjecie_tmp))
  2. {
  3. move_uploaded_file($zdjecie_tmp,"galeria/".$wynik."/".$zdjecie_nazwa."");
  4.  
  5. $query = "INSERT INTO galeria SET
  6. id_konf='$wynik',
  7. nazwa_pliku='$zdjecie_nazwa',
  8. tytul_zdjecia='$tytul_zdjecia'";
  9. }
  10. [color="#ff0000"]TUTAJ[/color]

tr86
Faktycznie działa smile.gif
Dziękuje bardzo za pomoc!!!!!!!! guitar.gif
Zosiek
Nmzc Cała przyjemność po mojej stronie temat do zamknięcia.
tr86
Warning: mkdir(galeria/29) [function.mkdir]: File exists in /var/www/sites/yoyo.pl/t/e/testowyportalik/organizowane_konf.php on line 1295

Przy wrzucaniu 2,3 itd zdjęcia do jednej galerii jeszcze wyświetla się ten błąd o którym wspominałeś, że jak folder już istnieje, to żeby się nie tworzył.
Jak powinien wyglądać taki warunek?
Zosiek
  1. $file = 'galeria/'.$wynik.'';
  2. if (!file_exists($file)){
  3. tutaj mkdir
  4. }
  5. tutaj reszta kodu
tr86
Cytat(Zosiek @ 11.10.2009, 19:09:34 ) *
  1. $file = 'galeria/'.$wynik.'';
  2. if (!file_exists($file)){
  3. tutaj mkdir
  4. }
  5. tutaj reszta kodu



Dziękuje, zrobiłem podobnie:

  1. $numer = $wynik;
  2. $katalog = 'galeria/';
  3.  
  4. if (!file_exists(''.$katalog.''.$numer.'')) {
  5. mkdir("galeria/$wynik");
  6. }
  7. else
  8. {
  9. echo('');
  10. }


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.