Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z petla while jak mniemam
Forum PHP.pl > Forum > Przedszkole
zicher
Witam

Mam maly problem ze skryptem. Bardzo prosze o pomoc bo siedze nad tym juz caly dzien i nic madrego nie wymyslilem sad.gif

Mam kilka tabel polaczonych relacyjnie ze soba. Tabela postac, gra, save, rodzajgry i inne. Tabela Postac i gra jest polaczona relacja wiele-do-wielu i tworza tabele postac_gra z kluczami obcymi innych tabel (w tym tabeli rodzajgry)

Udaje mi sie generowac na jednej stronie postac z danej gry (wybranej z listy forma selectowego).
Problem polega na tym, ze nie bardzo wiem co zrobic by dodatkowo podzielic form selectowy nakilka formow selectowych ze wzgledu na klucz obcy rodzajgry_id z tabeli rodzajgry.

Ale konkretnie moj skrypt wyglada tak oto:

  1. <? include('inc/gora.php'); ?>
  2. <BR>
  3. <? include('inc/conn.php'); ?>
  4. <? include('inc/menu.php'); ?>
  5. <BR>
  6. <? include('inc/menupostac.php'); ?>
  7. <br>
  8. <? include('inc/srodek.php'); ?>
  9.  
  10. <?
  11. $_GET['ksiegi_id'] = $ksiegi;
  12. $_GET['grupa_id'] = $grupa;
  13. $_GET['postac_id'] = $postac;
  14. if(!isset($ksiegi)){$ksiegi = 1;}
  15. if(!isset($grupa)){$grupa = 1;}
  16. if(!isset($postac)){$postac = 1;}
  17. $_POST['gra'] = $gra;
  18. if(!isset($gra)){$gra = 1;}
  19. $zapytanie = "SELECT * FROM postac, ksiegi, grupa, gra, postac_gra, postacopis, save, sav
    ekatalogi1, save_savekatalogi1, saverodzaj, rodzajgry WHERE
  20. postacopis.postacopis_id=postac_gra.postacopis_id AND 
  21. ksiegi.ksiegi_id=postac.ksiegi_id and 
  22. grupa.grupa_id=postac.grupa_id and rodzajgry.rodzajgry_id=gra.rodzajgry_id and
  23. postac.postac_id=postac_gra.postac_id and gra.gra_id=postac_gra.gra_id And
  24. ksiegi.ksiegi_id=postac_gra.ksiegi_id and grupa.grupa_id=postac_gra.grupa_id and
  25. save.save_id=postac_gra.save_id and savekatalogi1.savekatalogi1_id=postac_gra.sa
    vekatalogi1_id and saverodzaj.saverodzaj_id=postac_gra.saverodzaj_id and
  26. saverodzaj.saverodzaj_id=save.saverodzaj_id and
  27. save.save_id=save_savekatalogi1.save_id and savekatalogi1.savekatalogi1_id=save_
    savekatalogi1.savekatalogi1_id and saverodzaj.saverodzaj_id=save_savekatalogi1.sa
    verodzaj_id and
  28. postac.ksiegi_id='$ksiegi' and postac.grupa_id='$grupa' and postac_gra.postac_id='$postac' and gra.gra_id='$gra'";
  29. $wynik = mysql_query($zapytanie);
  30. $rekord = mysql_fetch_array($wynik);
  31.  
  32. echo '<table width="900" border="0"><tr valign="top">';
  33. echo '<td class="pal" width="900" valign="top"><div align="center"><font class="nbb">'.$rekord['postacnazwa'].' - '.$rekord['nazwagry'].'</font> <font class="greenb">(</font><font class="nbb">'.$rekord['rodzajgrynazwa'].'</font><font class="greenb">)</font></div></td>';
  34. echo '</tr></table><br>';
  35.  
  36. echo '<table width="900" border="0"><tr valign="top">';
  37. echo '
  38. <td class="pal" width="200" valign="top">
  39. <div align="left">1',file_get_contents($rekord['link']),'</div>
  40. <br><br>
  41. <div align="left"><a href="postaciek.php?ksiegi='.$rekord['ksiegi_id'].'&grupa='.$rekord['grupa_id'].'&postac='.$rekord['postac_id'].'&gra='.$rekord['gra_id'].'#" method="post">Cechy & Atrbuty</a></div><br>
  42. <div align="left"><a href="postaciek.php?ksiegi=',$rekord['ksiegi_id'],'&grupa=',$rekord['grupa_id'],'&postac=',$rekord['postac_id'],'&gra='.$rekord['gra_id'].'#" method="post">Film</a></div><br>
  43. <div align="left"><a href="postaciek.php?ksiegi=',$rekord['ksiegi_id'],'&grupa=',$rekord['grupa_id'],'&postac=',$rekord['postac_id'],'&gra='.$rekord['gra_id'].'#" method="post">Galeria</a></div><br>
  44. <div align="left"><a href="postaciek.php?ksiegi=',$rekord['ksiegi_id'],'&grupa=',$rekord['grupa_id'],'&postac=',$rekord['postac_id'],'&gra='.$rekord['gra_id'].'#" method="post">Save</a></div><br>
  45. </td>';
  46. echo '<td width="300" valign="top"><div align="center"><img src="',$rekord['grafika'],'" borde="0"></div></td>';
  47. echo '<td width="400" valign="top"><div align="center"><font class="nbb">'.$rekord['rodzajgrynazwa'].'</font></div><br>';
  48. echo '<div align="center"><form action="postaciek.php?ksiegi=',$rekord['ksiegi_id'],'&grupa=',$rekord['grupa_id'],'&postac=',$rekord['postac_id'],'" method="post"><select name="gra" class="blackb">';
  49. ?>
  50. <?
  51. $zapytanie = "SELECT * FROM postac, ksiegi, grupa, gra, postac_gra, postacopis, save, sav
    ekatalogi1, save_savekatalogi1, saverodzaj, rodzajgry WHERE
  52. postacopis.postacopis_id=postac_gra.postacopis_id AND 
  53. ksiegi.ksiegi_id=postac.ksiegi_id and 
  54. grupa.grupa_id=postac.grupa_id and rodzajgry.rodzajgry_id=gra.rodzajgry_id and
  55. postac.postac_id=postac_gra.postac_id and gra.gra_id=postac_gra.gra_id And
  56. ksiegi.ksiegi_id=postac_gra.ksiegi_id and grupa.grupa_id=postac_gra.grupa_id and
  57. save.save_id=postac_gra.save_id and savekatalogi1.savekatalogi1_id=postac_gra.sa
    vekatalogi1_id and saverodzaj.saverodzaj_id=postac_gra.saverodzaj_id and rodzajgr
    y.rodzajgry_id=postac_gra.rodzajgry_id and
  58. saverodzaj.saverodzaj_id=save.saverodzaj_id and
  59. save.save_id=save_savekatalogi1.save_id and savekatalogi1.savekatalogi1_id=save_
    savekatalogi1.savekatalogi1_id and saverodzaj.saverodzaj_id=save_savekatalogi1.sa
    verodzaj_id and
  60. postac.ksiegi_id='$ksiegi' and postac.grupa_id='$grupa' and postac_gra.postac_id='$postac' ORDER BY nazwagry";
  61. $wynik = mysql_query($zapytanie);
  62. while($wiersz = mysql_fetch_array($wynik))
  63. {
  64. echo '<option value="'.$wiersz['gra_id'].'"';
  65. if ($wiersz['gra_id']==$_POST['gra']) echo " SELECTED ";
  66. echo '>'.$wiersz['nazwagry'];
  67. }
  68. ?>
  69. </select><br><br><br><input type="submit" class="blackb" value="Wybierz Grę">
  70. </table><br>
  71. <table width="700" border="0">
  72. <tr valign="top">
  73. <?
  74. echo '<td class="pal" width="200"><div align="left">',file_get_contents($rekord['historia']),'</div></td>';
  75. echo '</tr>';
  76. ?>
  77. </table><br><br>
  78. <table width="700" border="0">
  79. <tr>
  80. <?
  81. echo '<td class="pal" width="200"><div align="left">',file_get_contents($rekord['opis2']),'</div></td>';
  82. echo '</tr>';
  83. ?>
  84. </table>
  85.  
  86. </table>
  87. <? include('inc/dol.php'); ?>




To co potrzebuje to to aby ponizszy form z lista gier z danego rodzajgry pojawial sie raz dla jednej nazwy rogzajgry nie stracac przy tym innych danych

  1. <?php
  2. echo '<td width="400" valign="top"><div align="center"><font class="nbb">'.$rekord['rodzajgrynazwa'].'</font></div><br>';
  3. echo '<div align="center"><form action="postaciek.php?ksiegi=',$rekord['ksiegi_id'],'&grupa=',$rekord['grupa_id'],'&postac=',$rekord['postac_id'],'" method="post"><select name="gra" class="blackb">';
  4. ?>


Zdaje sobie sprawe ze musze uzyc while. ale jak mam to zrobic? Zrobilem while do gornego zapytania (tego ktory zwraca wyniki z submita) ale wszystko sie rabie. Powtorzylem to zapytanie ponizej, ale wynik jest identyczny.

Bardzo prosze o pomoc.

z powazaniem
Zicher
Sedziwoj
Od razu zaznaczę, żę nie wnikałem w kod (nieodpowiedni stan biggrin.gif)
a co do wyboru podzielonego na grupy to może to rozwiąże:
  1. <FORM action="a.php" method="post">
  2. <P>
  3. <SELECT name="ComOS">
  4. <OPTION selected label="none" value="none">None</OPTION>
  5. <OPTGROUP label="PortMaster 3">
  6. <OPTION label="3.7.1" value="pm3_3.7.1">PortMaster 3 with ComOS 3.7.1</OPTION>
  7. <OPTION label="3.7" value="pm3_3.7">PortMaster 3 with ComOS 3.7</OPTION>
  8. <OPTION label="3.5" value="pm3_3.5">PortMaster 3 with ComOS 3.5</OPTION>
  9. <OPTGROUP label="PortMaster 2">
  10. <OPTION label="3.7" value="pm2_3.7">PortMaster 2 with ComOS 3.7</OPTION>
  11. <OPTION label="3.5" value="pm2_3.5">PortMaster 2 with ComOS 3.5</OPTION>
  12. <OPTGROUP label="IRX">
  13. <OPTION label="3.7R" value="IRX_3.7R">IRX with ComOS 3.7R</OPTION>
  14. <OPTION label="3.5R" value="IRX_3.5R">IRX with ComOS 3.5R</OPTION>
  15. <input type="submit" name="wys" value="Wyślij">
  16. </FORM>

dostaniesz wtedy w a.php $_POST z kluczem 'ComOS' z wartością value (typu string).
a jeśli masz coś do przekazania ale tak aby nie było widoczne na stronie, i chcesz to przesłać przez formularz to robisz to z użyciem
  1. <input type="hidden" name="nazwa_zmiwnej_do_przesłania" value="wartość" />

i zostanie ona przesłana tak jak reszta pól formularza. (oczywiście jak formularz wysyłany jest metodą POST to i ta zmienna zostanie nią wysłana)

Jeśli źle zrozumiałem problem to daj znać, jeśli dobrze to też. Postaram się jutro (ale nie obiecuję) zagłębić w kod.
zicher
Witam ponownie

Dzieki za odpowiedz.

Hm. Moj problem nie dotyczy budowy formularza tak mi sie wydaje. Nie jestem informatykiem i zapewne nigdy nim nie zostane stad moge sie mylic. Zdaje sobie sprawe, ze moje pytania moga byc delikatnie rzecz ujmujac niezrozumiale sad.gif

Ja jedynie potrzebuje by formularz z selectem gier, ktory znajduje sie w kodzie zostal podzielony na kilka formularzy selectowych ze wzgledu na rodzaj gry (podaje link do screena z mojego kompa - tak to powinno wygladac przy czym nic wiecej nie powinno sie zmnienic. To znaczy nie potrzebuje dodatkowych zmiennych. Mam zmienna ponizsza i tylko ja chce wykorzystac - chyba ze to jest niemozliwe)

  1. <?php
  2. select name="gra"
  3. ?>


I to jest sedno sprawy. Submit powinien zostac taki sam do wszystkich formularzy powstalych z tego jednego.

Na razie wyglada to tak (podaje link do filmu). Zauwaz, ze po wybraniu elementu z listy nad formularzem zmienia sie napis niebieski (glowna, gry, dodatki). Czyli wspominany wcezsniej rodzajgry. A ja chce by wlasnie ze wzgledu na rodzajgry pojawily sie takie same formularze (jak na screenie) tylko z listami gier odpowiednio dodatki w formularzu z dodatkami, gry w formularzu z grami...etc.). Jednoczesnie nie chce zmieniac sposobu dzialania strony.

Dlatego tez wydaje mi sie, ze wystarczy by ten fragment kodu (zaznaczony w pierwszym poscie numerami od 46-49)

  1. <?php
  2. echo '<td width="400" valign="top"><div align="center"><font class="nbb">'.$rekord['rodzajgrynazwa'].'</font></div><br>';echo '<div align="center"><form action="postaciek.php?ksiegi=',$rekord['ksiegi_id'],'&grupa=',$rekord['grupa_id'],'&postac=',$rekord['postac_id'],'" method="post"><select name="gra" class="blackb">';
  3. ?>


Przeciagnac petla while. Wtedy rekord['rodzajgrynazwa'] pojawi sie tyle razy ile wystapi w petli. Powstaje jeszcze problem by przy takim zapytaniu gdzie w bazie jest np 13 gier rodzaju gry pojawil sie tylko jeden formularz z grami a nie 13 formularzy tego samego typu.

Mam jeszcze jeden problem, za ktory nie wiem jak sie zabrac.

  1. <?php
  2. <div align="left"><a href="postaciek.php?ksiegi='.$rekord['ksiegi_id'].'&grupa='.$rekord['grupa_id'].'&postac='.$rekord['postac_id'].'&gra='.$rekord['gra_id'].'#" method="post">Cechy & Atrbuty</a></div><br><div align="left"><a href="postaciek.php?ksiegi=',$rekord['ksiegi_id'],'&grupa=',$rekord['grupa_id'],'&postac=',$rekord['postac_id'],'&gra='.$rekord['gra_id'].'#" method="post">Film</a></div><br><div align="left"><a href="postaciek.php?ksiegi=',$rekord['ksiegi_id'],'&grupa=',$rekord['grupa_id'],'&postac=',$rekord['postac_id'],'&gra='.$rekord['gra_id'].'#" method="post">Galeria</a></div><br><div align="left"><a href="postaciek.php?ksiegi=',$rekord['ksiegi_id'],'&grupa=',$rekord['grupa_id'],'&postac=',$rekord['postac_id'],'&gra='.$rekord['gra_id'].'#" method="post">Save</a></div><br>
  3. ?>


Na filmie widac powyzszy kod w formie linkow Jako cechy & Atrybuty, film, galeria i Save. Chcialbym by cechy i atrybyty pojawialy sie domyslnie po wybraniu gry (czesc kodu z pierweszego posta linijka 71 w dol). A po kliknieciu pozostalych w tym wlasnie miejscu pojawialy sie inne rzeczy. Jak to zrobic? Myslalem o icludach w zaleznosci od kliknietego linka (a zatem if jakias rodzajgry == numer include strone z danymi takimi). tylko nie wiem czy to dobry pomysl jest. Ani jak to rozwiazac z domyslnymi wartosciami.

Dziekuje
Z powazaniem
zicher
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.