Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tablica w tablicy...
Forum PHP.pl > Forum > Przedszkole
rkuch
Mam problema :-(
Stworzylem funkcje do pobierania danych z bazy MySql. Pobieram dane z kilku tabel, z kazdej tabeli oddzielnym zapytaniem. Wyniki sa tablicami i chcialbym je wszystkie przekazac za pomoca return $wynik; .
Probuje $wynik=array($zapyt1,$zapyt2,$zapyt3,$zapyt4);

$zapytn --> tablice.

Czy moge tak zrobic ? Nie chce mi dzialac... Czy ma znaczenie to, ze zapytania zwracaja rozna ilosc danych? Np. $zapyt1 zwraca 30 pol a $zapyt2 - 5 pol.
nospor
nie ma znaczenia ilość elementów w tablicy. oto kod który dziala:
  1. <?php
  2. $tab1[1]=1;
  3. $tab2[0]=0;
  4. $tab2[1]=1;
  5. $tab3=array($tab1,$tab2);
  6.  
  7. ?>


Pytanie, czy zapytanie zwraca ci tablicę. POkaż może kawalek skryptu
rkuch
Cytat(nospor @ 2005-04-13 12:17:08)
nie ma znaczenia ilość elementów w tablicy. oto kod który dziala:
  1. <?php
  2. $tab1[1]=1;
  3. $tab2[0]=0;
  4. $tab2[1]=1;
  5. $tab3=array($tab1,$tab2);
  6.  
  7. ?>


Pytanie, czy zapytanie zwraca ci tablicę. POkaż może kawalek skryptu

  1. <?php
  2.  
  3. function pobierz_dane()
  4. {
  5.  
  6. // Tu polaczenie z baza i selecty
  7.  
  8.  $wynik_1 = mysql_query($pobierz_1);
  9.  $wynik_2 = mysql_query($pobierz_2);
  10.  $wynik_3 = mysql_query($pobierz_3);
  11.  
  12. $wynik_1 = mysql_fetch_array($wynik_1);
  13. $wynik_2 = mysql_fetch_array($wynik_2);
  14. $wynik_3 = mysql_fetch_array($wynik_3);
  15.  
  16. $wynik = array($wynik_1, $wynik_2, $wynik_3);
  17.  
  18. return $wynik;
  19. }
  20. ?>


Funkcja wyglada mniej wiecej tak...
Wywoluje ja tak:
  1. <?php
  2. if ($z = pobierz_dane())
  3. {
  4. // jakies dzialanie
  5. }
  6. else echo 'Odczytanie niemozliwe';
  7. ?>


i robi od razu else
nospor
POdejrzyj jak wygląda $wynik_1,$wynik_2 i $wynik_3 po mysql_query i po mysql_fetch_array. Dopiero wtedy będzie można coś powiedzieć.

A tak na marginesie. Zdajesz sobie sprawę że mysql_fetch_array pobiera tylko jeden wiersz a nie wszystkie?
slepy
Wydaje mi się iż Ty zwracasz:
  1. <?php
  2.  
  3. return $wynik;
  4.  
  5. ?>


Gdzie $wynik to array. jak chcesz porównać zmienną do arraya?
daj return $wynik i wyświetl go sobie... Ciekawe co Ci wyjdzie..;]
nospor
Cytat
jak chcesz porównać zmienną do arraya?

On nie porównuje, tylko przypisuje. To różnica
jedrus4
Cytat(rkuch @ 2005-04-13 12:41:44)
  1. <?php
  2.  
  3. $wynik_1 = mysql_fetch_array($wynik_1);
  4. $wynik_2 = mysql_fetch_array($wynik_2);
  5. $wynik_3 = mysql_fetch_array($wynik_3);
  6.  
  7. ?>

jak dla mnie to blad tkwi tutaj...
sprobuj tak:
  1. <?php
  2.  
  3.  
  4. // tutaj to co miales wczesniej do pobierania wynikow z bazy ale bez
  5. // mysql_fetch_array() !!!
  6.  
  7. for($i=0; $i< mysql_num_rows($wynik_1); $i++)
  8. {
  9.  $tab_1[] = mysql_fetch_array($wynik_1);
  10. }
  11.  
  12. for($i=0; $i< mysql_num_rows($wynik_2); $i++)
  13. {
  14.  $tab_2[] = mysql_fetch_array($wynik_2);
  15. }
  16.  
  17. for($i=0; $i< mysql_num_rows($wynik_3); $i++)
  18. {
  19.  $tab_3[] = mysql_fetch_array($wynik_3);
  20. }
  21.  
  22. $wynik = array($tab_1, $tab_2, $tab_3);
  23.  
  24. ?>
rkuch
Cytat(jedrus4 @ 2005-04-13 14:00:33)
  1. <?php
  2.  
  3.  
  4. // tutaj to co miales wczesniej do pobierania wynikow z bazy ale bez
  5. // mysql_fetch_array() !!!
  6.  
  7. for($i=0; $i< mysql_num_rows($wynik_1); $i++)
  8. {
  9.  $tab_1[] = mysql_fetch_array($wynik_1);
  10. }
  11.  
  12. for($i=0; $i< mysql_num_rows($wynik_2); $i++)
  13. {
  14.  $tab_2[] = mysql_fetch_array($wynik_2);
  15. }
  16.  
  17. for($i=0; $i< mysql_num_rows($wynik_3); $i++)
  18. {
  19.  $tab_3[] = mysql_fetch_array($wynik_3);
  20. }
  21.  
  22. $wynik = array($tab_1, $tab_2, $tab_3);
  23.  
  24. ?>

Spoko, dziala, tzn. pobiera i przekazuje funkcja...
Ale teraz mam problem wyciagnac z tablicy do checkboxow odpowiednie wartosci.
Mam 5 checkboxow i chce zeby sie zaznaczaly te pobrane z bazy, ale do tablicy laduja sie po kolei, czyli jak ostatniego zaznacze i potem on pobierany jest z bazy to jest pod indexem [0] czyli pierwszym i zaznacza mi pierwszego checkboxa.
value checkboxa robie dynamicznie i ma postac
  1. <?php
  2. $tabela[1][0] 
  3. ?>
dla pierwszego i dziala tak jak opisalem wyzej. Wiem, ze powinienem zmienic wartosc drugiego indexu, ale na jaki ?
jedrus4
Cytat(rkuch @ 2005-04-14 08:43:13)
Cytat(rkuch @ 2005-04-14 08:43:13)

Ale teraz mam problem wyciagnac z tablicy do checkboxow odpowiednie wartosci.

Wiesz co.. nie bardzo rozumiem Twoj problem. Moze opisz troszke bardziej strukture wynikow, przedstaw troche kodu.. bedzie latwiej..
nospor
przy zazanczaniu sprawdzaj, czy jest to ten sam chceckbox z bazy co go wyswietlasz. Zakladając, że w bazie checkboxow trzymasz value:
  1. <?php
  2.  
  3. echo &#092;"<input type='checkbox' value='2' .... \".(in_array(2,$tablicacheck)?'checked':'').' >';
  4.  
  5. ?>
rkuch
Tylko ja mam chyba problem z tym
  1. value=<? $tablica[1][0] ?>

1 odnosi sie do zawodow, a zero do pierwszego pobranego z bazy zawodu, ktory nie musi byc tym pierwszym w formularzu... Nie wiem, czy rozumiesz mnie, mam formularz w html'u, a w nim value w zaleznosci czy dodaje czy edytuje i zamiast tego [0] musze jakies odwolanie do elementu, ze to akurat ten a nie inny zawod...
Rece mi opadaja... :-(
nospor
NO tak. W $tablica[1] masz wszystkie zawody. POwiedzmy że w $tablica2 masz zawody danego gostka:
  1. <?php
  2.  
  3. foreach ($tablica[1] as $zawod)
  4. {
  5. echo &#092;"<input type='checkbox' value='$zawod' name='jakies' \".(in_array($zawod,$tablica2)?'checked':'').' >';
  6. }
  7.  
  8. ?>

Kapisz?
rkuch
Zaznaczam 2 z 5-ciu checkboxow i wprowadzam do bazy z gostkiem... Z Twojego foreach'a wydrukuje tylko 2 checkboxy, a gdybym chcial zmienic i jednego z nich odznaczyc a zaznaczyc jakies, ktorych wczesniej nie zaznaczalem ? Przy czytaniu z bazy chce wydrukowac rowniez niezaznaczone checkboxy...
Sorki, ze tuman jestem, ale tak jakos... ;-(

Pozdrawiam i zycze cierpliwosci ;-)
nospor
Oj, my się chyba nie rozumiemy sad.gif .
Spróbuję więc tak:

$tablica1 - tablicy wszystkich dostępnych zawodów (wszystkie checkboxy)
$tablica2 - tablica zawodów danego gostka (checkboxy, które należy zaznaczyć)
  1. <?php
  2.  
  3. foreach ($tablica1 as $zawod)
  4. {
  5. echo &#092;"<input type='checkbox' value='$zawod' name='jakies' \".(in_array($zawod,$tablica2)?'checked':'').' >';
  6. }
  7.  
  8. ?>


Teraz sobie podstaw za $tablica1 tablicę, w której masz wszystkie zawody, a za $tablica2 zawody, które ma gostek.
Proszę, zastanów się nad tym głebiej biggrin.gif
rkuch
Z funkcji pobierajacej dane mam:
  1. <?php
  2.  
  3. $wynik = array($osoba, $zawody_osoby);
  4. return $wynik;
  5.  
  6. ?>

W formularzu mam:
  1. <?php
  2.  
  3. $osoba = $wynik;
  4. $i=0;
  5. foreach ($zawody as $zawod)
  6. {
  7. echo&#092;"<td><input type=checkbox VALUE=\"\".($edycja?$osoba[1][$i][0]:$zawod).\"\" name=zawod[$i] \".(in_array($osoba[1][$i][0],$zawody)?'checked':'').\">\".$zawod.\"</td>\";
  8. $i++;
  9. }
  10.  
  11. ?>

W ten sposob mi zaznacza checkboxy, ale jak zaznacze tylko ostatniego, to zaznaczy potem pierwszego... Wersja z:
  1. <?php
  2. (in_array($zawod,$osoba[1][$i][0])?'checked':'')
  3. ?>

nie dziala (nie zaznacza)...
Kazdy zawod osoby mam:
$osoba[1][0][0] - pierwszy zaznaczony zawod
$osoba[1][1][0] - drugi zaznaczony.
nospor
Oj ja już z tobą nie wytrzymuję biggrin.gif .Twoja struktura przechowywania danych jest ciut dziwna i zamotana. Zrób jak mówię.
$tablica1 - tablicy wszystkich dostępnych zawodów (wszystkie checkboxy)
$tablica2 - tablica zawodów danego gostka (checkboxy, które należy zaznaczyć)

zapomnij o swojej strukturze (albo zmien ją do tych dwóch tablic) i będzie dzialać.

no i powiedz mi jeszcze czemu ty value checkboxa warunkujesz? Przecież to bez różnicy czy to jest edycja, czy też nowy wpis. Wyswietlasz wszystkie zawody. Warunkować masz tylko ich zaznaczanie
rkuch
Temat uwazam za zamkniety tongue.gif

Dzieki za cierpliwosc i dobre rady :-) for You nospor
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.