Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Użycie "confirm" w pętli "for"
lena
post 10.12.2013, 14:45:37
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.12.2013

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


Witam,
bardzo proszę o pomoc, bo już wyczerpały mi się pomysły jak rozwiązać mój problem.
W pętli for tworzę formularze (wybór daty i godziny wizyty u lekarza pobrane z bazy danych) i po kliknięciu "Umów" chcę, aby wyskoczył confirm z informacją "Próbujesz się umówić na wizytę $dnia o $godzinie. Czy jesteś pewien tak nie"
I działa "prawie" poprawnie... Za każdym razem pobiera tylko dane z pierwszego obrotu pętli...

  1. ...
  2. for ($i = 0; $i < mysql_num_rows($query_select_one_hour); $i++){
  3. echo "<tr class='wiersze'>";
  4. echo "<form method='post' action='pacjent.php' id='$potwierdzenie'>";
  5. $one_day=mysql_result($query_select_one_hour, $i, 0);
  6. $one_hour=mysql_result($query_select_one_hour, $i, 1);
  7. echo "<td class='kolumny'><input name='dzien_wyb' value='$one_day'></td>";
  8. echo "<td class='kolumny'><input name='godzina_wyb' id='godzina' value='$one_hour'></td>";
  9. echo "<td class='kolumny'><input type='submit' value='Umów się na wizytę' class='confirm'></td>";
  10. echo "</form></tr>";
  11.  
  12. }
  13.  


a JS wygląda tak:

  1. $(document).ready(function(){
  2. $(".confirm").click(function(){
  3. var $form = $(this);
  4. $("#confirm")
  5.  
  6. .css({opacity:0.95})
  7. .fadeIn()
  8. .html('<div><div><h1>Wizyta na którą próbujesz się umówić '+$('input#godzina').val()+'</b><br></h1><p><button onClick=$("#potwierdzenie").submit()> TAK </button> <button> NIE </button></p></div></div>');
  9. return false;
  10. });
  11.  
  12. $("#confirm").click(function(){$(this).fadeOut();});
  13. });


Jakieś pomysły?
Go to the top of the page
+Quote Post
vermis
post 10.12.2013, 14:54:03
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

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


Tu używasz $potwierdzenie - czyli zmiennej.
  1. echo "<form method='post' action='pacjent.php' id='$potwierdzenie'>";

Natomiast odwołujesz się zawsze do elementu o id "potwierdzenie"
Kod
onClick=$("#potwierdzenie")


I jeszcze jedno widzę, że id="godzina" powtarza się tyle razy ile masz iteracji. Id musi być unikatowe w obrębie dokumentu. Inaczej odwołanie następuje do pierwszego znalezionego elementu.

Ten post edytował vermis 10.12.2013, 14:57:06


--------------------
Go to the top of the page
+Quote Post
lena
post 10.12.2013, 15:35:25
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.12.2013

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


Najlepiej dodać wartość 'i' do każdego id='godzina' ? a później w JS też jest potrzebna pętla?
nie bardzo wiem jak się za to zabrać bo już próbowałam podobnie i nie działało...
Go to the top of the page
+Quote Post
phpion
post 10.12.2013, 15:52:25
Post #4





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




W 1 dokumencie może być tylko 1 element o danym id. U Ciebie będzie ich kilka (bo w pętli tworzysz kilka takich elementów). Do tego masz błędny kod HTML. Po <tr> powinen pojawić się <td>, a nie <form>. Jak to poprawić? Powalcz, możesz zrobić 1 formularz = 1 tabelka, albo cały formularz upakować do 1 komórki <td>. Do osiągnięcia celu przyadtne będą:
- $(this).closest('form') - do dobrania się do "najbliższego" formularza, czyli tego zawierającego przycisk, w który klikasz,
- $('input#godzina', formularz).val() - do pobrania pola w obrębie konkretnego formularza, a nie z całego dokumentu (gdzie formularz to element z poprzedniego punktu).
Go to the top of the page
+Quote Post
lena
post 11.12.2013, 12:32:33
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.12.2013

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


Pomogło, dziękuję smile.gif Dla każdego formularza z pętli pobiera odpowiednie dane z wiersza.
  1.  
  2. $sql = "...";
  3. $query_select_one_hour = mysql_query($sql);
  4. for ($i = 0; $i < mysql_num_rows($query_select_one_hour); $i++){
  5. echo "<form method='post' action='pacjent.php' id='potwierdzenie'>";
  6. $one_day=mysql_result($query_select_one_hour, $i, 0);
  7. $one_hour=mysql_result($query_select_one_hour, $i, 1);
  8. echo "<table class='tabela'><tr class='wiersze'>";
  9. echo "<td class='kolumny'><input name='dzien_wyb' readonly='readonly' value='$one_day'></td>";
  10. echo "<td class='kolumny'><input name='godzina_wyb' id='godzina' readonly='readonly' value='$one_hour'></td>";
  11. echo "<td class='kolumny'><input type='submit' value='Umów się na wizytę' class='confirm'></td>";
  12. echo "</tr></table></form>";
  13. }
  14.  

i JS
  1. $(document).ready(function(){
  2. $(".confirm").click(function(){
  3. var $formularz=$(this).closest('form');
  4. $("#confirm")
  5. .fadeIn()
  6. .html('<div><div><h1>Wizyta na którą próbujesz się umówić:<br><b>'+$('input[name=dzien_wyb]',$formularz).val()+' o godzinie:'+$('input[name=godzina_wyb]',$formularz).val()+'</b><br>Czy jesteś pewien?<br></h1><p><button onClick=$("#potwierdzenie").submit()> TAK, umów mnie na wizytę </button> <button> NIE, rezygnuję </button></p></div></div>');
  7. return false;
  8. });
  9. $("#confirm").click(function(){$(this).fadeOut();});
  10. });


Napotkałam jednak ścianę przy próbie przesłania pobranych danych, dokładnie w miejscu
  1. <button onClick=$("#potwierdzenie").submit()>

Mogę liczyć na jakieś wskazówki?
Go to the top of the page
+Quote Post
lukasz1985
post 11.12.2013, 13:27:11
Post #6





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

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


Mała sugestia: nie wywołuj HTML'a przez "echo" w PHP bo to wygląda strasznie i jest kompletnie nieprawidłowe dla programów podświetlających składnię.

Nie rób tak:

  1. <?php echo "<tr><td>Tutaj coś" . $zmienna . "</td></tr>"; ?>


tylko tak:

  1. <tr><td>Tutaj coś <?php echo $zmienna; ?> </td></tr>


Tak samo z pętlami, możesz zrobić:

  1. <?php for($i = 0; $i < $costam ; $i++): ?>
  2.  
  3. <tr><td><?php echo $i; ?></td></tr>
  4.  
  5. <?php endfor; ?>
  6.  


I o pomoc Ci będzie łatwiej.




Cytat
  1. <button onClick=$("#potwierdzenie").submit()>

Mogę liczyć na jakieś wskazówki?


Znów masz odwołanie tylko do pierwszego elementu o id "potwierdzenie" ($("#potwierdzenie")). Wskazówki:
Ja to robiłem w ten sposób, że elementowi, który ma przypisane zdarzenie nadawałem id w formie "nazwa_numer", np "formularz_3", "submit_3" a w JSie dzieliłem string id na dwa substringi: "submit" i "3" poprzez metodę split();

Kod wynikowy wyglądał mniej więcej tak:

  1. <?php for ($i = 0; $i < 10; $i++): ?>
  2. <form id="formularz_<?php echo $i ?>" action="wyslane.php" method="POST">
  3. <div class="submit" id="submit_<?php echo $i ?>">
  4. Wyslij ten formularz
  5. </div>
  6. </form>
  7. <?php endfor ?>



[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. $(".submit").click(function(element) {
  3. var id = $(this).attr("id"); // Pobranie id elementu
  4. var numer = id.split("_")[1]; // Kluczowy punkt - dzielenie stringu id
  5.  
  6.  
  7. var wyslac = confirm("Wysłać?");
  8. if(wyslac) {
  9. $("#formularz_" + numer).submit(); // Wysłanie właściwego formularza
  10. }
  11. })
  12. </script>
[JAVASCRIPT] pobierz, plaintext
Go to the top of the page
+Quote Post
lena
post 17.12.2013, 10:17:58
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 10.12.2013

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


Cytat
nie wywołuj HTML'a przez "echo" w PHP bo to wygląda strasznie i jest kompletnie nieprawidłowe

Tak to jest nabrać złych przyzwyczajeń na początku nauki... ale dziękuję za uwagę i za pomoc w rozwiązaniu mojego problemu.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 30.05.2024 - 23:53