Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript][PHP]Przekazanie tablicy z JQuery do PHP
KRISPI
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.11.2011

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


Witam mam problem z przekazaniem tablicy do kodu PHP. Napiasałem skrypt JQUERY:
  1. <script type="text/javascript">
  2.  
  3.  
  4. $(document).ready(function(){
  5. $("td.komorka").click(function() {
  6. if($(this).css('background-color')== 'white')
  7. {
  8. $(this).css('background-color','red');
  9. }
  10. else if($(this).css('background-color')== 'red')
  11. {
  12. $(this).css('background-color','orange');
  13. }
  14. else
  15. {
  16. $(this).css('background-color','white');
  17.  
  18. }
  19. })
  20. $('td.komorka').each(function(){
  21. var tablica = [];
  22. var id,nr;
  23. if($(this).css('background-color')== 'white')
  24. {
  25. id=$(this).attr('id');
  26. nr=parseInt(id);
  27. tablica[nr]== 0;
  28. }
  29. else if($(this).css('background-color')== 'red')
  30. {
  31. id=$(this).attr('id');
  32. nr=parseInt(id);
  33. tablica[nr]== 1;
  34.  
  35. }
  36. else if($(this).css('background-color')== 'orange')
  37. {
  38. id=$(this).attr('id');
  39. nr=parseInt(id);
  40. tablica[nr]== 2;
  41.  
  42. }
  43.  
  44. $.post('rezultat.php',{tab:tablica},function(data){})
  45.  
  46. )
  47.  
  48. })
  49. });
  50.  

I teraz chciałbym odebrać zmienną tablica[] w PHP.Robię to w ten sposób ale nie działa:
  1. $tab=$_POST['tab[]'];
  2. for($i=0;$i<230;$i++)
  3. {
  4. echo "$tab[i]";
  5. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


A czy to tak trudno sprawdzić?
  1. echo '<pre>';
  2. print_r($_POST);

I zobaczysz, gdzie co masz.
Go to the top of the page
+Quote Post
KRISPI
post
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.11.2011

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


Cytat(mortus @ 9.01.2012, 11:44:06 ) *
A czy to tak trudno sprawdzić?
  1. echo '<pre>';
  2. print_r($_POST);

I zobaczysz, gdzie co masz.

Nie odnajduje zmiennej tab zamiast tego wywala mi komunikat:
Notice: Undefined index: tab in C:\xampp\htdocs\php\rezultat.php on line 139
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(KRISPI @ 9.01.2012, 11:52:12 ) *
Nie odnajduje zmiennej tab zamiast tego wywala mi komunikat:
Notice: Undefined index: tab in C:\xampp\htdocs\php\rezultat.php on line 139

A czy ja gdzieś wpisywałem nazwę indeksu w tablicy $_POST? Zobacz całą tablicę $_POST (kod podałem wyżej).
Go to the top of the page
+Quote Post
KRISPI
post
Post #5





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.11.2011

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


Cytat(mortus @ 9.01.2012, 11:58:33 ) *
A czy ja gdzieś wpisywałem nazwę indeksu w tablicy $_POST? Zobacz całą tablicę $_POST (kod podałem wyżej).

Jedyne co wyświetla to:
Array
(
[miesiac] => styczeń
[submit] => Dodaj
)
Naprawdę jestem początkującym i niewiele mi to mówi
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Popraw skrypt jQuery, bo zdaje się, że nie tak (np. tablica[nr]== 2;) ma być. Jeśli wszystko będzie po stronie JS dobrze, to w pliku PHP, JS-ową tablicę znajdziesz w $_POST['tab'].

Swoją drogą nie pisałem wcześniej o bezpośrednim wywołaniu skryptu rezultat.php, a o wywołaniu go właśnie poprzez jQuery. Radzę zainstalować Firebug-a i włączyć zakładkę 'Sieć'. Ułatwi Ci to pracę ze wszystkimi AJAX-owymi żądaniami.
Go to the top of the page
+Quote Post
XP'ek
post
Post #7





Grupa: Zarejestrowani
Postów: 263
Pomógł: 9
Dołączył: 3.05.2009
Skąd: Wroc

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


  1. $tab=$_POST['tab[]'];


nie powinno być
  1. $tab = $_POST['tab'];
(IMG:style_emoticons/default/questionmark.gif)

Ten post edytował XP'ek 9.01.2012, 15:34:20
Go to the top of the page
+Quote Post
KRISPI
post
Post #8





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.11.2011

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


Cytat(XP'ek @ 9.01.2012, 15:33:26 ) *
  1. $tab=$_POST['tab[]'];


nie powinno być
  1. $tab = $_POST['tab'];
(IMG:style_emoticons/default/questionmark.gif)

Zmieniłem ale też nie działa
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Ale czytaj dokładnie co ci ludzie piszą...

zwrócono ci uwagę na: tablica[nr]== 2
To jest porównanie. Jak chcesz coś przypisać to ma byc:
tablica[nr]= 2
Go to the top of the page
+Quote Post
KRISPI
post
Post #10





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.11.2011

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


Cytat(nospor @ 9.01.2012, 16:20:33 ) *
Ale czytaj dokładnie co ci ludzie piszą...

zwrócono ci uwagę na: tablica[nr]== 2
To jest porównanie. Jak chcesz coś przypisać to ma byc:
tablica[nr]= 2

Dziękuję za uwagę ale ten błąd poprawiłem jakiś czas temu bez rezultatu.
Go to the top of the page
+Quote Post
vokiel
post
Post #11





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Akcje/działania wykonuje się w kilku przypadkach, poprzez wykonanie kodu w trakcie wczytywania, poprzez bezpośrednie wywołanie funkcji lub poprzez wywołanie funkcji na podstawie zdarzeń.

Prześledź swój kod krok po kroku i pomyśl co tam się dzieje.
1. Po załadowaniu się dokumentu uruchamia się Twój kod
2. $("td.komorka").click(function() {} dodaje obsługę na zdarzenie kliknięcia w komórkę tabeli z klasą .komorka
3. Dla każdej komórki tabeli z klasą .komorka wykonywany jest kolejny blok kodu. Czyli sprawdzenie koloru komórki, stworzenie tablicy z id komórki i wartością w przedziale 0-2, następnie dla każdej(!) komórki wykonywane jest zapytanie POST.
4. Koniec

Teraz pomyśl co chciałeś osiągnąć. Bo Twój kod wysyła do serwera stan początkowy, ten po załadowaniu się strony. Klikanie po komórkach nic nie zmienia poza kolorem tła, zmiany wprowadzone w ten sposób nie trafiają na serwer. Nawet nie podejmuję już tu kwestii optymalności kodu, a jest co poprawiać...

Na początek, napisz co chcesz osiągnąć.
Go to the top of the page
+Quote Post
KRISPI
post
Post #12





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.11.2011

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


Cytat(vokiel @ 9.01.2012, 18:15:46 ) *
Akcje/działania wykonuje się w kilku przypadkach, poprzez wykonanie kodu w trakcie wczytywania, poprzez bezpośrednie wywołanie funkcji lub poprzez wywołanie funkcji na podstawie zdarzeń.

Prześledź swój kod krok po kroku i pomyśl co tam się dzieje.
1. Po załadowaniu się dokumentu uruchamia się Twój kod
2. $("td.komorka").click(function() {} dodaje obsługę na zdarzenie kliknięcia w komórkę tabeli z klasą .komorka
3. Dla każdej komórki tabeli z klasą .komorka wykonywany jest kolejny blok kodu. Czyli sprawdzenie koloru komórki, stworzenie tablicy z id komórki i wartością w przedziale 0-2, następnie dla każdej(!) komórki wykonywane jest zapytanie POST.
4. Koniec

Teraz pomyśl co chciałeś osiągnąć. Bo Twój kod wysyła do serwera stan początkowy, ten po załadowaniu się strony. Klikanie po komórkach nic nie zmienia poza kolorem tła, zmiany wprowadzone w ten sposób nie trafiają na serwer. Nawet nie podejmuję już tu kwestii optymalności kodu, a jest co poprawiać...

Na początek, napisz co chcesz osiągnąć.

Więc fakt nie wiem czy dobrze myślę ale gdybym umieścił zapytanie POST poza blokiem funkcji, a tablicę jako zmienną globalną to uzyskałbym efekt pojedyńczego wykonania zapytania POST?
A chciałem uzyskać efekt który pozwoliłby mi zapamiętanie stanów poszczególnych komórek, następnie w formie tablicy przekazanie go do php w celu odpowiedniego uaktualnienia tabeli mysql. Naprawdę nie umiem z tym ruszyć naprzód.

Cytat(vokiel @ 9.01.2012, 18:15:46 ) *
Akcje/działania wykonuje się w kilku przypadkach, poprzez wykonanie kodu w trakcie wczytywania, poprzez bezpośrednie wywołanie funkcji lub poprzez wywołanie funkcji na podstawie zdarzeń.

Prześledź swój kod krok po kroku i pomyśl co tam się dzieje.
1. Po załadowaniu się dokumentu uruchamia się Twój kod
2. $("td.komorka").click(function() {} dodaje obsługę na zdarzenie kliknięcia w komórkę tabeli z klasą .komorka
3. Dla każdej komórki tabeli z klasą .komorka wykonywany jest kolejny blok kodu. Czyli sprawdzenie koloru komórki, stworzenie tablicy z id komórki i wartością w przedziale 0-2, następnie dla każdej(!) komórki wykonywane jest zapytanie POST.
4. Koniec

Teraz pomyśl co chciałeś osiągnąć. Bo Twój kod wysyła do serwera stan początkowy, ten po załadowaniu się strony. Klikanie po komórkach nic nie zmienia poza kolorem tła, zmiany wprowadzone w ten sposób nie trafiają na serwer. Nawet nie podejmuję już tu kwestii optymalności kodu, a jest co poprawiać...

Na początek, napisz co chcesz osiągnąć.

Więc fakt nie wiem czy dobrze myślę ale gdybym umieścił zapytanie POST poza blokiem funkcji, a tablicę jako zmienną globalną to uzyskałbym efekt pojedyńczego wykonania zapytania POST?
A chciałem uzyskać efekt który pozwoliłby mi zapamiętanie stanów poszczególnych komórek, następnie w formie tablicy przekazanie go do php w celu odpowiedniego uaktualnienia tabeli mysql. Naprawdę nie umiem z tym ruszyć naprzód.
Go to the top of the page
+Quote Post
vokiel
post
Post #13





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


I tak i nie :-)

Jeśli chcesz wysłać tablicę pól raz - zamiast tyle razy ile masz komórek - to tak, poza pętlą.
Jeśli chcesz przekazać aktualny stan pól, to musisz wybrać kiedy to ma nastąpić, czy po zmianie jakiegokolwiek pola, czy po kliknięciu na przycisk, czy po jakimś innym zdarzeniu na stronie.

Jak już będziesz wiedział kiedy masz to zrobić, to napisanie kodu sprowadza się do:
1. Funkcja pobierająca aktualne stany komórek
2. Funkcja zmieniająca stany po kliknięciu
3. Funkcja odpalana po wybranym zdarzeniu, która wywoła tą pierwszą i zdobyte stany przekaże do php
Go to the top of the page
+Quote Post
KRISPI
post
Post #14





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.11.2011

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


Cytat(vokiel @ 9.01.2012, 19:59:42 ) *
I tak i nie :-)

Jeśli chcesz wysłać tablicę pól raz - zamiast tyle razy ile masz komórek - to tak, poza pętlą.
Jeśli chcesz przekazać aktualny stan pól, to musisz wybrać kiedy to ma nastąpić, czy po zmianie jakiegokolwiek pola, czy po kliknięciu na przycisk, czy po jakimś innym zdarzeniu na stronie.

Jak już będziesz wiedział kiedy masz to zrobić, to napisanie kodu sprowadza się do:
1. Funkcja pobierająca aktualne stany komórek
2. Funkcja zmieniająca stany po kliknięciu
3. Funkcja odpalana po wybranym zdarzeniu, która wywoła tą pierwszą i zdobyte stany przekaże do php


Wiem że jestem męczący, ale ciągle nie potrafię przez to przebrnąć. Nie rozumiem mój kod wygląda teraz tak:
  1. $(document).ready(function(){
  2. var tablica = [];
  3. var id,nr;
  4. function pobierz()
  5. {
  6. $('td.komorka').each(function(){
  7.  
  8. if($(this).css('background-color')== 'white')
  9. {
  10. id=$(this).attr('id');
  11. nr=parseInt(id);
  12. tablica[nr]= 0;
  13. }
  14. else if($(this).css('background-color')== 'red')
  15. {
  16. id=$(this).attr('id');
  17. nr=parseInt(id);
  18. tablica[nr]= 1;
  19.  
  20. }
  21. else if($(this).css('background-color')== 'orange')
  22. {
  23. id=$(this).attr('id');
  24. nr=parseInt(id);
  25. tablica[nr]=2;
  26.  
  27. }
  28. });
  29. }
  30.  
  31.  
  32. $("td.komorka").click(function() {
  33. if($(this).css('background-color')== 'white')
  34. {
  35. $(this).css('background-color','red');
  36. id=$(this).attr('id');
  37. nr=parseInt(id);
  38. tablica[nr]= 1;
  39.  
  40. }
  41. else if($(this).css('background-color')== 'red')
  42. {
  43. $(this).css('background-color','orange');
  44. id=$(this).attr('id');
  45. nr=parseInt(id);
  46. tablica[nr]=2;
  47. }
  48. else
  49. {
  50. $(this).css('background-color','white');
  51. id=$(this).attr('id');
  52. nr=parseInt(id);
  53. tablica[nr]= 0;
  54.  
  55. }
  56. });
  57.  
  58. $("#zmiana").click(function() {
  59. pobierz();
  60.  
  61. $.post('rezultat.php',{tab:tablica},function(data){});
  62.  
  63.  
  64. });
  65.  
  66. });
  67.  

Dodałem zdażenie poprzedzające przesłanie tablicy oraz zmianę stanu po kliknięciu komórki tak jak sugerowałeś. Wiem kod jest strasznie rozległy ale chodzi mi narazie o sam rezultat. Nic się nie dzieje. Pozatym kiedy wczytuje się strona już na wstępie otrzymuję błąd w kodzie php że nie rozpoznaje indexu tab.
Nie wiem czy to problem że przesyłam zmienną do tego samego pliku bo kod JQUERY mam wtym samym co PHP?
Go to the top of the page
+Quote Post
#luq
post
Post #15





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Generalnie:

[JAVASCRIPT] pobierz, plaintext
  1. $.ajax({
  2. type: 'POST',
  3. url: 'example.php',
  4. data: {
  5. foo: ['ala ma kota']
  6. },
  7. dataType: 'json',
  8. onSuccess: function(data){
  9. console.log(data);
  10. }
  11. })
[JAVASCRIPT] pobierz, plaintext


  1. echo $_POST['foo'][0];


Powinno działać, więc zrób analogicznie.
Go to the top of the page
+Quote Post
KRISPI
post
Post #16





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.11.2011

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


Cytat(#luq @ 18.01.2012, 14:13:05 ) *
Generalnie:

[JAVASCRIPT] pobierz, plaintext
  1. $.ajax({
  2. type: 'POST',
  3. url: 'example.php',
  4. data: {
  5. foo: ['ala ma kota']
  6. },
  7. dataType: 'json',
  8. onSuccess: function(data){
  9. console.log(data);
  10. }
  11. })
[JAVASCRIPT] pobierz, plaintext


  1. echo $_POST['foo'][0];


Powinno działać, więc zrób analogicznie.

Zrobiłem analogicznie:
[JAVASCRIPT] pobierz, plaintext
  1. $("#zmiana").click(function() {
  2. pobierz();
  3. $.ajax({
  4. type: 'POST',
  5. url: 'index.php',
  6. data: { foo: ['ala ma kota'] },
  7. dataType: 'json',
  8. onSuccess: function(data){ console.log(data); }
  9. })
  10.  
  11. });
  12.  
[JAVASCRIPT] pobierz, plaintext

Odebrałem:
  1. <?php
  2. echo '<pre>';
  3. print_r($_POST);
  4. echo $_POST['foo'][0];
  5.  
  6. ?>

I dostałem komunikat:

Array
(
[submit] => Dodaj
)


Notice: Undefined index: foo in C:\xampp\htdocs\php\index.php on line 19

naprawdę nie wiem?(IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif) ?
Go to the top of the page
+Quote Post
mortus
post
Post #17





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Przecież to ma być wysyłane asynchronicznie z pomocą AJAX, a Ty w tej chwili wysyłasz to normalnie tzn. po kliknięciu w przycisk przechodzisz do pliku/skryptu PHP. Jeśli koniecznie musisz użyć przycisku submit, do wykonania akcji, to spraw, żeby strona się nie przeładowywała. Na końcu skryptu obsługującego zdarzenie onclick dodaj:
[JAVASCRIPT] pobierz, plaintext
  1. return false;
[JAVASCRIPT] pobierz, plaintext

Jeśli nie rozumiesz "ideologii" AJAX-a, to wróć do podstaw - Google.
Pierwsza znaleziona strona doskonale się nadaje na dobry początek.

EDIT: Twoim problemem nie jest przekazywanie tablicy, a przekazanie czegokolwiek. Po prostu nie wiesz o co w ogóle chodzi.

Ten post edytował mortus 18.01.2012, 17:08:45
Go to the top of the page
+Quote Post
KRISPI
post
Post #18





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 22.11.2011

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


Cytat(mortus @ 18.01.2012, 17:06:54 ) *
Przecież to ma być wysyłane asynchronicznie z pomocą AJAX, a Ty w tej chwili wysyłasz to normalnie tzn. po kliknięciu w przycisk przechodzisz do pliku/skryptu PHP. Jeśli koniecznie musisz użyć przycisku submit, do wykonania akcji, to spraw, żeby strona się nie przeładowywała. Na końcu skryptu obsługującego zdarzenie onclick dodaj:
[JAVASCRIPT] pobierz, plaintext
  1. return false;
[JAVASCRIPT] pobierz, plaintext

Jeśli nie rozumiesz "ideologii" AJAX-a, to wróć do podstaw - Google.
Pierwsza znaleziona strona doskonale się nadaje na dobry początek.

EDIT: Twoim problemem nie jest przekazywanie tablicy, a przekazanie czegokolwiek. Po prostu nie wiesz o co w ogóle chodzi.

Masz rację dopiero się uczę. Ale twój post pomógł. W firebug widzę obsłużenie żądania AJAX.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 7.10.2025 - 13:29