Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak to najlepiej zrobić? Lista rozwijana/technologia
Forum PHP.pl > Forum > Przedszkole
paffcio
Witam, jestem początkującym programistą i mam pewien problem. Nie wiem czym się zainteresować, bo być może nie rozumiem czego szukać, proszę o pomoc.

Pytanie: jak zrobić listę rozwijaną bez przeładowania strony nie znając ilości dzieci w głąb, żeby program sam wiedział gdzie postawić plus przy kimś kogo można rozwinąć, a minus jeśli jest ostatni. Poniżej przedstawiam mój kod wykonujący to zadanie ale tylko pokazujący pierwsze dzieci danego id_osoby. Czy powinienem napisać funkcję w jakiejś technologii do zarządzania plusem? Jeśli tak to skąd mam pobierać dane, że akurat "tego" plusa rozwijam? Czy da się to w ogóle zrobić?

  1. <?php
  2.  
  3. $query = mysql_query('SELECT * FROM drzewo');
  4. $i=0;
  5. $a = array();
  6. while($res = mysql_fetch_row($query))
  7. {
  8. $a[$i++]=$res;
  9. }
  10. //print_r($a);
  11. $m=$_SESSION['id_osoby'];
  12. $ile=0;
  13. $numer = 0;
  14. $poziom=0;$n=0;
  15. $x[$numer]=array();
  16. $p[$poziom]=array();
  17. $x[$numer] = $m;
  18. //echo $x[$nymer][$poziom];
  19. //$p[$poziom]=array();
  20. //$n=1;
  21. //$p[$poziom]=$n;
  22. //print_r ($x[$numer]);
  23. //while ($x[$numer]!=0)
  24. //{
  25. // $n=$n+1;
  26. function sprawdz(){
  27. $query = mysql_query('SELECT * FROM drzewo');
  28. $i=0;
  29. $a = array();
  30. while($res = mysql_fetch_row($query))
  31. {
  32. $a[$i++]=$res;
  33. }
  34. $m=$_SESSION['osoba'];
  35. $u=0;
  36. for($j=1; $j<=4;$j++)
  37. {
  38. if($a[$m-1][$j]!=0){
  39. $u++;
  40. //echo $u;
  41. }
  42. }$_SESSION['u']=$u;
  43. }
  44. for($j=1; $j<=4;$j++)
  45. {
  46. if($a[$m-1][$j]!=0)
  47. {//echo $a[$m-1][$j];
  48. $osoba=$a[$m-1][$j];
  49. $_SESSION['osoba']=$osoba;
  50. //$osoba1=$a[$m-1][0];
  51. //$result1 = mysql_query("SELECT imie, nazwisko FROM user WHERE id_osoby='$osoba1'");
  52. $result = mysql_query("SELECT nazwisko FROM user WHERE id_osoby='$osoba'");
  53. mysql_query('SET NAMES \'utf8\'');
  54. $row = mysql_fetch_array($result);
  55. //$row1 = mysql_fetch_array($result1);
  56. if(mysql_num_rows($result)!=0)
  57. {
  58. echo "<tr>";
  59. sprawdz();
  60. if ($_SESSION['u']>0){
  61. echo '<td align="center">';
  62. echo '<input type="button" value="+" >';
  63. echo "</td>";
  64. echo '<td align="center">';
  65. echo ''.$row['nazwisko'].'';
  66. echo "</td>";
  67. echo '<br />';
  68. }
  69. else{
  70. echo '<td align="center">';
  71. echo '<input type="button" value="-" disabled="disabled">';
  72. echo "</td>";
  73. echo '<td align="center">';
  74. echo ''.$row['nazwisko'].'';
  75. echo "</td>";
  76. echo '<br />';
  77. }
  78. echo "</tr>";
  79. }else break;
  80. $x[]=$a[$m-1][$j];
  81. // $p[]=$n;
  82.  
  83. }
  84. else break;
  85. }
  86. $poziom++;
  87. $n=$p[$poziom];
  88. $numer++;
  89. $m=$x[$numer];
  90.  
  91. // }
  92.  
  93. ?>



Przykładowo tabela drzewo zawiera:

id_osoby 1 2 3 4 kolumny

1 || 2 3 4 5
2 || 6 7 0 0
3 || 0 0 0 0
4 || 0 0 0 0
5 || 0 0 0 0
6 || 0 0 0 0
7 || 0 0 0 0
....



Chodzi mi o listę rozwijaną tych pierwszych czterech osób, o ile istnieją. Czyli jeśli odpalam skrypt jako id_osoby==1, wtedy powinienem uzyskać jako wynik 4 numerki i jeden plus przy dwójce. I teraz klikając na dwójkę żeby dalej rozwijało o ile coś w bazie jest. Funkcja sprawdź, sprawdza czy znaleziona(badana) osoba ma pod sobą kogoś, jak ma to powinna wstawić "plus" jeżeli nikogo nie ma to minus. i Tam gdzie jest plus żeby się rozwijało dalej, oczywiście po naciśnięciu plusa, Tylko pierwszy poziom chcę aby był wykonywany po wejściu w skrypt. Wykomentowany kod zawiera pętlę, która pokazuje wszystkie zależności danego id_osoby, jednak tutaj chcę abym ja mógł rozwijać o ile chcę i który węzeł chcę. Nie szukam gotowych rozwiązań tylko proszę o powiedzmy nakierowanie z czego powinienem skorzystać, by zamierzony efekt uzyskać. Jestem samoukiem i uczę się języków głównie poprzez praktykę wymyślając sobie jakieś projekty i tutaj niestety stanąłem w miejscu. Oczywiście przedstawiony kod jest poprawny w działaniu, na pewno nie jest to boski styl pisania., jednak efekt pierwszego poziomu uzyskałem, gorzej z rozwinięciem kolejnego plusika:) Z góry dziękuję za pomoc

Pozdrawiam
Paweł
phpion
Proszę o poprawienie tematu wątku na lepiej opisujący problem. W przeciwnym razie wątek zostanie zamknięty.
paffcio
Dziękuję za pomoc, już sobie poradziłem:) można skasować
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.