Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem z pętlami i tablicami
MitS
post
Post #1





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

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


Witam!

Już mnie krew zalewa więc byłbym wdzięczny za pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Mój problem polega na tym że mam taką tablicę:

  1. <?php
  2. [ag] => Array (
  3. [rform] => Array (
  4. [0] => Array (
  5. [rooms] => Array (
  6. [0] => Array (
  7. [room_id] => 4
  8. [room_name] => Apartament1
  9. )
  10.  
  11. [1] => Array (
  12. [room_id] => 5
  13. [room_name] => Apartament2
  14. )
  15.  
  16. [2] => Array (
  17. [room_id] => 3
  18. [room_name] => Apartament3
  19. )
  20.  
  21. [3] => Array (
  22. [room_id] => 1
  23. [room_name] => Apartament4
  24. )
  25.  
  26. [4] => Array (
  27. [room_id] => 2
  28. [room_name] => Apartament5
  29. )
  30.  )
  31. [start_date] => 2007-02-20
  32. [end_date] => 2007-02-22
  33. [hotel_name] => Hotel pierwszy
  34. [hotel_alias] => hotel_pierwszy
  35. )
  36. [1] => Array (
  37. [rooms] => Array (
  38. [0] => Array (
  39. [room_id] => 17
  40. [room_name] => Pokoj1
  41. )
  42. [1] => Array (
  43. [room_id] => 18
  44. [room_name] => pokoj2
  45. )
  46. )
  47. [start_date] => 2007-02-20
  48. [end_date] => 2007-02-22
  49. [hotel_name] => Hotel test
  50. [hotel_alias] => hotel_test
  51. )
  52. )
  53. )
  54. ?>


No i chciałbym zrobić coś takiego, że mam dwa pola wyboru select (pierwszy wybierz hotel, drugi wybierz pokój).
Mój problem polega na tym że nie wiem jak zrobić pętle takie że:

* Wczyta do pierwszego selecta nazwy hoteli (w moim wypadku dwa: Hotel pierwszy i Hotel test),
* wczyta do drugiego selecta wszystkie pozycje z nazwami pokojów z danego hotelu ([room_name]) czyli np. dla Hotel test będą to:
Pokoj1 i Pokoj2

i np. po zmianie hotelu z pierwszego selecta zmienią się nazwy pokoi w drugim...
Ja to zrobiłem tak:

  1. <?php
  2. //----------------------------------------------------- HOTEL ------------------------------//
  3. $hotel = "<select id='hotel' class='hotel' name='hotel_name' tabindex='101'>n";
  4.  
  5. for($i=0; $i<count($data['ag']['rform']); $i++)
  6. {
  7. if(is_array($data['ag']['rform'][$i]['rooms']))
  8. {
  9.  $hotel.='<option value="'.$data['ag']['rform'][$i]['hotel_alias'].'">'.$data['ag']['rform'][$i]['hotel_name'].'</option>';
  10. }
  11. }
  12.  
  13. $hotel.="</select>";
  14.  
  15. //----------------------------------------------------- POKOJE -------------------------------//
  16. $reservation = "<select id='rooms' class='rooms' name='rooms' tabindex='101'>n";
  17.  
  18. for($i=0; $i<count($data['ag']); $i++)
  19. {
  20. if(is_array($data['ag']['rform'][$i]['rooms']))
  21. {
  22. foreach($data['ag']['rform'][$i]['rooms'] as $key => $values)
  23. {
  24. $k[$i]="<option value='".$values['room_id']."'>".$values['room_name']."</option>n"; 
  25. $reservation.= $k[$i];
  26. }
  27. }
  28. }
  29.  
  30. $reservation.="</select>";
  31. ?>


Ale w tym wypadku do drugiego selecta ładują się wszystkie pokoje (z pierwszego hotelu i drugiego) a powinno się tylko z wybranego (i tu mi nie wychodzi)....

Dodatkowo nie wiem jak zrobic js by w zdarzeniu onchange selecta pierwszego bez przeładowania zmieniały mi sie nazwy pokoju po wybraniu danego hotelu ...

Pomożecie (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Please bo mnie już nerwica bierze ...

Pozdro


-------------------------
ortograf w temacie bił po oczach
przy okazji poprawiłem te w poście

~Cienki1980


Ten post edytował Cienki1980 20.02.2007, 08:24:40
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cienki1980
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Ecchhh kombinujesz jak koń pod górę. Dostałeś sposób na talerzu to stwierdziłeś, że jest zbyt ciężki i wymyśliłeś jeszcze bardziej zamotany.
Poniżej masz przerobiony kod z podanej przeze mnie strony, generowany dynamicznie w PHP. Wystarczy tylko podstawić swoje dane. Nic prostszego.
  1. <?php
  2. //tworzymy tablice z hotelami i pokojami
  3. //w Twoim przypadku musisz wyciągnac je z bazy 
  4. for($i=0;$i<10;$i++)
  5. {
  6.  $hotele[$i]['nazwa']="hotel_".$i; // tutaj wstawiasz nazwe hotelu wyciagnietgo z bazy
  7.  $hotele[$i]['id']=$i; // tutaj wstawiasz id hotelu wyciagnietego z bazy
  8.  for($g=0;$g<rand(2,5);$g++)
  9.  {
  10. $pokoje[$i][$g]['nazwa']="pokoj w hotelu_".$i." numer_".$g; // tutaj wstawiasz nazwe pokoju z bazy
  11. $pokoje[$i][$g]['id']=$g*($i+1); // tutaj wstawiasz id pokoju z bazy
  12.  }
  13. }
  14.  
  15.  
  16. $ile_hoteli=count($hotele);
  17. $js='var groups='.$ile_hoteli.';
  18.  var group_nazwy=new Array(groups);
  19.  var group_wartosc=new Array(groups);
  20.  ';
  21. for($f=0;$f<$ile_hoteli;$f++)
  22. {
  23.  $js.='group_nazwy['.$f.']=new Array();
  24.  group_wartosc['.$f.']=new Array();
  25.  ';
  26.  $ile_pokoi=count($pokoje[$f]);
  27.  for($r=0;$r<$ile_pokoi;$r++)
  28.  {
  29. $js.='group_nazwy['.$f.']['.$r.']="'.$pokoje[$f][$r]['nazwa'].'";
  30. group_wartosc['.$f.']['.$r.']="'.$pokoje[$f][$r]['id'].'";
  31. ';
  32.  }
  33. }
  34.  
  35. ?>
  36.  
  37. <form name="wybor" method="post" action="index.php">
  38. <p><select name="example" id="select1" size="1" onChange="zmien(this.options.selectedIndex);">
  39. <?php
  40. for($g=0;$g<$ile_hoteli;$g++)
  41.  echo "<option value="".$hotele[$g]['id']."">".$hotele[$g]['nazwa']."</option>";
  42. ?>
  43. </select>
  44. <select name="stage2" id="select2" size="1">
  45. <?php
  46. $ile=count($pokoje[0]);
  47. for($e=0;$e<$ile;$e++)
  48.  echo "<option value="".$pokoje[0][$e]['id']."">".$pokoje[0][$e]['nazwa']."</option>";
  49. ?>
  50. </select>
  51. </p>
  52. </form>
  53.  
  54. <script language="javascript">
  55. <!--
  56. var temp=document.getElementById('select2');
  57. <?php echo $js; ?>
  58.  
  59.  
  60. function zmien(x){
  61. for (m=temp.options.length-1;m>0;m--)
  62. temp.options[m]=null
  63. for (i=0;i<group_nazwy[x].length;i++){
  64. temp.options[i]=new Option(group_nazwy[x][i],group_wartosc[x][i])
  65. }
  66. temp.options[0].selected=true
  67. }
  68.  
  69. -->
  70. </script>
Go to the top of the page
+Quote Post

Posty w temacie


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: 16.10.2025 - 14:13