Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ograniczona liczba uploadowanych zdjęć dla produktu, oraz przekazywanie adresu zdjęcia z iframe do strony nadrzędnej
elwierka
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 26.12.2007

Ostrzeżenie: (0%)
-----


Czy ktoś z Was mógłby mi podsunąć jakieś sensowne rozwiązanie mojego problemu?

W bazie danych mysql, utworzyłam tabelę PRODUKTY, której pola to m.in. id, nazwa, kategoria, opis, zdjecie1, zdjecie2, zdjecie3.

Z założenia ostatnie kolumny - zdjęcie 1, 2, 3, są polami typu char, w których chcę przechowywać adres obrazka na serwerze.

Napisałam sobie skrypt do uploadu plików na serwer, wszystkie pliki do jednego utworzonego katalogu.

Tworzę formularz do dodawania nowych produktów, gdzie po kolei należy podać dane produktu i ... pliki do uploadu.

Pytanie 1.
Jak ograniczyć ilość uploadowanych plików do liczby 3? Tak, aby te trzy adresy zapełniły po kolei wartości kolumn zdjęcie1, zdjecie2, zdjecie3? Nie chcę robić oddzielnej tabeli na zdjęcia, bo każde ze zdjęć będzie odpowiadało tylko określonemu produktowi

Pytanie 2.
W jaki sposób przekazać ścieżkę dostępu do pliku po uploadzie z ramki iframe do strony nadrzędnej?
Aby można było dodać plik ze strony na której znajduje się formularz, zrobiłam iframe i tu wstawiłam plik ze skryptem do uploadownaia plików na serwer. Problem w tym, że już po zapisaniu pliku na serwer i przypisaniem do zmiennej jego adresu na serwerze, nie potrafię wartości tej zmiennej przekazać do strony nadrzędnej (strony, na której znajduje się formularz do dodawania nowych produktów i iframe).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
elwierka
post
Post #2





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 26.12.2007

Ostrzeżenie: (0%)
-----


ok to powiedzmy, tworzę formularz i dodatkowo 3 pola do załadowania plików

Tylko jakie zmiany wprowadzić w bazie danych?
W tabeli produkt zostawić 3 pola na zdjęcia, typu int, będące kluczem obcym do tabeli, którą utworzę (tabela obrazki)?

Chcę, aby przy zapisywaniu nowego produktu, po aktywacji skryptu do zapisywania, następowało:

1. Zapisywanie plików jpg na serwer i jednocześnie przypisanie tych ścieżek do zmiennych w polu zdjecie(1,2,3)
2. zapisanie danych do bazy danych



...a ...
I jak można by przerobić skrypt do wysyłania 3 plików jednocześnie?

Napisałam skrypt do wysyłania jednego pliku:

  1. <?php
  2.  
  3. if($_FILES['plik1']['error']>0)
  4. {
  5. echo 'Pojawił się problem: ';
  6. switch ($_FILES['plik1']['error'])
  7. {
  8. case 1: echo 'Rozmiar pliku przekroczył wartość upload_max_filesize'; echo '<br /><a href="'.$_SERVER['HTTP_REFERER'].'">Powrót</a>'; break;
  9. case 2: echo 'Rozmiar pliku przekroczył wartość max_file_size'; echo '<br /><a href="'.$_SERVER['HTTP_REFERER'].'">Powrót</a>'; break;
  10. case 3: echo 'Plik wysłany tylko częściowo'; echo '<br /><a href="'.$_SERVER['HTTP_REFERER'].'">Powrót</a>'; break;
  11. case 4: echo 'Nie wysłano żadnego pliku'; echo '<br /><a href="'.$_SERVER['HTTP_REFERER'].'">Powrót</a>'; break;
  12. case 6: echo 'Nie można wysłać pliku. Nie wskazano katalogu tymczasowego'; echo '<br /><a href="'.$_SERVER['HTTP_REFERER'].'">Powrót</a>'; break;
  13. case 7: echo 'Wysłanie pliku nie powiodło się. Nie zapisano pliku na dysku.'; echo '<br /><a href="'.$_SERVER['HTTP_REFERER'].'">Powrót</a>'; break;
  14. }
  15. }
  16.  
  17. // czy prawidłowy typ mime
  18.  
  19. if (($_FILES["plik1"]["type"] != "image/gif")
  20. && ($_FILES["plik1"]["type"] != "image/jpeg")
  21. && ($_FILES["plik1"]["type"] != "image/x-png")
  22. && ($_FILES["plik1"]["type"] != "image/png")
  23. && ($_FILES["plik1"]["type"] != "image/pjpeg"))
  24. {
  25. echo 'Problem: plik jest nieodpowidnim typem.';
  26. }
  27.  
  28. // umieszczenie pliku w pożądanej lokalizacji
  29.  
  30.  
  31. if (file_exists('../obrazki/' . $_FILES['plik1']['name']))
  32. {
  33. echo $_FILES["plik1"]["name"] . " już istnieje. <br /><a href=\"".$_SERVER["HTTP_REFERER"]."\">Powrót</a>";
  34. exit();
  35. }
  36. else
  37. {
  38. $target = '../obrazki/'. $_FILES['plik1']['name'];
  39.  
  40. if(is_uploaded_file($_FILES['plik1']['tmp_name']))
  41. {
  42. if(!move_uploaded_file($_FILES['plik1']['tmp_name'], $target))
  43. {
  44. echo 'Problem: Plik nie może być skopiowany do katalogu';
  45. echo '<br /><a href="'.$_SERVER['HTTP_REFERER'].'">Powrót</a>';
  46. }
  47. }
  48. else
  49. {
  50. echo 'Problem: możliwy atak podczas wysyłania pliku. Nazwa pliku: ';
  51. echo $_FILES['plik1']['name'];
  52. echo '<br /><a href="'.$_SERVER['HTTP_REFERER'].'">Powrót</a>';
  53. }
  54.  
  55. echo 'Plik wysłany.<br /><br />';
  56. echo 'Plik został zapisany pod adresem: '. $target . '<br /><br />';
  57. echo '<a href="'.$_SERVER['HTTP_REFERER'].'">Powrót</a>';
  58. //ponowne sformatowanie zawartości pliku
  59. }
  60.  
  61. ?>
  62.  


Nie wiem za bardzo jak go przerobić aby jednocześnie zapisywał 3 pliki i przydzielał im ściezki dostępu, jednak biorąc pod uwagę, że :
1 - żaden plik może nie zostać przesłany (produkt może nie posiadać obrazka)
2 - może zostać wysłany jeden, dwa, lub trzy pliki, nie musi być pełen komplet
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 06:04