Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] [html] [js] Zliczanie checkboxów i wysyłka na email
Forum PHP.pl > Forum > Przedszkole
ant00n
Witam.
Od jakiegoś czasu siedzę nad takim tematem:
- na stronie są checkboxy do wyboru
- chcę mieć możliwość sprawdzenia ile checkboxów zaznaczyłem za pomocą przycisku lub aby ilość wybranych checkboxów wyświetlała się w czasie rzeczywistym gdzieś na stronie
- pole do wpisania dodatkowego komentarza
- i to wszystko żeby się wysyłało na maila bez udziału programu pocztowego

I szczerze powiem utknąłem. Albo ładnie zlicza i pokazuje ale wysyła tylko ostatni zaznaczony checkbox albo wysyła wszystko ładnie ale nie można sprawdzić ile zaznaczyłem checkboxów.

Coś tak to wygląda:
http://fotobracia.pl/wybierajka2.html

A oto kod, który do tej pory udało mi się skleić:

  1. <?php
  2. if (count($_POST))
  3. {
  4. ////////// USTAWIENIA //////////
  5. $email = 'info@fotobracia.pl'; // Adres e-mail adresata
  6. $subject = 'temat'; // Temat listu
  7. $message = 'Dziękujemy za wysłanie formularza'; // Komunikat
  8. $error = 'Wystąpił błąd podczas wysyłania formularza'; // Komunikat błędu
  9. $charset = 'iso-8859-2'; // Strona kodowa
  10. //////////////////////////////
  11.  
  12. $head =
  13. "MIME-Version: 1.0\r\n" .
  14. "Content-Type: text/plain; charset=$charset\r\n" .
  15. "Content-Transfer-Encoding: 8bit";
  16. $body = '';
  17. foreach ($_POST as $name => $value)
  18. {
  19. if (is_array($value))
  20. {
  21. for ($i = 0; $i < count($value); $i++)
  22. {
  23. $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value[$i]) : $value[$i]) . "\r\n";
  24. }
  25. }
  26. else $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value) : $value) . "\r\n";
  27. }
  28. echo mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head) ? $message : $error;
  29. }
  30. else
  31. {
  32. ?>
  33. <form action="?" method="post">
  34.  
  35. <div>
  36. <!-- Pole typu RADIO -->
  37. <!-- Pole typu CHECKBOX -->
  38. <br>
  39. <div id="img_area"><!--BEGIN img_area-->
  40. <hr/>
  41. <br>
  42. <div id="text_field"><!--BEGIN text_field-->
  43. <input type="checkbox" name="Foto" value="Zdjęcie 1" style="float:left; margin-left:0px;"/><h1>Zdjęcie 01</h1>
  44. </div>
  45. <div id="img_field"><!--BEGIN img_field-->
  46.  
  47. </div>
  48. </div>
  49.  
  50. <div id="img_area"><!--BEGIN img_area-->
  51. <hr/>
  52. <br>
  53. <div id="text_field"><!--BEGIN text_field-->
  54. <input type="checkbox" name="Foto" value="Zdjęcie 2" style="float:left; margin-left:0px;"/><h1>Zdjęcie 02</h1>
  55. </div>
  56. <div id="img_field"><!--BEGIN img_field-->
  57.  
  58. </div>
  59. </div>
  60.  
  61. <div id="img_area"><!--BEGIN img_area-->
  62. <hr/>
  63. <br>
  64. <div id="text_field"><!--BEGIN text_field-->
  65. <input type="checkbox" name="Foto" value="Zdjęcie 3" style="float:left; margin-left:0px;"/><h1>Zdjęcie 03</h1>
  66. </div>
  67. <div id="img_field"><!--BEGIN img_field-->
  68.  
  69. </div>
  70. </div>
  71.  
  72. <div id="img_area"><!--BEGIN img_area-->
  73. <hr/>
  74. <br>
  75. <div id="text_field"><!--BEGIN text_field-->
  76. <input type="checkbox" name="Foto" value="Zdjęcie 4" style="float:left; margin-left:0px;"/><h1>Zdjęcie 04</h1>
  77. </div>
  78. <div id="img_field"><!--BEGIN img_field-->
  79.  
  80. </div>
  81. </div>
  82.  
  83. <div id="img_area"><!--BEGIN img_area-->
  84. <hr/>
  85. <br>
  86. <div id="text_field"><!--BEGIN text_field-->
  87. <input type="checkbox" name="Foto" value="Zdjęcie 5" style="float:left; margin-left:0px;"/><h1>Zdjęcie 05</h1>
  88. </div>
  89. <div id="img_field"><!--BEGIN img_field-->
  90.  
  91. </div>
  92. </div>
  93.  
  94. <div id="img_area"><!--BEGIN img_area-->
  95. <hr/>
  96. <br>
  97. <div id="text_field"><!--BEGIN text_field-->
  98. <input type="checkbox" name="Foto" value="Zdjęcie 6" style="float:left; margin-left:0px;"/><h1>Zdjęcie 06</h1>
  99. </div>
  100. <div id="img_field"><!--BEGIN img_field-->
  101.  
  102. </div>
  103. </div>
  104.  
  105.  
  106.  
  107.  
  108. <script type="text/javascript">
  109. function sprawdz() {
  110. var ileZaznaczonych = 0;
  111. var forma = this.form;
  112. var obiektyCheck = forma.Foto;
  113. for (x=0; x<obiektyCheck.length; x++) {
  114. if (obiektyCheck[x].checked) ileZaznaczonych++
  115. }
  116. alert('Liczba wybranych zdjęć (w pakiecie 40 szt.): ' +ileZaznaczonych+ ' ');
  117. }
  118.  
  119. document.getElementById('spr').onclick = sprawdz;
  120. </script>
  121. <div id="img_area"><!--BEGIN img_area-->
  122. <!-- Pole komentarza (o powiększonych rozmiarach oraz z tekstem domyślnym) -->
  123. <p><h1>Podaj swój komentarz:</h1></p>
  124. <textarea name="Komentarz" cols="50" rows="10" style="float:left; margin-left:10px;"></textarea>
  125. <br /><br /><br />
  126. <div>
  127. <input type="button" value="Sprawdź ile zdjęć wybrałeś" id="spr" />
  128. </div>
  129.  
  130. <!-- Przycisk WYŚLIJ -->
  131. <input type="submit" value="Wyślij formularz" />
  132. <!-- Przycisk WYCZYŚĆ DANE -->
  133. <input type="reset" value="Wyczyść dane" />
  134. </div>
  135. </div>
  136.  
  137. </form>
  138. <?php
  139. }
  140. ?>


Proszę o pomoc
-ant00n-
Nikt nie pomoże?
Niktoś
Może spróbuj zamiast
var obiektyCheck = forma.Foto; -czym jest forma?
dać
var obiektyCheck =document.getElementsByName("Foto");

I zastanawia mnie co w ogóle daje Tobie

if (count($_POST))

{
?
ant00n
To może inaczej. Jak wysłać coś takiego na e-mail bez udziału programu pocztowego.
Pozdrawiam

  1. <form method="post" name=test>
  2. <script language="Javascript1.3">
  3. function licz(form) {
  4. var zaznaczone = 0;
  5. var limit = 999;
  6. var max = form.ckbox.length;
  7. for (var idx = 0; idx < max; idx++) {
  8. if (eval("document.test.ckbox[" + idx + "].checked") == true) {
  9. zaznaczone += 1;
  10. }
  11. }
  12. document.getElementById("check").value=zaznaczone + "/" + max;
  13. }
  14. zaznaczone=0; //jeśli jakieś checkboxy są domyślnie zaznaczone, to tu wpisać ich liczbę
  15. max=999;
  16. function sprawdz(ktory) {
  17. if(!ktory.checked) zaznaczone--; else if(zaznaczone==max) {ktory.checked=0; alert('[komunikat...]');} else zaznaczone++;
  18. }
  19. 1<input type="checkbox" name="ckbox" value="1" onclick="licz(this.form);sprawdz(this)" /> checkbox 1<BR />
  20. 2<input type="checkbox" name="ckbox" value="2" onclick="licz(this.form);sprawdz(this)" /> checkbox 2<BR />
  21. 3<input type="checkbox" name="ckbox" value="3" onclick="licz(this.form);sprawdz(this)" /> checkbox 3<BR />
  22. 4<input type="checkbox" name="ckbox" value="4" onclick="licz(this.form);sprawdz(this)" /> checkbox 4<BR />
  23. 5<input type="checkbox" name="ckbox" value="5" onclick="licz(this.form);sprawdz(this)" /> checkbox 5<BR />
  24. 6<input type="checkbox" name="ckbox" value="6" onclick="licz(this.form);sprawdz(this)" /> checkbox 6<BR />
  25. 7<input type="checkbox" name="ckbox" value="7" onclick="licz(this.form);sprawdz(this)" /> checkbox 7<BR />
  26. <input type="button" onclick="licz(this.form)" value=" Sprawdź ilość wybranych zdjęć " />
  27. <input type="reset" value="Czyść wybór" />
  28. <br><br>Zaznaczono :
  29. <input id="check" type="text" size="4"><br><br>
  30.  
  31. <p><h1>Podaj swój komentarz:</h1></p>
  32. <textarea name="Komentarz" cols="100" rows="1" style="float:left; margin-left:10px;"></textarea>
  33. <br><br>
  34. <input type="submit" value="Wyślij formularz" />
  35. </form>
wNogachSpisz
Cytat(ant00n @ 11.12.2011, 22:55:52 ) *
Jak wysłać coś takiego na e-mail bez udziału programu pocztowego.

A co masz na myśli pisząc "program pocztowy".

Celem dostarczenia email, trzeba pogadać z serwerem MX:
http://en.wikipedia.org/wiki/MX_record

Prościej założyć darmową skrzynkę i łączyć się z jej serwerem SMTP.
-ant00n-
Chodzi mi o to aby zawartość tego formularza wysłać na ustalony adres email i żeby skrypt robił to sam bez uruchamiania zewnętrznego programu pocztowego.
Pozdrawiam
-ant00n-
OK. Trzymajmy się jednego:
Mam kawałek skryptu który działa i zlicza zaznaczone checkboxy (o to mi chodzi). Nie znam się na PHP a chcę aby zaznaczone checkboxy oraz treść komentarza została wysłana do mnie na email bez udziału programu pocztowego. Trzeba to zrobić na PHP - wiem ale jest to mi zupełnie obce.

Poniżej działający kawałek kodu: http://www.fotobracia.pl/wybierajka9.html

  1. <form method="post" name=test>
  2. <script language="Javascript1.3">
  3. function licz(form) {
  4. var zaznaczone = 0;
  5. var limit = 999;
  6. var max = form.ckbox.length;
  7. for (var idx = 0; idx < max; idx++) {
  8. if (eval("document.test.ckbox[" + idx + "].checked") == true) {
  9. zaznaczone += 1;
  10. }
  11. }
  12. document.getElementById("check").value=zaznaczone + "/" + max;
  13. }
  14. zaznaczone=0; //jeśli jakieś checkboxy są domyślnie zaznaczone, to tu wpisać ich liczbę
  15. max=999;
  16. function sprawdz(ktory) {
  17. if(!ktory.checked) zaznaczone--; else if(zaznaczone==max) {ktory.checked=0; alert('[komunikat...]');} else zaznaczone++;
  18. }
  19. 1<input type="checkbox" name="ckbox" value="1" onclick="licz(this.form);sprawdz(this)" /> checkbox 1<BR />
  20. 2<input type="checkbox" name="ckbox" value="2" onclick="licz(this.form);sprawdz(this)" /> checkbox 2<BR />
  21. 3<input type="checkbox" name="ckbox" value="3" onclick="licz(this.form);sprawdz(this)" /> checkbox 3<BR />
  22. 4<input type="checkbox" name="ckbox" value="4" onclick="licz(this.form);sprawdz(this)" /> checkbox 4<BR />
  23. 5<input type="checkbox" name="ckbox" value="5" onclick="licz(this.form);sprawdz(this)" /> checkbox 5<BR />
  24. 6<input type="checkbox" name="ckbox" value="6" onclick="licz(this.form);sprawdz(this)" /> checkbox 6<BR />
  25. 7<input type="checkbox" name="ckbox" value="7" onclick="licz(this.form);sprawdz(this)" /> checkbox 7<BR />
  26. <input type="button" onclick="licz(this.form)" value=" Sprawdź ilość wybranych zdjęć " />
  27. <input type="reset" value="Czyść wybór" />
  28. <br><br>Zaznaczono :
  29. <input id="check" type="text" size="4"><br><br>
  30.  
  31. <p><h1>Podaj swój komentarz:</h1></p>
  32. <textarea name="Komentarz" cols="100" rows="1" style="float:left; margin-left:10px;"></textarea>
  33. <br><br>
  34.  
  35. </form>


BARDZO PROSZĘ O POMOC exclamation.gif!
ant00n
Zrobiłem (znaczy KOLEGA pomogli) i już mi działa smile.gif)))))))
Teraz problem jest następujący:
Działa pod wszystkimi przeglądarkami oprócz IE. Problem polega na tym że pod IE nie pokazuje ile checkboxów wybrałem. Wysyła na e-mail wszędzie spoko.

Proszę o pomoc............
Kod html:

  1. <script language="Javascript1.3">
  2. function licz() {
  3. var zaznaczone = 0;
  4. var limit = 999;
  5. forma = document.getElementById("forma");
  6. elementy = forma.elements['foto[]'];
  7. var max = elementy.length;
  8. for (var idx = 0; idx < max; idx++) {
  9. if (eval(elementy[idx].checked) == true) {
  10. zaznaczone += 1;
  11. }
  12. }
  13. document.getElementById("check").value=zaznaczone + "/" + max;
  14. }
  15. zaznaczone=0; //jeśli jakieś checkboxy są domyślnie zaznaczone, to tu wpisać ich liczbę
  16. max=999;
  17.  
  18. function sprawdz(ktory) {
  19. if(!ktory.checked) zaznaczone--; else if(zaznaczone==max) {ktory.checked=0; alert('[komunikat...]');} else zaznaczone++;
  20. }
  21.  
  22. <form id="forma" name="forma" action="fotoprint.php" method="post">
  23.  
  24. <div>
  25. <br>
  26. <div id="img_area"><!--BEGIN img_area-->
  27. <hr/>
  28. <br>
  29. <div id="text_field"><!--BEGIN text_field-->
  30. <input type="checkbox" name="foto[]" value="1" onclick="licz();sprawdz(this)" style="float:left; margin-left:0px;"/><h1>Zdjęcie 01</h1>
  31. </div>
  32. </div>
  33.  
  34. <div id="img_area"><!--BEGIN img_area-->
  35. <hr/>
  36. <br>
  37. <div id="text_field"><!--BEGIN text_field-->
  38. <input type="checkbox" name="foto[]" value="2" onclick="licz();sprawdz(this)" style="float:left; margin-left:0px;"/><h1>Zdjęcie 02</h1>
  39. </div>
  40. </div>
  41.  
  42. <div id="img_area"><!--BEGIN img_area-->
  43. <hr/>
  44. <br>
  45. <div id="text_field"><!--BEGIN text_field-->
  46. <input type="checkbox" name="foto[]" value="3" onclick="licz();sprawdz(this)" style="float:left; margin-left:0px;"/><h1>Zdjęcie 03</h1>
  47. </div>
  48. </div>
  49.  
  50.  
  51.  
  52.  
  53. <div id="img_area"><!--BEGIN img_area-->
  54.  
  55. <input type="button" onclick="licz(this.form)" value=" Sprawdź ilość wybranych zdjęć " />
  56.  
  57. <font color="#219ff7"><strong>Zaznaczono:</strong></font>
  58. <input id="check" type="text" size="6">
  59. <br>
  60. <input type="reset" value="Wyczyść dane" />
  61.  
  62.  
  63. <br><br>
  64. <font color="#219ff7"><strong>Dodaj swój komentarz:</strong></font><br>
  65. <textarea name="Komentarz" cols="50" rows="5" style="float:left; margin-left:0px;"></textarea>
  66. <br><br><br><br><br>
  67.  
  68. <!-- Przycisk WYŚLIJ -->
  69. <input type="submit" value="Wyślij formularz" />
  70. </div>
  71. </div>
  72.  
  73. </form>


Kod PHP:
  1. <?php
  2. $headers = 'MIME-Version: 1.0' . "\r\n";
  3. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  4. $imie = $_POST['imie'];
  5. $plec = $_POST['plec'];
  6. $koment=$_POST['Komentarz'];
  7. $rodzaj=$_POST['Rodzaj'];
  8. $format=$_POST['Format'];
  9. $foto = implode(', ', $_POST['foto']);
  10. $to = 'nazwa@domena.pl';
  11. $subject = 'Zdjęcia do druku';
  12. $message = '|Zdjęcia do druku: '.$foto. ' ' .$plec .'|Imię i nazwisko: '.$imie . ' |Komentarz: ' .$koment .'|'.$rodzaj.'|'.$format.'';
  13. mail($to, $subject, $message, $headers);
  14. echo "<meta HTTP-EQUIV='REFRESH' content='2; url=fotoprint_WORK.html'><center><font color='green'><b>Mail wysłany.</center>";
  15.  
  16. ?>
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.