Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][HTML][PHP]Problem z multiple (Przesyłanie obrazków)
Forum PHP.pl > Forum > Przedszkole
imagizer
Witam, mam problem z funkcją multiple , a dokładnie to chce aby mi zapisywało X zaznaczonych plików do bazy danych w osobnych wierszach

Funkcja form
  1. <form enctype="multipart/form-data" action="_admin.php?strona=upload&akcja=upload" method="POST">
  2. <input type="hidden" name="MAX_FILE_SIZE" value="500000" />
  3. <input name="plik" multiple type="file" style="margin-top:10px;"/>
  4. <input class="btn" type="submit" style="margin-top:10px;" value="Wyślij plik" />
  5. </form>


oraz zapis,

  1. if($_GET['akcja']=="upload"){
  2. $kategoria = $_POST['kategoria'];
  3. $plik_tmp = $_FILES['plik']['tmp_name'];
  4. $plik_nazwa = $_FILES['plik']['name'];
  5. $plik_rozmiar = $_FILES['plik']['size'];
  6. $dats=date("Y-m-d");
  7. $nazwapliku=''.$dats.'-'.$plik_nazwa.'';
  8.  
  9.  
  10. if(is_uploaded_file($plik_tmp)) {
  11. pytanie_mysql("INSERT INTO obrazki (link,nazwa,kategoria) VALUES('upload/$nazwapliku','$nazwapliku','$kategoria')");
  12.  
  13. move_uploaded_file($plik_tmp, "upload/$nazwapliku");
  14. echo '<div class="komunikat">
  15. <img src="upload/'.$nazwapliku.'" height="40" width="40" align="right">
  16. Dodano plik: <strong>'.$nazwapliku.'</strong><br>
  17. o rozmiarze <strong>'.$plik_rozmiar.' bajtów</strong>
  18. </div>
  19.  
  20. ';
  21. }
  22. }


Programuje od niedawna, męczę się z tym i męczę i nich nie wchodzi,, prosiłbym o pomoc.
Dzięki
nospor
Jak chcesz miec multiple, to nazwa ma byc tablicowa
nie: name="plik"
a: name="plik[]"

Dostaniesz wowczas tablice plikow. Potem lecisz po tej tablicy FOREACHem i normalnie obslugujesz kazdy plik z osobna
imagizer
Próbowałem na kilka sposobów, i dalej nic:/
przydałby się jakiś przykład, jak i gdzie umieścic foreach
Turson
W formularzu jak nospor powiedział, a jak odbierasz go to wyprintuj tablicę print_r($_FILES) to zobaczysz co tam idzie
imagizer
Sprawdzałem i wyświetla mi tablice poprawnie, ale dalej mam problemy z tablicą, jak zrobić z tablicy zmienną która zapisuje mi w pętli wszystkie obrazki

  1. if($_GET['akcja']=="upload"){
  2. $kategoria = $_POST['kategoria'];
  3. $plik_tmp = $_FILES['plik']['tmp_name'];
  4. $plik_nazwa = $_FILES['plik']['name'];
  5. $plik_rozmiar = $_FILES['plik']['size'];
  6. $dats=date("Y-m-d");
  7. $nazwapliku=''.$dats.'-'.$plik_nazwa.'';
  8.  
  9. echo $plik_nazwa[0],$plik_nazwa[1],$plik_nazwa[2],$plik_nazwa[3];
  10.  
  11. if(is_uploaded_file($plik_tmp)) {
  12. pytanie_mysql("INSERT INTO obrazki (link,nazwa,kategoria) VALUES('upload/$nazwapliku','$nazwapliku','$kategoria')");
  13.  
  14. move_uploaded_file($plik_tmp, "upload/$nazwapliku");
  15. echo '<div class="komunikat">
  16. <img src="upload/'.$nazwapliku.'" height="40" width="40" align="right">
  17. Dodano plik: <strong>'.$nazwapliku.'</strong><br>
  18. o rozmiarze <strong>'.$plik_rozmiar.' bajtów</strong>
  19. </div>
  20.  
  21. ';
  22. }
  23. }
Turson
  1. foreach($_FILES['plik']['tmp_name'] as $plik){
  2. move_uploaded_file($plik, nowa nazwa);
  3. }
imagizer
Turson, znów próbowałem kilku sposobów i nic
robiąc tak:
  1. if($_GET['akcja']=="upload"){
  2.  
  3. $kategoria = $_POST['kategoria'];
  4. $plik_tmp = $_FILES['plik']['tmp_name'];
  5. $plik_nazwa = $_FILES['plik']['name'];
  6. $plik_rozmiar = $_FILES['plik']['size'];
  7. $dats=date("Y-m-d");
  8.  
  9.  
  10. foreach($plik_tmp as $plik ){
  11.  
  12. if(is_uploaded_file($plik)) {
  13. foreach($_FILES['plik']['name'] as $nazwa){
  14. $nazwapliku=''.$dats.'-'.$nazwa.'';
  15. pytanie_mysql("INSERT INTO obrazki (link,nazwa,kategoria) VALUES('upload/$nazwapliku','$nazwapliku','$kategoria')");
  16.  
  17. move_uploaded_file($plik, "upload/$nazwapliku");
  18. echo '<div class="komunikat">
  19. <img src="upload/'.$nazwapliku.'" height="40" width="40" align="right">
  20. Dodano plik: <strong>'.$nazwapliku.'</strong><br>
  21. o rozmiarze <strong>'.$plik_rozmiar.' bajtów</strong>
  22. </div>
  23.  
  24. ';
  25. }
  26. } }
  27. }


zapisuje mi do bazy danych po 3 te same pliki o dobrych nazwach, a do folderu upload tylko jeden obraz.
Turson
To jest powodem
  1. $plik_tmp = $_FILES['plik']['tmp_name'];

$plik_tmp nie jest tablicą.

  1. $plik_tmp[] = $_FILES['plik']['tmp_name'];

powinno rozwiązać problem
imagizer
Probowałem na ten sposób, i ten oraz na wiele innych sposobów, 2 dzień się już męcze, ech..
  1. $kategoria = $_POST['kategoria'];
  2. $plik_rozmiar = $_FILES['plik']['size'];
  3. $dats=date("Y-m-d");
  4.  
  5. foreach($_FILES['plik']['tmp_name'] as $plik ){
  6.  
  7. if(is_uploaded_file($plik))
  8. {
  9. foreach($_FILES['plik']['name'] as $nazwa){
  10. $nazwapliku=''.$dats.'-'.$nazwa.'';
  11. pytanie_mysql("INSERT INTO obrazki (link,nazwa,kategoria) VALUES('upload/$nazwapliku','$nazwapliku','$kategoria')");
  12. move_uploaded_file($plik, "upload/$nazwapliku");
  13.  
  14. }
  15. } }


Do bazy danych dodaje mi x razy wiecej rekordów gdzie x to ilość plików np 2x2 4x4 itp. z dobrą nazwą
aczkolwiek dalej do folderu upload, dodaje tylko 1 obrazek.
Turson
  1. foreach($_FILES['plik']['tmp_name'] as $plik ){
  2. if(is_uploaded_file($plik)) {
  3. $nazwapliku = $dats.'-'.$_FILES['plik']['name'];
  4. pytanie_mysql("INSERT INTO obrazki (link,nazwa,kategoria) VALUES('upload/$nazwapliku','$nazwapliku','$kategoria')");
  5. move_uploaded_file($plik, "upload/$nazwapliku");
  6. }
  7. }
imagizer
Turson, próbowałem,, aczkolwiek wtedy nie przypisuje mi nazwy
i wywala mi array zamiast nazwy:/
Kshyhoo
Bo nazwa powinna składać się z przedrostka i indeksu tablicy, czyli coś na podobę:
  1. foreach($_FILES['plik']['tmp_name'] as $klucz => $plik ) {

tak myślę, ale mogę się mylić smile.gif
imagizer
Niestety nie działa;/
Kshyhoo
Wklej cały kod, łącznie z formularzem.
imagizer
Formularz masz u góry, kod to ten który turson napisał ostatnio,
Od biedy zrobiłem sobie funkcje wyswietlania 10 losowych liczb i cyfr, które nadają dla każdego obrazka różny ciąg,

Formularz masz u góry, kod to ten który turson napisał ostatnio,
Od biedy zrobiłem sobie funkcje wyswietlania 10 losowych liczb i cyfr, które nadają dla każdego obrazka różny ciąg,
Kshyhoo
A pytanie_mysql to jakaś funkcja?
Turson
Zgaduję, że tutaj
  1. $nazwapliku = $dats.'-'.$_FILES['plik']['name'];
  2. move_uploaded_file($plik, "upload/$nazwapliku");

nie zastosowałeś się do tego co mówił kshyhoo
imagizer
Turson sprawdzałem, i nic.
Tam zapytanie_mysql to zwykłe połaczenie z mysql i z tym wszystko ok.
Ale sprawa załatwiona, losowe przypisanie liczb i cyfr bardziej mi odpowiada.

Próbowałęm również użyć tej funkcji aby pomniejszyć zdjęcie,
  1. <?php
  2. function resize_image($imgName, $width, $height)
  3. {
  4. if(!($img = imagecreatefromjpeg($imgName))){
  5. echo(\"Nie mogę otworzyć pliku: $imgName\");
  6. return false;
  7. }
  8. $sW = imagesx($img);
  9. $sH = imagesy($img);
  10. $tempImg = imagecreatetruecolor($width, $height);
  11. imagecopyresampled($tempImg, $img, 0, 0, 0, 0, $width, $height, $sW, $sH);
  12.  
  13. imagejpeg($tempImg, 'resized'.$name);
  14. }
  15. ?>


Niestety przy
  1. if(is_uploaded_file($plik)) {
  2. $nazwa2=losowy_ciag_2(10);
  3. $nazwa=''.$nazwa2.'.jpg';
  4. $nazwapliku = $dats.'-'.$nazwa;
  5. pytanie_mysql("INSERT INTO obrazki (link,nazwa,kategoria) VALUES('upload/$nazwapliku','$nazwapliku','$kategoria')");
  6. $plik = resize_image($plik, 100, 100)
  7. move_uploaded_file($plik2, "upload/$nazwapliku");
  8. }


Nic się niedzieje, wiecie może w czym problem?
Kshyhoo
Polecam herbatkę ziołową, bo coś za szybko klikasz na "Dodaj odpowiedź" smile.gif
Po za tym, nie słuchasz (nie czytasz), co się do Ciebie pisze.
  1. if(isset($_FILES['plik'])) {
  2. $errors = array();
  3. foreach($_FILES['plik']['tmp_name'] as $key => $tmp_name ) {
  4. $kategoria = $_POST['kategoria'];
  5. $plik_nazwa = $dats.'-'.$_FILES['plik']['name'][$key];
  6. $plik_rozmiar = $_FILES['plik']['size'][$key];
  7. $plik_tmp = $_FILES['plik']['tmp_name'][$key];
  8. $file_type = $_FILES['plik']['type'][$key];
  9. if($plik_rozmiar > 5000000) {
  10. $errors[] = 'Do 5 MB';
  11. }
  12. $query = "INSERT INTO obrazki (`link`, `nazwa`, `kategoria`) VALUES('upload/$plik_nazwa', '$plik_nazwa', '$kategoria'); ";
  13. echo $query.'<br />';
  14. $desired_dir = "upload";
  15. if(empty($errors) == true) {
  16. if(is_dir($desired_dir) == false) {
  17. mkdir("$desired_dir", 0700);
  18. }
  19. if(is_dir("$desired_dir/".$plik_nazwa) == false) {
  20. move_uploaded_file($plik_tmp, "upload/".$plik_nazwa);
  21. } else {
  22. $new_dir="upload/".$plik_nazwa.time();
  23. rename($plik_tmp, $new_dir);
  24. }
  25. mysql_query($query);
  26. } else {
  27. print_r($errors);
  28. }
  29. }
  30. if(empty($error)) {
  31. echo "SUKCES !";
  32. }
  33. }
  34. ?>
  35. <form action="grafikiDoBazy.php" method="POST" enctype="multipart/form-data" >
  36. <input type="file" name="plik[]" multiple/>
  37. <input class="btn" type="submit" style="margin-top: 10px;" value="Wyślij plik" />
  38. </form>


Nie bawiłem się z kategorią, ale chcąc dodawać różne kategorie dla grafik, również trzeba przekazać ją jako tablicę i KONIECZNIE z indeksem. Inaczej pętla będzie wyrzucać Array.
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.