Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP,MySQL]Opisy do zdjęć
Forum PHP.pl > Forum > Przedszkole
prt
Mam na stronie zrobiony formularz który umożliwia upload zdjęć , chcę dodać możliwość wstawiania opisu do swojego zdjęcia. Do formularza dodałem już input text i chciałbym , żebyście mi powiedzieli jak zapisać ten opis do pliku np: Opisy.txt. Mają się tam zapisywać wszystkie opisy i być wczytywane przy odpowiednim zdjęciu, z tym może i bym sobie jakimś cudem poradził ale nie wiem czy można tak aby po usunięciu zdjęcia z ftp komentarz do niego się usuwał biggrin.gif tongue.gif
Może oparte być na mysql tylko, żeby dużo mb nie zżerało.
Z góry dzięki

Oto skrypt Uploadu:

  1. <?php
  2. echo '<?xml version="1.0" encoding="iso-8859-2"?>';
  3. ?>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
  5. transitional.dtd">
  6. <div>
  7. <form enctype="multipart/form-data" action="galeria.php" method="POST">
  8. <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
  9. <input name="plik" type="file" />
  10. <input name="Opis" type="Text" />
  11. <input type="submit" value="Wyślij plik" />
  12. </form>
  13. </div>
  14.  
  15. <?php
  16. $plik_tmp = $_FILES['plik']['tmp_name'];
  17. $plik_nazwa = $_FILES['plik']['name'];
  18. $plik_rozmiar = $_FILES['plik']['size'];
  19. $sp = explode(".",$plik_nazwa);
  20.  
  21.  
  22. // sprawdzamy rozszerzenie
  23.  
  24. if(is_uploaded_file($plik_tmp)) {
  25. if($sp[1] == "gif" or $sp[1] == "jpg" or $sp[1] == "PNG" or $sp[1] == "png") {
  26.  move_uploaded_file($plik_tmp, "galeria/$plik_nazwa");
  27. echo "Zdjęcie: <strong>$plik_nazwa</strong> o rozmiarze
  28. <strong>$plik_rozmiar bajtów</strong> zostało dodane!";
  29. }
  30. else {
  31. echo "Plik niepoprawny lub za duży!";
  32. }
  33. }

i wyświetlania
  1. $dir = 'galeria';//katalog
  2. $ile = 5;//ile obrazkow na stronie
  3. $rozszerzenia='jpg gif png jpeg PNG';//dozwolone rozszerzenia
  4. $liczb=3;//nieparzysta liczba, wieksza niż 2, czyli od 3 w gore. jest to liczba linkow do z
    mieny stron
  5. if($liczb%2!=1){
  6. if($liczb>3){
  7.  $liczb--;
  8. }else{
  9.  $liczb=3;
  10. }
  11. }
  12. if($liczb<3){
  13. $liczb=3;
  14. }
  15. $tablica=array();
  16. if(is_dir($dir)){
  17. if ($dh=opendir($dir)) {
  18.  while(($file=readdir($dh))!==false){
  19. if(stripos($rozszerzenia,substr(strrchr($file,'.'),1))!==false){
  20. $tablica[]=$file;
  21. }
  22.  }
  23.  closedir($dh);
  24. }
  25. }
  26. if(isset($_GET['i'])){
  27.  $i=$_GET['i'];
  28. }else{
  29.  $i=1;
  30. }
  31. $stron=ceil(count($tablica)/$ile);
  32. $message='';
  33. function wyswietl($x){
  34. global $i;
  35. global $message;
  36. if($x==$i){
  37.  $message.='<strong><a href="'.$_SERVER['PHP_SELF'].'?i='.$x.'">'.$x.'</a></strong>';
  38. }else{
  39.  $message.='<a href="'.$_SERVER['PHP_SELF'].'?i='.$x.'">'.$x.'</a>';
  40. }
  41. }
  42. if($stron<$liczb){
  43. for($x=1; $x<$stron+1; $x++){
  44.  wyswietl($x);
  45. }
  46. }elseif($i<ceil($liczb/2)){
  47. for($x=1; $x<$liczb+1; $x++){
  48.  wyswietl($x);
  49. }
  50. }elseif($i>$stron-floor($liczb/2)){
  51. for($x=$stron-$liczb+1; $x<$stron+1; $x++){
  52.  wyswietl($x);
  53. }
  54. }else{
  55. for($x=($i-floor($liczb/2)); $x<$i+ceil($liczb/2);$x++){
  56.  wyswietl($x);
  57. }
  58. }
  59. $tablica=array_slice($tablica, ($i-1)*$ile, $ile);
  60. ?>
  61.  
  62. <?php
  63. //wyswietla obrazki
  64. foreach($tablica as $k => $v){
  65. echo '<a href="'.$dir.'/'.$v.'"><img src="'.$dir.'/'.$v.'" alt="'.$v.'" style="border: 0px; width: 100px; height: 100px" /></a>';
  66. }
  67. ?>
  68. <br><br>Strony:
  69. <?php
  70. //wyswietla linki do zmian stron
  71. echo $message;
  72. ?>


To wszystko odbywa się w galeria.php

Sorry za duble posta ale chciałbym dostać jak najszybciej odpowiedź, bo przez całą noc nie spałem.
Męczyłem sie i sam wszystko przerobiłem na mySQL. Pliki są uploadowen i do bazy zapisuje się
id opis i nazwa pliku(po przeróbce jest nią 1.jpg ... tylko, że różne rozszerzenia)

Wszystko ok wyświetlają mi się obrazki ale za żadne skarby nie chcą się opisy wyświetlić, po prostu puste miejsce . Kod jest króciutki więc myślę , że nie powinno być teraz problemu z pomocą.
  1. <?php
  2. //wyswietla obrazki
  3. foreach($tablica as $k => $v){
  4. $zapytanie = "SELECT * FROM galeria WHERE sciezka= $v" ;
  5. $wykonaj = mysql_query("$zapytanie");
  6. $wiersz = mysql_fetch_array($wykonaj);
  7. echo '
  8. <table border=1>
  9. <tr><td>
  10. <a href="'.$dir.'/'.$v.'" alt="'.$wiersz['opis'].'"><img src="'.$dir.'/'.$v.'" alt="'.$wiersz['opis'].'" style="border: 0px; width: 100px; height: 100px" /></a>
  11. </td></tr>
  12. <tr><td>';
  13. echo $wiersz['opis'];
  14. echo '</td></tr></table>';
  15. }
  16. ?>


Błędy pewnie są w kropkach cudzysłowach itd.

Mam nadzieje na szybką reakcje ;]

P.S Wyjaśnienie: w tabeli galeria sieżka to nazwa pliku , opis to opis, numer to id.
$V to nazwa pliku
$dir to lokalizacja(folder)

reszta nie ważna wszystko się dobrze wyświetla tylko te opisy ;/
rojmarek
Cytat(prt @ 4.04.2007, 13:09:44 ) *
  1. <?php
  2. if(is_uploaded_file($plik_tmp)) {
  3. if($sp[1] == "gif" or $sp[1] == "jpg" or $sp[1] == "PNG" or $sp[1] == "png") {
  4.  move_uploaded_file($plik_tmp, "galeria/$plik_nazwa");
  5. echo "Zdjęcie: <strong>$plik_nazwa</strong> o rozmiarze
  6. <strong>$plik_rozmiar bajtów</strong> zostało dodane!";
  7. }
  8. ?>



Wszystko ok wyświetlają mi się obrazki ale za żadne skarby nie chcą się opisy wyświetlić, po prostu puste miejsce . Kod jest króciutki więc myślę , że nie powinno być teraz problemu z pomocą.
  1. <?php
  2. //wyswietla obrazki
  3. foreach($tablica as $k => $v){
  4. $zapytanie = "SELECT * FROM galeria WHERE sciezka= $v" ;
  5. $wykonaj = mysql_query("$zapytanie");
  6. $wiersz = mysql_fetch_array($wykonaj);
  7. echo '
  8. <table border=1>
  9. <tr><td>
  10. <a href="'.$dir.'/'.$v.'" alt="'.$wiersz['opis'].'"><img src="'.$dir.'/'.$v.'" alt="'.$wiersz['opis'].'" style="border: 0px; width: 100px; height: 100px" /></a>
  11. </td></tr>
  12. <tr><td>';
  13. echo $wiersz['opis'];
  14. echo '</td></tr></table>';
  15. }
  16. ?>

w tym pierwszym fragmencie ktory zostawilem ładniej by było zrobić
  1. <?php
  2. $accepted_file_types = array("GIF", "JPG", "PNG");
  3.  
  4. if(is_uploaded_file($plik_tmp)) {
  5. if(in_array(strtoupper($sp[1]), $accepted_file_types) AND move_uploaded_file($plik_tmp, "galeria/$plik_nazwa")){
  6. //zwróć uwagę tu na "AND move...", jeżeli nie uda się przenieść pliku (co tez się zdarza z wielu powodów) to także wyświetli się stosowny komunikat...
  7. echo "Zdjęcie: <strong>$plik_nazwa</strong> o rozmiarze
  8. <strong>$plik_rozmiar bajtów</strong> zostało dodane!";
  9. }
  10. ?>


co do drugiej części to kod wydaje się być OK... sprwdź może czy zmienna $wiersz['opis'] jest pusta (empty" title="Zobacz w manualu PHP" target="_manual); ewentualnie napisz jak dodajesz rekordy do bazy, albo sam zobacz (PHPMyAdmin) czy kolumna `opis` istnieje i jest niepusta

edit:
komentarze z kodzie..
prt
Dzięki w tym kodzie z wyświetlaniem opisu w funkcji SELECT przy WHERE sciezka=$V zapomniałem dodać ' ' ;] na zmienną, już działa.

Zuploadowałem dla próby 6 plików ;] i teraz nie moge ich usunąć z serwera za chiny ;].
Włączam ftp (total commanderem) daje usuń i pisze , że nie można usunąć ;/
Myślę że może to być coś z chmodami , trzeba chyba coś wepchać do tego kodu żeby zmieniał chmod , i teraz nie wiem jak usunąć poprzednie pliki ;/
rojmarek
Cytat(prt @ 4.04.2007, 19:13:31 ) *
Zuploadowałem dla próby 6 plików ;] i teraz nie moge ich usunąć z serwera za chiny ;].
Włączam ftp (total commanderem) daje usuń i pisze , że nie można usunąć ;/
Myślę że może to być coś z chmodami , trzeba chyba coś wepchać do tego kodu żeby zmieniał chmod , i teraz nie wiem jak usunąć poprzednie pliki ;/

tak tongue.gif musisz chmoda zrobic z poziomu php, albo po prostu z poziomu php usunąć plik (unlink" title="Zobacz w manualu PHP" target="_manual)
prt
OK wpisując bezpośrednią ścieżkę do pliku nie włącza go , ale w total commanderze nadal on widnieje nawet po ponownym zalogowaniu się ;/ .

Teraz ostatnie pytanie ;] dałem kod uploadu pliku gdzie wpisać , żeby podczas uploadu już chmod pliku był dobrze ustawiany, tak żebym mógł go usunąć.
rojmarek
Cytat(prt @ 4.04.2007, 19:47:15 ) *
OK wpisując bezpośrednią ścieżkę do pliku nie włącza go , ale w total commanderze nadal on widnieje nawet po ponownym zalogowaniu się ;/ .

Teraz ostatnie pytanie ;] dałem kod uploadu pliku gdzie wpisać , żeby podczas uploadu już chmod pliku był dobrze ustawiany, tak żebym mógł go usunąć.

po move_uploaded_file chmod'ujesz...
usuwanie - jak widać go w totalu, to on tam pewnie jeszcze jest... jakoś ze ścieżką pokombinuj, dodaj ./plik.txt, albo coś
prt
Albo coś źle wpisuje , albo tego usunąć sie nie da ;/
w totalu mam takie pliki 6.jpg 5.jpg itd zaraz w kodzie reszta.
Plik z tym kodem jest w tym samym folderze co te pliki
  1. <?php
  2. unlink('4.PNG');
  3. unlink('3.jpg');
  4. unlink("/5.jpg");
  5. unlink("/6.jpg");
  6. if (unlink){echo'usunięto !!!!!!';} else{echo'buuuuuuuuuuuu';}
  7. ?>

Wyświetla usunięto a pliki nadal są w totalu ;/

Teraz do drugiego ustawiania chmoda wysyłanym plikom tak ma byc ?
  1. <?php
  2. move_uploaded_file($plik_tmp, "grafika/$plik_nazwa");
  3.  chmod($plik_nazwa, 0777);
  4. echo "Zdjęcie: <strong>$plik_nazwa</strong> o rozmiarze 
  5. <strong>$plik_rozmiar bajtów</strong> zostało dodane!";
  6. ?>
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.