Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz w dwóch pętlach while
Forum PHP.pl > Forum > Przedszkole
brymen2
Witam, mam problem z wyświetleniem formalurza który jest w dwóch pętlach. Zaznaczam, że musi się to odbyć w osobnych pętlach ponieważ znajdują się w dwóch tabelach. Czy jest na to jakiś sposób?

  1. if ($_GET['sa'] == 'formularz') {
  2.  
  3. echo $_POST['test'];
  4.  
  5. } else {
  6.  
  7. $SQL = "SELECT * FROM pojazdy ORDER BY `rejestracja` ASC ";
  8.  
  9. $Q3 = mysql_query($SQL); while ($D3 = mysql_fetch_array($Q3)) {
  10. echo '<form action="form.php?sa=formularz" method="post" enctype="multipart/form-data">';
  11.  
  12. }
  13. $Q2 = mysql_query($SQL); while ($P = mysql_fetch_array($Q2)) {
  14.  
  15. echo '<input type="hidden" name="test" value="'.$P['marka'].'">';
  16. echo '<input type="submit" value="Rezerwuj"/><br />';
  17.  
  18. echo '</form>';
  19. }
  20. }
nospor
To teraz po odpaleniu strony, zajrzyj w jej źródło i przyjrzyj się jak faktycznie wygląda twój wygenerowany kod. Przenosze na przedszkole
brymen2
Cytat(nospor @ 1.12.2011, 11:35:05 ) *
To teraz po odpaleniu strony, zajrzyj w jej źródło i przyjrzyj się jak faktycznie wygląda twój wygenerowany kod. Przenosze na przedszkole

Wiem jak wygląda kod, ale co zrobić żeby w dwóch pętlach tak nie wyglądał. Jeśli poziom jest z przedszkola to napisz cwaniaku rozwiązanie. W jednej pętli wszystko działa tak jak powinno ale w oddzielnych już się wysypuje z wiadomych przyczyn.
nospor
Nie jestem cwaniakiem, skąd ten pomysł?
A chciałem byś zobaczył kod, bo byłem święcie przekonany że nie wiesz jak wygląda

Przykład:
$Q3 = mysql_query($SQL); while ($D3 = mysql_fetch_array($Q3)) {
echo '<form action="form.php?sa=formularz" method="post" enctype="multipart/form-data">';
}
W tej jednej pętli generujesz jedynie znacznik <form......
W wyniku dostajesz
<form......
<form......
<form......
<form......
<form......
<form......

Czemu to ma służyć?

Jak niby taki "cwaniak" jak ja ma ci pomóc, skoro nie kumam w ogóle po co ci te pętle? Obie pętle operują na tych samych danych. Jedna pętla generuje masz <form.....
druga pętla generuje
pole,pole,</form>

Po co? Po co tu mają być dwie petle? Czemu nie moze byc jedna?

Może pokaz, jaki chcesz miec wynik koncowy to cos wymyslimy. Bo teraz wygląda to tak, żę sobie ubzdurałes ze masz miec dwie petle i wciskasz je na sile
brymen2
Idea jest taka: Muszą być trzy tabele obok siebie. pierwsza mało istotna, środkowa tabela będzie przewijana w poziomie więc musi być w osobnej tabeli oraz osobnym div ( div przesuwany poziomo) w ostatniej tabeli ma być submit. Fakt, że ubzdurałem sobie, że formularz musi być w dwóch pętlach.

  1. <tr>
  2.  
  3. <td colspan="6">
  4. <div style="float: left;">
  5. <table border="1px">
  6. <tr><td>Marka</td><td>Nr rej.</td><td id="leftarr" onmouseover="przewin('-','a')" onmouseout="stop()" >Lewo</td></tr>
  7. <?php $Q = mysql_query($SQL); while ($D = mysql_fetch_array($Q)) { ?>
  8.  
  9. <tr><td><b class="thumbnail"><?php echo stripslashes($D['marka']); ?><span><img src="images/kangoo.jpg" /><br /><?php echo stripslashes($D['marka']) . ' ' .$D['rejestracja']; ?></span></b><br /></td><td><?php echo stripslashes($D['rejestracja']); ?></td></tr>
  10.  
  11. <?php } ?>
  12. </table>
  13. </div>
  14. <div id="scroll" style="float: left;">
  15. <table border="1px">
  16. <tr><td>00:00</td><td>00:30</td><td>01:00</td><td>01:30</td><td>02:00</td><td>02:30</td><td>03:00</td><td>03:30</td><td>04:00</td><td>04:30</td><td>05:00</td><td>05:30</td><td>06:00</td><td>06:30</td><td>07:00</td><td>07:30</td><td>08:00</td><td>08:30</td><td>09:00</td><td>09:30</td><td>10:00</td><td>10:30</td><td>11:00</td><td>11:30</td><td>12:00</td><td>12:30</td><td>13:00</td><td>13:30</td><td>14:00</td><td>14:30</td><td>15:00</td><td>15:30</td><td>16:00</td><td>16:30</td><td>17:00</td><td>17:30</td><td>18:00</td><td>18:30</td><td>19:00</td><td>19:30</td><td>20:00</td><td>20:30</td><td>21:00</td><td>21:30</td><td>22:00</td><td>22:30</td><td>23:00</td><td>23:30</td></tr>
  17.  
  18. <?php $Q3 = mysql_query($SQL); $l=1; while ($D3 = mysql_fetch_array($Q3)) {
  19. echo '<form action="index.php?sa=formularz" method="post" enctype="multipart/form-data">';
  20. ?>
  21. <tr>
  22. <?php $data = $day.'.'.$month.'.'.$year;
  23.  
  24. for($B=1;$B<49;$B++) {
  25. $R= mysql_query("SELECT * FROM `rezerwacja` WHERE `data` = '".$data."' AND `rejestracja` = '".$D3['rejestracja']."' AND `T".$B."` LIKE '%".$B."%' ORDER BY `rejestracja` ASC ;");
  26. $RR = mysql_fetch_assoc($R);
  27. ?>
  28.  
  29. <td><?php if (isset($RR['T'.$B])) { echo '<center>R</center>';} else {?><input type="checkbox" name="<?php echo 'T'.$B; ?>" value="<?php echo $B; ?>"><?php } ?></td>
  30.  
  31. <?php } ?>
  32. </tr>
  33. <?php $l++; } ?>
  34.  
  35.  
  36. </table>
  37. </div>
  38. <div style="float: left;">
  39. <table border="1px">
  40.  
  41. <tr><td id="rightarr" onmouseover="przewin('-','d')" onmouseout="stop()" >Prawo</td><td>REZERWACJA</td></tr>
  42.  
  43. <?php $Q2 = mysql_query($SQL); $o=1; while ($P = mysql_fetch_array($Q2)) { ?>
  44. <input type="hidden" name="pojazd_id" value="<?php echo $P['pojazd_id']; ?>">
  45. <input type="hidden" name="marka" value="<?php echo $P['marka']; ?>">
  46. <input type="hidden" name="rejestracja" value="<?php echo $P['rejestracja']; ?>">
  47.  
  48. <input type="hidden" name="dzien" value="<?php echo $day; ?>">
  49. <input type="hidden" name="miesiac" value="<?php echo $month; ?>">
  50. <input type="hidden" name="rok" value="<?php echo $year; ?>">
  51.  
  52.  
  53. <tr><td></td><td><?php echo '<input type="submit" value="Rezerwuj"/>'; ?></td></tr>
  54.  
  55. <?php
  56. echo '</form>';
  57. $o++; } ?>
  58. </table>
  59. </div>
  60.  
  61. </td>
  62.  
  63. </tr>
  64.  

Podałem krótki kod mając nadzieje, że zostanę zrozumiany :] Przepraszam za bałagan w kodzie ale od kilku dni jest ostra walka...
nospor
To jeszcze w skrócie:
czy ma być jeden formularz do wysłania wszystkich danych jakie generujesz?
xsonic
Może coś w tym stylu?
  1. echo <<< TABLE
  2. <TABLE align="center" border="8" cellpadding="5" bgcolor="black" bordercolor="green">
  3. TABLE;
  4.  
  5.  
  6. while ( $tri <= $tr ){
  7. echo <<< TR
  8. <TR>
  9. TR;
  10.  
  11. while ( $tdi >= $td ){
  12.  
  13. echo <<< TD
  14. <TD>
  15. TD;
  16. echo <<< HREF
  17. <a href="photos/image-$num.jpg" rel="lightbox" title="Podpis pod zdjeciem"> <img src="thumbnails/image-$num.jpg" alt="Podpis miniaturki" />
  18. HREF;
  19. echo <<< TDK
  20. </TD>
  21. TDK;
  22. $num=$num+1;
  23. $td=$td+1;
  24. }
  25. echo <<< TRK
  26. </TR>
  27. TRK;
  28. $td="1";
  29. $tri=$tri+1;
  30. }
  31. echo <<< TABLEK
  32. </TABLE>
  33. TABLEK;
brymen2
Wystarczy wygenerowanie jednego formularza, rezerwacja dotyczy tylko jednego rekordu (pojazdu). Ale jeśli znajdzie się rozwiązanie gdzie jeden submit pobierze dane ze wszystkich zaznaczonych checkbox to tez będzie jakiś sukces.
nospor
Nadal nic nie kumam.
Czym są checkboxy?
Ile na raz na stronie może być w formularzu pojazdów? Tylko jeden czy więcej?
Jak się mają checkboxy do pojazdu/pojazdów?
brymen2
Może wygląd tabeli wyjaśni czym są checkboxy

nospor
No, teraz wszystko jasne smile.gif Każdy wiersz to nie jako osoby formularz ma być. No niestety, z racji, że zrobiłeś to na trzech tabelkach to nie da się tego zrobić czystym HTML.
Formularz masz robić tylko na ostatnim etapie, czyli tam gdzie masz pola ukryte i guzik REZERWUJ. Dodatkowo, dodaj jeszcze jedno ukryte pole. To pole będziesz wypełniał za każdym razem, gdy ktoś zaznaczy/odznaczy checkbox w danym wierszu. Wówczas sprawdzasz wszystkie zaznaczone checkboxy w danym wierszu i zapisujesz je do tego dodatkowego pola ukrytego, oddzielone np. przecinkiem.


Gdybyś zrobił to na divach (divy mogą symulować tabelki przy odpowiednim ostylowaniu) wówczas na każdy cały wiersz byś zakładał formularz i nie musiał się bawić w reczne zliczanie checkboxów.
brymen2
Jeśli formularz ma być generowany na ostatnim etapie to w jaki sposób pobrać zaznaczony checkbox z danego wiersza ze środkowej części? Interesuje mnie każde rozwiązanie tego problemu, więc może ktoś coś wymyśli.
nospor
Cytat
to w jaki sposób pobrać zaznaczony checkbox z danego wiersza ze środkowej części?
No przecież napisałem:
Cytat
To pole będziesz wypełniał za każdym razem, gdy ktoś zaznaczy/odznaczy checkbox w danym wierszu. Wówczas sprawdzasz wszystkie zaznaczone checkboxy w danym wierszu i zapisujesz je do tego dodatkowego pola ukrytego, oddzielone np. przecinkiem.
Jeśli czegoś z tego nie zrozumiałeś, to napisz czego a nie udajesz, że tego nie ma smile.gif
Rzecz jasna ten etap co tu opisałem masz obsłużyć przy pomocy js.
brymen2
Nie udaję, to przedszkole więc mam prawo nie rozumieć smile.gif Twoje rozwiązanie wydaje się realne ale bez dobrego przykładu jeszcze długo będę musiał sciana.gif
nospor
Cytat
więc mam prawo nie rozumieć
No a przecież ja tego nie neguję smile.gif Poprostu Twój poprzedni post zabrzmiał tak, jakbyś udawał że nie widzisz tego co napisałem - zwróciłem uwagę tylko na to, nic więcej smile.gif

Każdemu checkboxowi z danego wiersza nadajesz klasę kl1 - wiersz 1, kl2 - wiersz2, kl3 - wiersz3,.....
Piszesz funkcję, która pobiera checkboxy z danego wiersz. Uzyjemy do tego jQuery

Kod
jQuery(".kl"+i+":checked").each(function(){
alert(this.value);
});

i - to przekazany do funkcji numer wiersza, dla ktorego liczysz checkboxy. Zakładam, że checkboxom nadajesz wlasciwe value, po którym można stwierdzić co zaznaczono.
Ten kawałek kodu co tu napisalem wyswietla zaznaczone chexkboxy z danego wiersza.
Jedyne co musisz zrobic to opakować to w funkcję i zamiast wyswietlać to zapisywać do zmiennej tekstowej, a nastepnie wpisać jej zawartosc do ukrytego pola.
Mając tę funkcję, podpinasz ją na zdarzenie CLICK dla każdego checkboxa.
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.