Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Wrzucenie kilku plików z formularza do jednej komumny w tabeli
Forum PHP.pl > Forum > Przedszkole
ob1
Witam, mam napisany formularz, który wrzuca do bazy w mysql (a dokładniej do danej tablicy) wartości, poprzez Insert into oraz input type file. Wszystko działa ok przy wrzucaniu pojedynczych wartości do komórek w tabeli.

Teraz chcę zrobić tak, aby przy przysyłaniu pliku poprzez input, przesyłał do danej komórki w bazie kilka plików jednocześnie. Dodałem multiple name="files[]", lecz dana zmienna $plik wrzuca tylko i wyłącznie jedną wartość.

Czego użyć, aby w danej komórce w tabeli pojawiło się kilka wartości za jednym przesyłem?

Deklaracja zmiennej:
$pliki = trim($_FILES['pliki']['name']);

Wrzucenie pliku do tabeli:

$query = "INSERT INTO nazwa_tabeli VALUES (0,NOW(),'wartosc_pierwsza','wartosc_druga','$pliki')"

Wysłanie za pomocą input:

<input type="file" multiple name="pliki[]" id="pliki" name="pliki" value="<?php if(!empty($pliki)) echo $pliki; ?>"/>

Przy tego typu rozwiązaniu oczywiście występuje informacja, że $plik spodziewa się jednego parametru.

Dziękuję za pomoc
leonpro778
Czegoś tutaj nie rozumiem. Możesz pokazać większy kawałek kodu odpowiadający za przesłanie plików? I żebyśmy się dobrze zrozumieli, chcesz aby DWA pliki były zapisane w bazie w jednej komórce? Tak?

(Nie za bardzo rozumiem po co Ci value w tym input z file)
ob1
Odpowiedź: dokładnie, chcę aby więcej niż jedna wartość zostały zapisane w danej kolumnie - ich liczba ma zależeć od liczby przysłanych plików, wybranych przez użytkownika dzięki multiple w formularzu.

Cześć. Rozchodzi się o to, że mam stworzoną tabelę w mysql, która odpowiada za wyświetlanie przesłanych plików od administratora do danego użytkownika.

Czyli działa to tak, że "administrator" wybiera użytkownika z listy (pobranej z bazy danych), do którego chce przesłać dane pliki (jpg, pdf itd, bez ustalonej z góry liczby, czy to 1 plik czy 5) - użytkownik jest pobierany przez get 'user'. Dochodzimy więc do ostatecznego etapu, w którym administrator wybrał użytkownika i dzięki przyciskowi ładującemu plik z dysku "przeglądaj" wybiera za pomocą np ctrl klika plików z dysku, które chce przesłać danemu użytkownikowi.

Oczywiście w momencie przesłania jednego pliku nie ma problemu, ponieważ wtedy w kolumnie tabeli "pliki" pojawia się adres pliku, który został zapisany na dysku.

Problem jest taki, jak to zrobić aby w danej kolumnie zapisać kilka plików jednocześnie. W jaki sposób to zrobić, a raczej czy można do danej kolumny wrzucić kilka wartości (więcej niż jedną) ?

W formularzu jest opcja multiple, pod wybór kilku plików jednocześnie. Pytanie, jak zmodyfikować php? Jak to ugryźć (chociaż teoretycznie) ?

  1. <?
  2. require_once('cm/connect.php');
  3. require_once('connect-pliki.php');
  4. $usr=$_GET['username'];
  5.  
  6.  
  7. if (isset($_POST['submit'])) {
  8.  
  9.  
  10. $user_id =trim($_POST['user_id']);
  11. $nadawca =trim($_POST['nadawca']);
  12. $odbiorca =trim($_POST['odbiorca']);
  13. $pliki = trim($_POST['pliki']);
  14. $pliki_size = $_FILES['pliki']['size'];
  15. $pliki = trim(time()."-".$pliki);
  16.  
  17.  
  18.  
  19. if (!empty($usr) && !empty($pliki)) {
  20. if ($_FILES['pliki']['error'] == 0) {
  21.  
  22. $target = UPLOADPATH . $pliki;
  23. if (move_uploaded_file($_FILES['pliki']['tmp_name'], $target)) {
  24.  
  25. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  26.  
  27. if (!$dbc) {
  28. die('Nie można połączyć się z bazą danych: ' . mysql_error());
  29. }
  30.  
  31.  
  32.  
  33. $query = "INSERT INTO pliki_od_administratora VALUES (0,NOW(),'administrator','$usr','$pliki')"
  34.  
  35. or die("Zapytanie do niepoprawne");
  36.  
  37. mysqli_query($dbc, $query);
  38.  
  39.  
  40. echo '<p class="er">Pliki zostały wysłane</p>';
  41.  
  42. mysqli_close($dbc);
  43.  
  44.  
  45. }
  46. }
  47. }
  48.  
  49. else {
  50. echo '<p class="er">Wystąpił problem przy przesyłaniu plików.</p>';
  51. }
  52. }
  53. ?>
  54. <div class="zaplecze_inputy_na_czarno">
  55. <p>Wyślij plik do użytkownika <?php echo $usr; ?> 2/2</p>
  56. </div>
  57. <div class="spoz_menu_logowania_usuwanie">
  58. <div class="spoz_zaloguj">
  59. <div id="dodawanie-plikow">
  60. <form enctype="multipart/form-data" method="post" action="">
  61. <input type="file" name="pliki[]" multiple="multiple"/> <br/><br/>
  62. <input type="submit" value="Wyślij pliki" name="submit" />
  63. </form>
  64. </div>
  65. </div>
  66. </div>
  67.  


Po przeróbkach poniższy fragment kodu, a dokładniej echo wyświetla przesłaną nazwę plików prawidłowo, lecz dokładnie to samo muszę wstawić do kolumny "pliki" w mysql, poprzez zmienną "tablica_z_plikami"


.....
  1. $pliksy = trim($_FILE['pliki[]']);
  2.  
  3. if (isset($pliksy['name'])){
  4.  
  5. foreach ($pliksy['name'] as $tablica_z_plikami){
  6. echo $tablica_z_plikami.'<br />';
  7.  
  8. }
  9.  
  10. if (!empty($usr) && !empty($pliksy)) {
  11. if ($_FILES['pliksy']['error'] == 0) {
  12.  
  13. $target = UPLOADPATH . $pliksy;
  14. if (move_uploaded_file($_FILES['pliksy']['tmp_name'], $target)) {
  15.  
  16. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  17.  
  18. if (!$dbc) {
  19. die('Nie można połączyć się z bazą danych: ' . mysql_error());
  20. }
  21.  
  22.  
  23. $query = "INSERT INTO pliki_od_administratora VALUES (0,NOW(),'administrator','$usr','$tablica_z_plikami')"

.....
mrk9109
Skoro pobierasz z formularza tabele to zapis musi być w pętli który wykonujesz Np: użyj pętli for wtedy będzie ci powtarzał zapytanie i zapisywał więcej plików .
ob1
ok dzięki, tylko który fragment kodu mam wziąć w pętlę?
mrk9109
zapytanie musi być podam ci przykład u mnie z kodu w którym wgrywam kilka zdjęć na raz .

  1. for($i=0; $i<count($_FILES["obrazek"]["name"]); $i++)
  2. {
  3. $filetmp = $_FILES["obrazek"]["tmp_name"][$i];
  4. $filename = $_FILES["obrazek"]["name"][$i];
  5. $filetype = $_FILES["obrazek"]["type"][$i];
  6. $filepath = "../images/galeria/".$filename;
  7.  
  8. move_uploaded_file($filetmp,$filepath);
  9.  
  10. $zapytanie = $polaczenie->query("INSERT INTO `galeria` (`obrazek`, `kategoria`)
  11. VALUES ('".$filepath."',
  12. '".$kategoria."'
  13. );");
  14. }
ob1
ok, a w jaki sposób powinna być zadeklarowana zmienna $pliki?, ponieważ jest jakiś błąd i wyskakuje info z else
leonpro778
Wrzuć ten błąd tutaj.
ob1
  1. <div class="">
  2.  
  3. <?
  4. require_once('cm/connect.php');
  5. require_once('connect-pliki.php');
  6. $usr=$_GET['username'];
  7.  
  8. if (isset($_POST['submit'])) {
  9. $pliki = $_FILES["pliki"]["name"];
  10. if (isset($pliki['name'])){
  11.  
  12. if (!empty($usr) && !empty($pliki)) {
  13. if ($_FILES['pliki']['error'] == 0) {
  14.  
  15. $target = UPLOADPATH . $pliki;
  16. if (move_uploaded_file($_FILES['pliki']['name'], $target)) {
  17.  
  18. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  19.  
  20. if (!$dbc) {
  21. die('Nie można połączyć się z bazą danych: ' . mysql_error());
  22. }
  23.  
  24.  
  25. for($i=0; $i<count($_FILES["pliki"]["name"]); $i++)
  26. {
  27. $pliki = $_FILES["pliki"]["name"][$i];
  28. $query = "INSERT INTO pliki_od_administratora VALUES (0,NOW(),'administrator','$usr','$pliki')"
  29.  
  30. or die("Zapytanie do niepoprawne");
  31.  
  32. mysqli_query($dbc, $query);
  33.  
  34.  
  35. echo '<p class="er">Pliki zostały wysłane</p>';
  36.  
  37. mysqli_close($dbc);
  38.  
  39. }
  40.  
  41.  
  42. }
  43.  
  44. }
  45. }
  46. }
  47.  
  48. else {
  49. echo '<p class="er">Wystąpił problem przy przesyłaniu plików.</p>';
  50. }
  51. }
  52. ?>
  53.  
  54.  
  55. <div class="">
  56. <p>Wyślij plik do użytkownika <?php echo $usr; ?> 2/2</p>
  57. </div>
  58.  
  59.  
  60. <div class="">
  61. <p>Trwa zmiana sposobu wysyłania plików...proszę nie korzystać z formularza...9/04/2018</p>
  62.  
  63. <div class="">
  64. <div id="dodawanie-plikow">
  65. <form enctype="multipart/form-data" method="post" action="">
  66. <input type="file" name="pliki" id="pliki" multiple="multiple"/> <br/><br/>
  67. <input type="submit" value="Wyślij pliki" name="submit" />
  68. </form>
  69. </div>
  70. </div>
  71. </div>
  72. </div>


Efekt: cały czas wywyala "Wystąpił problem przy przesyłaniu plików."
wxm
Wstaw między 9 i 10 linią
  1. var_dump($pliki)
ob1
Wstawiłem, efekt informacje:

"string(20) "test-obrazek-dwa.jpg" "

kolumna pliki w bazie jest typu blob.
mrk9109
nie do końca to wykorzystałeś bo np: move_uploaded_file masz dalej po za pętlą
wxm
Cytat(ob1 @ 12.04.2018, 14:59:52 ) *
Wstawiłem, efekt informacje:

"string(20) "test-obrazek-dwa.jpg" "
A w warunku przeszukujesz tablicę asocjacyjną. Teraz już rozumiesz gdzie masz błąd?
ob1
mrk: move_uploaded_file wrzuciłem w pętlę i nic się nie zmieniło
wxm: nie wiem gdzie jest błąd. Będę wdzięczny za podpowiedź.
leonpro778
Przecież błąd wskazuje na to, że skrypt wywala się już przy pierwszym IF'ie (drugim licząc SUBMIT). Tam szukaj błędu.

Zobacz co masz:
  1. $pliki = $_FILES["pliki"]["name"]; // string


Tutaj sprawdzasz:
  1. if (isset($pliki['name']))


Jak w stringu ma być COŚ z indeksem NAME questionmark.gif

Zamień tą powyższą linijkę na:
  1. $pliki = $_FILES["pliki"];


i szukaj dalej
ob1
Zamieniłem na $pliki = $_FILES['pliki'] oraz if (isset($pliki)) i efekt jest taki:

array(5) { ["name"]=> string(17) "test-obrazek2.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(32) "/alt/var/lib/php/pngis/phpL6C0r5" ["error"]=> int(0) ["size"]=> int(6194) }

leonpro778
Cytat(ob1 @ 12.04.2018, 21:04:12 ) *
...oraz if (isset($pliki)) i efekt jest taki:

Tego akurat nie zmieniaj. Zostaw jak było, czyli:
  1. if (isset($pliki['name']))



Cytat(ob1 @ 12.04.2018, 21:04:12 ) *
array(5) { ["name"]=> string(17) "test-obrazek2.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(32) "/alt/var/lib/php/pngis/phpL6C0r5" ["error"]=> int(0) ["size"]=> int(6194) }

Tutaj przecież widzisz, że masz już tablicę z indeksem "name" smile.gif
ob1
Zostawiam:

$pliki = $_FILES["pliki"];

if (isset($pliki['name'])){

efekt:

array(5) { ["name"]=> string(17) "test-obrazek2.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(32) "/alt/var/lib/php/pngis/phpFoK1qP" ["error"]=> int(0) ["size"]=> int(6194) }


Kod:

  1. if (isset($_POST['submit'])) {
  2. $pliki = $_FILES['pliki'];
  3. echo var_dump($pliki);
  4. if (isset($pliki['name'])){
  5.  
  6. if (!empty($usr) && !empty($pliki)) {
  7. if ($_FILES['pliki']['error'] == 0) {
  8.  
  9. $target = UPLOADPATH . $pliki;
  10. for($i=0; $i<count($_FILES["pliki"]["name"]); $i++)
  11. {
  12. if (move_uploaded_file($_FILES['pliki']['name'], $target)) {
  13.  
  14. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  15.  
  16. if (!$dbc) {
  17. die('Nie można połączyć się z bazą danych: ' . mysql_error());
  18. }
  19.  
  20.  
  21.  
  22. $pliki = $_FILES["pliki"]["name"][$i];
  23. $query = "INSERT INTO pliki_od_administratora VALUES (0,NOW(),'administrator','$usr','$pliki')"
  24.  
  25. or die("Zapytanie do niepoprawne");
  26.  
  27. mysqli_query($dbc, $query);
  28.  
  29.  
  30. echo '<p class="er">Pliki zostały wysłane</p>';
  31.  
  32. mysqli_close($dbc);
  33.  
  34. }
  35.  
  36.  
  37. }
  38.  
  39. }
  40. }
  41. }
  42.  
  43. else {
  44. echo '<p class="er">Wystąpił problem przy przesyłaniu plików.</p>';
  45. }
  46. }
leonpro778
No i na czym Ci się zatrzymuje? Masz strasznie dużo tych if'ów, dopisz sobie jakieś else do każdego z nich tak abyś mógł sprawdzić, gdzie skrypt się zatrzymuje bo po przejściu pierwszego IF'a nie będziesz miał żadnych innych komunikatów (oczywiście nie licząc błędów PHP).

Cytat(ob1 @ 12.04.2018, 21:13:57 ) *
if ($_FILES['pliki']['error'] == 0) {


Pamiętaj jeszcze o tej linijce. Masz mieć KILKA plików dlatego tutaj już robisz pętlę FOREACH. Do swojego inputa z plikami name zmień na name="pliki[]"
ob1
Info:

problem dotyczy tego $target = UPLOADPATH . $pliki;

twierdząc, że chcę zamienić tablicę na string

"array(5) { ["name"]=> string(17) "test-obrazek2.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(32) "/alt/var/lib/php/pngis/phpJdj6iT" ["error"]=> int(0) ["size"]=> int(6194) }

Notice: Array to string conversion in /alt/home/........php on line 111"

input jest taki: <input type="file" name="pliki[]" multiple="multiple"/> <br/><br/>


  1. if (isset($_POST['submit'])) {
  2. $pliki = $_FILES['pliki'];
  3. echo var_dump($pliki);
  4. if (isset($pliki['name'])){
  5.  
  6. if ($_FILES['pliki'] == 0) {
  7.  
  8. $target = UPLOADPATH . $pliki;
  9. for($i=0; $i<count($_FILES["pliki"]["name"]); $i++)
  10. {
  11. if (move_uploaded_file($_FILES['pliki']['name'], $target)) {
  12.  
  13. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  14.  
  15. if (!$dbc) {
  16. die('Nie można połączyć się z bazą danych: ' . mysql_error());
  17. }
  18.  
  19.  
  20.  
  21. $pliki = $_FILES["pliki"]["name"][$i];
  22. $query = "INSERT INTO pliki_od_administratora VALUES (0,NOW(),'administrator','$usr','$pliki')"
  23.  
  24. or die("Zapytanie do niepoprawne");
  25.  
  26. mysqli_query($dbc, $query);
  27.  
  28.  
  29. echo '<p class="er">Pliki zostały wysłane</p>';
  30.  
  31. mysqli_close($dbc);
  32.  
  33. }
  34.  
  35.  
  36. }
  37.  
  38. }
  39.  
  40. }
  41.  
  42. else {
  43. echo '<p class="er">Wystąpił problem przy przesyłaniu plików.</p>';
  44. }
  45. }
  46.  
  47.  
  48.  
  49.  
  50.  
  51. ?>
  52.  
  53.  
  54. <div class="zaplecze_inputy_na_czarno">
  55. <p>Wyślij plik do użytkownika <?php echo $usr; ?> 2/2</p>
  56. </div>
  57.  
  58.  
  59. <div class="spoz_menu_logowania_usuwanie">
  60. <p>Trwa zmiana sposobu wysyłania plików...proszę nie korzystać z formularza...9/04/2018</p>
  61.  
  62. <div class="spoz_zaloguj">
  63. <div id="dodawanie-plikow">
  64. <form enctype="multipart/form-data" method="post" action="">
  65. <input type="file" name="pliki[]" multiple="multiple"/> <br/><br/>
  66. <input type="submit" value="Wyślij pliki" name="submit" />



Efekt:

informacja:

array(5) { ["name"]=> array(2) { [0]=> string(16) "test-obrazek.jpg" [1]=> string(17) "test-obrazek2.jpg" } ["type"]=> array(2) { [0]=> string(10) "image/jpeg" [1]=> string(10) "image/jpeg" } ["tmp_name"]=> array(2) { [0]=> string(32) "/alt/var/lib/php/pngis/phpXDY1it" [1]=> string(32) "/alt/var/lib/php/pngis/phpFFM8Jq" } ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ["size"]=> array(2) { [0]=> int(12765) [1]=> int(6194) } }
leonpro778
Cytat(ob1 @ 12.04.2018, 21:51:41 ) *
problem dotyczy tego $target = UPLOADPATH . $pliki;


Przecież wcześniej Ci pisałem:

$pliki -> Array
$pliki['name'] -> string
ob1
Zapytam inaczej, co zostawić, co wyrzucić i w czym jest problem ? Dlaczego foreach ma być wpisane przy sprawdzaniu przesłanego pliku ? Zrobić foreach i sprawdzić echo czy wyświetla ?



jak wstawiłem zamiast tego fragmentu o którym wspomniałeś fragment poniższy

$filetmp = $_FILES["pliki"]["tmp_name"][$i];
$filename = $_FILES["pliki"]["name"][$i];
$filepath = "pliki/".$filename;

move_uploaded_file($filetmp,$filepath);

to i tak się nic nie działo. Wić co muszę zrobić?

Muszę tablicę wrzucić do bazy. Jak to zrobić? Co ma sprawdzić i co chociaż teoretycznie poprawić?

leonpro778
Dobra, zacznijmy od podstaw.

Najpierw Twój formularz:
  1. <form enctype="multipart/form-data" method="post" action="">
  2. <input type="file" name="pliki" multiple="multiple" /> <br/><br/>
  3. <input type="submit" value="Wyślij pliki" name="submit" />
  4. </form>


To spowoduje, że w $_FILES znajdzie się plik, który wybierzesz. Kolejna sprawa z [] w name. Ponieważ chcesz KILKA plików wysłać musisz przesłać je do TABLICY dlatego nasz formularz będzie wyglądał tak:
  1. <form enctype="multipart/form-data" method="post" action="">
  2. <input type="file" name="pliki[]" multiple="multiple" /> <br/><br/>
  3. <input type="submit" value="Wyślij pliki" name="submit" />
  4. </form>


Z html to w zasadzie wszystko. Teraz idźmy do PHP.

  1. $pliki = $_FILES['pliki']; // to nasza tablica z przesłanymi przez POST plikami
  2. var_dumb($pliki); // tutaj wyświetli Ci się co nasza tablica pliki zawiera
  3. echo '<br /><br />'; // to jest tylko po to, żeby się nam tekst nie zlewał
  4. if (isset($pliki)){ // to jest sprawdzenie czy tablica $pliki istnieje
  5. /*
  6.   * tutaj będzie reszta kodu
  7.   */
  8. }
  9. else {
  10. echo 'wystąpił problem przy wysyłaniu plików';
  11. }


Cytat(ob1 @ 12.04.2018, 22:14:07 ) *
$filetmp = $_FILES["pliki"]["tmp_name"][$i];
$filename = $_FILES["pliki"]["name"][$i];
$filepath = "pliki/".$filename;


Właśnie o to chodzi ale czytaj dalej. Teraz robimy kod, który będzie wykonywany po pierwszym sprawdzeniu:

  1. if (!empty($usr) && !empty($pliki)) {
  2. // jakiś tam kod
  3. }


To zmień w taki sposób:
  1. if (!empty($usr)) {
  2. // jakiś kod
  3. }
  4. else {
  5. echo 'Użytkownik nie został podany...';
  6. }


Tablicy $pliki nie musisz już sprawdzać. Sprawdzałeś to w poprzednim IF'ie. Oczywiście na początku do zmiennej $usr dopisz jak tam coś masz smile.gif


Cytat(ob1 @ 12.04.2018, 22:23:42 ) *
Wszystko jasne, tylko że ta "reszt kodu" nie działa i tam są problemy

Spokojnie, Teraz kolejna pętla. Właśnie z move_upload_file().
ob1
$usr leci z get. Sprawdzanie czy został ustawiony już wyrzuciłem, aby kod był czytelniejszy i to sprawdzenie nie jest konieczne. Nie zmienia to faktu, że nadal nie przesyła plików

  1. $usr=$_GET['username'];
  2.  
  3. if (isset($_POST['submit'])) {
  4. $pliki = $_FILES['pliki'];
  5. var_dump($pliki);
  6. if (isset($pliki)){
  7.  
  8.  
  9. if ($_FILES['pliki'] == 0) {
  10.  
  11. $target = UPLOADPATH . $pliki;
  12. for($i=0; $i<count($_FILES["pliki"]["name"]); $i++)
  13. {
  14. if (move_uploaded_file($_FILES['pliki']['name'], $target)) {
  15.  
  16.  
  17.  
  18. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  19.  
  20. if (!$dbc) {
  21. die('Nie można połączyć się z bazą danych: ' . mysql_error());
  22. }
  23.  
  24.  
  25.  
  26. $pliki = $_FILES["pliki"]["name"][$i];
  27. $query = "INSERT INTO pliki_od_administratora VALUES (0,NOW(),'administrator','$usr','$pliki')"
  28.  
  29. or die("Zapytanie do niepoprawne");
  30.  
  31. mysqli_query($dbc, $query);
  32.  
  33.  
  34. echo '<p class="er">Pliki zostały wysłane</p>';
  35.  
  36. mysqli_close($dbc);
  37.  
  38. }
  39.  
  40.  
  41. }
  42.  
  43. }
  44.  
  45. }
  46.  
  47. else {
  48. echo '<p class="er">Wystąpił problem przy przesyłaniu plików.</p>';
  49. }
  50. }
  51.  
  52.  
  53.  
  54.  
  55.  
  56. ?>
  57.  
  58.  
  59. <div class="zaplecze_inputy_na_czarno">
  60. <p>Wyślij plik do użytkownika <?php echo $usr; ?> 2/2</p>
  61. </div>
  62.  
  63.  
  64. <div class="spoz_menu_logowania_usuwanie">
  65.  
  66.  
  67. <div class="spoz_zaloguj">
  68. <div id="dodawanie-plikow">
  69. <form enctype="multipart/form-data" method="post" action="">
  70. <input type="file" name="pliki[]" multiple="multiple"/> <br/><br/>
  71. <input type="submit" value="Wyślij pliki" name="submit" />
  72. </form>
  73. </div>
leonpro778
Cytat(ob1 @ 12.04.2018, 22:28:38 ) *
if ($_FILES['pliki'] == 0)


Co to za linia i po co?
ob1
Po usunięciu:

Notice: Array to string conversion in /alt/home/...usr.php on line 112

Warning: move_uploaded_file() expects parameter 1 to be string, array given in /alt/home/...usr.php on line 115

Warning: move_uploaded_file() expects parameter 1 to be string, array given in /alt/home/....usr.php on line 115


112 linia to: $target = UPLOADPATH . $pliki;

115 linia to: if (move_uploaded_file($_FILES['pliki']['name'], $target))

Wrzucanie pliku zamienić na całość:

$filetmp = $_FILES["pliki"]["tmp_name"][$i];
$filename = $_FILES["pliki"]["name"][$i];
$filepath = "pliki/".$filename;
.... ?

leonpro778
Nie strzelaj na oślep usuwając jakieś linie. Tą linię zamieniamy na:

  1. foreach($pliki['error'] as $key => $error) {
  2. // kolejna część kodu
  3. }


Ponieważ załatwi nam to od razu sprawę błędów przy przesyłaniu plików a dwa rozpocznie pętlę w której będzie zapytanie SQL (pominiemy też pętlę FOR).

P.s. Wklej mi teraz kod, jaki Ci wyszedł smile.gif
ob1
Po wrzuceniu $target = UPLOADPATH . $pliki; do pętli for, komunikaty znikają, ale i tak pliki nie dodają się do bazy
  1. $usr=$_GET['username'];
  2.  
  3. if (isset($_POST['submit'])) {
  4. $pliki = $_FILES['pliki'];
  5. var_dump($pliki);
  6. if (isset($pliki)){
  7.  
  8.  
  9. if ($_FILES['pliki'] == 0) {
  10.  
  11.  
  12. for($i=0; $i<count($_FILES["pliki"]["name"]); $i++)
  13. {
  14. $target = UPLOADPATH . $pliki;
  15. if (move_uploaded_file($_FILES['pliki']['name'], $target)) {
  16.  
  17.  
  18.  
  19. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  20.  
  21. if (!$dbc) {
  22. die('Nie można połączyć się z bazą danych: ' . mysql_error());
  23. }
  24.  
  25.  
  26.  
  27. $pliki = $_FILES["pliki"]["name"][$i];
  28. $query = "INSERT INTO pliki_od_administratora VALUES (0,NOW(),'administrator','$usr','$pliki')"
  29.  
  30. or die("Zapytanie do niepoprawne");
  31.  
  32. mysqli_query($dbc, $query);
  33.  
  34.  
  35. echo '<p class="er">Pliki zostały wysłane</p>';
  36.  
  37. mysqli_close($dbc);
  38.  
  39. }
  40.  
  41.  
  42. }
  43.  
  44. }
  45.  
  46. }
  47.  
  48. else {
  49. echo '<p class="er">Wystąpił problem przy przesyłaniu plików.</p>';
  50. }
  51. }
  52.  
  53.  


Zmieniłem linię, efekt:


Notice: Array to string conversion in /alt/home/...usr.php on line 115

Warning: move_uploaded_file() expects parameter 1 to be string, array given in /alt/home/...usr.php on line 116

Notice: Array to string conversion in /alt/home/....php on line 115

Warning: move_uploaded_file() expects parameter 1 to be string, array given in /alt/home/...usr.php on line 116

Notice: Array to string conversion in /alt/home/...usr.php on line 115

Warning: move_uploaded_file() expects parameter 1 to be string, array given in /alt/home/...usr.php on line 116

Notice: Array to string conversion in /alt/home/....usr.php on line 115

Warning: move_uploaded_file() expects parameter 1 to be string, array given in /alt/home/...usr.php on line 116






  1. if (isset($pliki)){
  2.  
  3.  
  4. foreach($pliki['error'] as $key => $error) {
  5.  
  6.  
  7. for($i=0; $i<count($_FILES["pliki"]["name"]); $i++)
  8. {
  9. $target = UPLOADPATH . $pliki;
  10. if (move_uploaded_file($_FILES['pliki']['name'], $target)) {
  11.  
  12.  
  13.  
  14. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  15.  
  16. if (!$dbc) {
  17. die('Nie można połączyć się z bazą danych: ' . mysql_error());
  18. }
  19.  
  20.  
  21.  
  22. $pliki = $_FILES["pliki"]["name"][$i];
  23. $query = "INSERT INTO pliki_od_administratora VALUES (0,NOW(),'administrator','$usr','$pliki')"
  24.  
  25. or die("Zapytanie do niepoprawne");
  26.  
  27. mysqli_query($dbc, $query);
  28.  
  29.  
  30. echo '<p class="er">Pliki zostały wysłane</p>';
  31.  
  32. mysqli_close($dbc);
  33.  
  34. }
  35.  
  36.  
  37. }
  38.  
  39. }
  40.  
  41. }
  42.  
  43. else {
  44. echo '<p class="er">Wystąpił problem przy przesyłaniu plików.</p>';
  45. }
  46. }
leonpro778
Ale Ci spieszno smile.gif Dalej masz zły kod. Kod powinien wyglądać mniej więcej TAK:

  1. <?php
  2. $usr=$_GET['username'];
  3.  
  4. if (isset($_POST['submit'])) {
  5. $pliki = $_FILES['pliki'];
  6. var_dump($pliki);
  7. echo '<br /><br />';
  8. if (isset($pliki['name'])) {
  9. if (!empty($usr)) {
  10. foreach($pliki['error'] as $key => $error) {
  11. echo $error.'<br /><br />';
  12. }
  13. }
  14. else {
  15. echo 'Błąd użytkownika<br /><br />';
  16. }
  17. }
  18. else {
  19. echo '<p class="er">Wystąpił problem przy przesyłaniu plików.</p>';
  20. }
  21. }
  22. ?>


W tym kodzie powinny wyświetlić Ci się dwa zera. Mamy piękny spaghetti code biggrin.gif
ob1
Dalej spis treści błędów

  1. <?
  2. $usr=$_GET['username'];
  3. if (isset($_POST['submit'])) {
  4. $pliki = $_FILES['pliki'];
  5. var_dump($pliki);
  6. if (isset($pliki['name'])){
  7.  
  8. foreach($pliki['error'] as $key => $error) {
  9.  
  10.  
  11. for($i=0; $i<count($_FILES["pliki"]["name"]); $i++)
  12. {
  13. $target = UPLOADPATH . $pliki;
  14. if (move_uploaded_file($_FILES['pliki']['name'], $target)) {
  15.  
  16.  
  17. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  18.  
  19. if (!$dbc) {
  20. die('Nie można połączyć się z bazą danych: ' . mysql_error());
  21. }
  22.  
  23. $pliki = $_FILES["pliki"]["name"][$i];
  24. $query = "INSERT INTO pliki_od_administratora VALUES (0,NOW(),'administrator','$usr','$pliki')"
  25.  
  26. or die("Zapytanie do niepoprawne");
  27.  
  28. mysqli_query($dbc, $query);
  29.  
  30.  
  31. echo '<p class="er">Pliki zostały wysłane</p>';
  32.  
  33. mysqli_close($dbc);
  34.  
  35. }
  36.  
  37. }
  38.  
  39. }
  40. }
  41. else {
  42. echo '<p class="er">Wystąpił problem przy przesyłaniu plików.</p>';
  43. }
  44. }
  45.  
  46.  
  47. ?>


$usr nie jest pusty, to potwierdzam na 100%. jest zadeklarowany w zmiennej globalnej.

Ma być:

if (isset($pliki)){

czy

if (isset($pliki['name'])){ ?
leonpro778
Uparłeś się na tą funkcję FOR. Dobra, niech będzie z funkcją FOR:

  1. <?php
  2. $usr = $_GET['username'] questionmark.gif 'admin';
  3.  
  4. if (isset($_POST['submit'])) {
  5. $pliki = $_FILES['pliki'];
  6. var_dump($pliki);
  7. echo '<br /><br />';
  8. if (isset($pliki)) {
  9. if (!empty($usr)) {
  10. for($i = 0; $i<=(count($pliki['name'])-1); $i++)
  11. {
  12. if ($pliki['error'][$i] == 0) {
  13. echo $pliki['name'][$i].' przesłano prawidłowo<br />';
  14. // tutaj zaczynamy funkcję move_uploaded_files()
  15. }
  16. else {
  17. echo 'Błąd w przesyłanym pliku: '.$pliki['name'][$i].'<br />';
  18. }
  19. }
  20. }
  21. else {
  22. echo 'Błąd użytkownika<br /><br />';
  23. }
  24. }
  25. else {
  26. echo '<p class="er">Wystąpił problem przy przesyłaniu plików.</p>';
  27. }
  28. }
  29. ?>
ob1
Spróbowałem tak, wszystko się dodało, tylko dlaczego 4 razy a nie 2, skoro wysłałem dwa pliki ?


  1. <?
  2. $usr=$_GET['username'];
  3. if (isset($_POST['submit'])) {
  4. $pliki = $_FILES['pliki'];
  5. var_dump($pliki);
  6. if (isset($pliki['name'])){
  7.  
  8. foreach($pliki['error'] as $key => $error) {
  9.  
  10.  
  11. for($i=0; $i<count($_FILES["pliki"]["name"]); $i++)
  12. {
  13.  
  14. $filetmp = $_FILES["pliki"]["tmp_name"][$i];
  15. $filename = $_FILES["pliki"]["name"][$i];
  16. $filepath = "pliki/".$filename;
  17.  
  18. move_uploaded_file($filetmp,$filepath);
  19.  
  20.  
  21. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  22.  
  23. if (!$dbc) {
  24. die('Nie można połączyć się z bazą danych: ' . mysql_error());
  25. }
  26.  
  27. $pliki = $_FILES["pliki"]["name"][$i];
  28. $query = "INSERT INTO pliki_od_administratora VALUES (0,NOW(),'administrator','$usr','$pliki')"
  29.  
  30. or die("Zapytanie do niepoprawne");
  31.  
  32. mysqli_query($dbc, $query);
  33.  
  34.  
  35. echo '<p class="er">Pliki zostały wysłane</p>';
  36.  
  37. mysqli_close($dbc);
  38.  
  39.  
  40. }
  41.  
  42. }
  43. }
  44. else {
  45. echo '<p class="er">Wystąpił problem przy przesyłaniu plików.</p>';
  46. }
  47. }
  48.  
  49.  
  50. ?>
leonpro778
Cytat(ob1 @ 12.04.2018, 22:59:34 ) *
Spróbowałem tak, wszystko się dodało, tylko dlaczego 4 razy a nie 2, skoro wysłałem dwa pliki ?


  1. <?
  2. foreach($pliki['error'] as $key => $error)
  3. ?>


To jest teraz zbędne smile.gif Masz pętlę FOR. Foreach wykonuje się DWA razy i FOR wykonuje się DWA razy co daje nam CZTERY.
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.