Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz z dwoma przyciskami submit
Forum PHP.pl > Forum > Przedszkole
se6e
Witam, chciałbym aby formularz wysyłał dane z dwóch przycisków.

Czyli mamy BUTTON1 oraz BUTTON2

Jeśli nacisnę BUTTON1 to temat wiadomości będzie mieć wartość przypisaną do tego przycisku czyli np. "Wiadomość z BUTTON1"

Jeśli nacisnę BUTTON2 to temat wiadomości będzie mieć wartość przypisaną do BUTTON2 np. "Wiadomość z BUTTON2"

Kod HTML Formularza:
  1. <form action="form/send.php" method="post" id="contactform">
  2. <input type="text" name="contact_name" placeholder="Imię i nazwisko" required="required" tabindex="1" />
  3. <input type="email" name="contact_email" placeholder="Adres e-mail" required="required" tabindex="2" />
  4. <textarea rows="5" columns="10" name="contact_body" placeholder="Treść wiadomości" required="required" tabindex="3"></textarea>
  5. <input type="submit" value="Wyślij" tabindex="5" name="BUTTON1" /><input type="submit" value="Wyślij2" tabindex="5" name="BUTTON2" />
  6. </form>


Plik PHP send.php
  1. <?php
  2.  
  3. require_once 'class.phpmailer.php';
  4.  
  5. $_POST = array_map('trim', $_POST);
  6.  
  7. $error = false;
  8.  
  9. $mail = new PHPMailer();
  10.  
  11. if (!isset($_POST['contact_name']) || empty($_POST['contact_name'])) {
  12. $error = true;
  13. }
  14.  
  15. if (!isset($_POST['contact_email']) || empty($_POST['contact_email']) || !PHPMailer::ValidateAddress($_POST['contact_email'])) {
  16. $error = true;
  17. }
  18.  
  19. if (!isset($_POST['contact_body']) || empty($_POST['contact_body'])) {
  20. $error = true;
  21. }
  22.  
  23.  
  24. if ($error) {
  25. exit('nok');
  26. }
  27.  
  28.  
  29. $mail->CharSet = 'UTF-8';
  30.  
  31. $mail->SetFrom($_POST['contact_email'], $_POST['contact_name']);
  32. $mail->AddAddress('se6edesign@gmail.com');
  33. $mail->Subject = 'wiadomość z BUTTON1 lub BUTTON2';
  34. $mail->Body = $_POST['contact_body'];
  35.  
  36. if (!$mail->Send()) {
  37. exit('nok');
  38. }
  39.  
  40. exit('ok');
Turson
  1. if(isset($_POST['BUTTON1'])){
  2. //naciśnięto BUTTON1
  3. }
  4. elseif($_POST['BUTTON2'])){
  5. //naciśnięto BUTTON2
  6. }
trueblue
W $_POST dostaniesz albo zmienną BUTTON1 albo BUTTON2, zbadaj ich istnienie i przypisz odpowiednie komunikaty.
timon27
A nie prościej dla ciebie i intuicyjniej dla użytkownika:
jeden przycisk 'wyślij' ale przed nim SELCT z dwoma opcjami.
questionmark.gif
Kshyhoo
Przenoszę.
se6e
Cytat(trueblue @ 23.03.2014, 18:31:33 ) *
W $_POST dostaniesz albo zmienną BUTTON1 albo BUTTON2, zbadaj ich istnienie i przypisz odpowiednie komunikaty.


A co mam napisać w:

$mail->Subject = 'wiadomość z BUTTON1 lub BUTTON2';
trueblue
  1. $mail->Subject = 'wiadomość z '.(isset($_POST['BUTTON1'])?'BUTTON1':'BUTTON2');
se6e
Ok, zaraz sprawdzę czy to będzie działać


Nie działa

Tutaj jest link do tych plików: https://drive.google.com/file/d/0B4K3l4a8kh...dit?usp=sharing

trueblue
Co kryje się pod pojęciem "nie działa"?
se6e
Formularz muli i nie wysyła treści
trueblue
A jeśli przywrócisz temat jak w przykładzie w linii 33, to wtedy jaki jest objaw?
se6e
To samo nie wysyła

if(isset($_POST['BUTTON1'])){
//naciśnięto BUTTON1 <<< co tu może być?
}
elseif($_POST['BUTTON2'])){
//naciśnięto BUTTON2
}
trueblue
Serwer działa?
se6e
na 100% serwer działa
Turson
Cytat(se6e @ 23.03.2014, 19:03:13 ) *
To samo nie wysyła

if(isset($_POST['BUTTON1'])){
//naciśnięto BUTTON1 <<< co tu może być?
}
elseif($_POST['BUTTON2'])){
//naciśnięto BUTTON2
}

  1. if(isset($_POST['BUTTON1'])){
  2. $subject = "Przycisk 1";
  3. }
  4. elseif($_POST['BUTTON2'])){
  5. $subject = "Przycisk 2";
  6. }
  7. $mail->Subject = $subject
se6e
To też nie pomaga, chyba ten skrypt phpmailer.php za mocno przeszkadza
Turson
Jak phpmailer może przeszkadzać skoro do skrypt do wysyłania emaili? Nie widzę w tym kodzie konfiguracji serwera SMTP/POP3 więc się nie dziwię, że nie wysyła
http://phpedia.pl/wiki/Phpmailer
se6e
to spójrz na 3 linijkę, załączany jest skrypt do wysyłania maili - on działa tylko jak zaczynam zmieniać to muli i nie wysyła
trueblue
A kiedyś działał?
Pisałeś, że po przywróceniu tematu na:
  1. $mail->Subject = 'wiadomość z BUTTON1 lub BUTTON2';

również nie działa.
se6e
Działa gdy nie ma

  1. if(isset($_POST['BUTTON1'])){
  2. //naciśnięto BUTTON1 <<< co tu może być?
  3. }
  4. elseif($_POST['BUTTON2'])){
  5. //naciśnięto BUTTON2
  6. }
Turson
Pokaż cały kod po zmianach które nie dzialaja
se6e
  1.  
  2. <form action="form/send.php" method="post" id="contactform">
  3. <input type="text" name="contact_name" placeholder="Imię i nazwisko" required="required" tabindex="1" />
  4. <input type="email" name="contact_email" placeholder="Adres e-mail" required="required" tabindex="2" />
  5. <textarea rows="5" columns="10" name="contact_body" placeholder="Treść wiadomości" required="required" tabindex="3"></textarea>
  6. <input type="submit" value="Wyślij" tabindex="5" name="BUTTON1" />
  7. <input type="submit" value="Wyślij" tabindex="5" name="BUTTON2" />
  8. </form>



  1. <?php
  2.  
  3. require_once 'class.phpmailer.php';
  4.  
  5. $_POST = array_map('trim', $_POST);
  6.  
  7. $error = false;
  8.  
  9. $mail = new PHPMailer();
  10.  
  11. if (!isset($_POST['contact_name']) || empty($_POST['contact_name'])) {
  12. $error = true;
  13. }
  14.  
  15. if (!isset($_POST['contact_email']) || empty($_POST['contact_email']) || !PHPMailer::ValidateAddress($_POST['contact_email'])) {
  16. $error = true;
  17. }
  18.  
  19. if (!isset($_POST['contact_body']) || empty($_POST['contact_body'])) {
  20. $error = true;
  21. }
  22.  
  23. if(isset($_POST['BUTTON1'])){
  24. $subject = "Przycisk 1";
  25. }
  26. elseif($_POST['BUTTON2'])){
  27. $subject = "Przycisk 2";
  28. }
  29.  
  30.  
  31. if ($error) {
  32. exit('nok');
  33. }
  34.  
  35. $mail->CharSet = 'UTF-8';
  36.  
  37. $mail->SetFrom($_POST['contact_email'], $_POST['contact_name']);
  38. $mail->AddAddress('se6edesign@gmail.com');
  39. $mail->Subject = $subject;
  40. $mail->Body = $_POST['contact_body'];
  41.  
  42. if (!$mail->Send()) {
  43. exit('nok');
  44. }
  45.  
  46. exit('ok');

Masz możliwość sprawdzenia tego na własnym serwerze?
Turson
A gdzie jest send?

Zamień na
  1. if(isset($_POST['BUTTON1'])) $subject = "Przycisk 1";
  2. else $subject = "Przycisk 2";
se6e
Wysyła, przypisuje temat ale w obu przypadkach temat to "Przycisk2"

  1. if(isset($_POST['BUTTON1'])) $subject = "Przycisk 1";

ten element funkcji nie działa
trueblue
Przed warunkiem wydrukuj tablicę $_POST ( print_r($_POST); ) i pokaż wynik.
se6e
ten sposób na sprawdzenie nie działa, tzn. formularz muli, nie wysyła, nic nie wyświetla się

Może .js powoduje te problemy?

  1. $(function() {
  2. var check_1 = (Math.floor(Math.random() * 9) + 1).toString(),
  3. check_2 = (Math.floor(Math.random() * 9) + 1).toString(),
  4. check = check_1 + check_2;
  5.  
  6. $('#contactform span.form_check_1').text(check_1);
  7. $('#contactform span.form_check_2').text(check_2);
  8. $('#contactform input[name="contact_check_data"]').val(check);
  9.  
  10. var sending = false;
  11. $('#contactform').on('submit', function(e) {
  12. var $form = $(this), $submit = $('input[type="submit"]', $form);
  13.  
  14. e.preventDefault();
  15.  
  16. if (sending) {
  17. return false;
  18. }
  19.  
  20. $('.form-error', $form).remove();
  21.  
  22. $('input, textarea', $form).prop('readonly', true);
  23. $submit.val('Wysyłam');
  24. sending = true;
  25.  
  26. $.post($form.attr('action'), $form.serialize(), function(data) {
  27. if (data === 'ok') {
  28. $form.slideUp('fast', function() {
  29. $form.after('<div class="form-success">Wiadomość została wysłana! Skontaktujemy się z Tobą jak tylko to będzie możliwe.</div>');
  30. });
  31.  
  32. return true;
  33. }
  34.  
  35. $form.prepend('<div class="form-error">Wystąpił błąd podczas wysyłania formularza. Upewnij się, że wypełniłeś wszystkie pola i poprawnie rozwiązałeś działanie.</div>');
  36. $('input, textarea', $form).prop('readonly', false);
  37. $submit.val('Wyślij wiadomość');
  38. sending = false;
  39.  
  40. return false;
  41. }, 'text');
  42. });
  43. });
trueblue
jQuery nie serializuje przycisku submit.

Do kodu js na początku dodaj:
  1. $('#contactform input:submit').each(function(){
  2. $(this).click(function(){
  3. $('#contactform input[name="button"]').val($(this).attr('name'));
  4. });
  5. });

W formularzu za buttonami dodaj:
  1. <input type="hidden" name="button" value=""/>

Wartość otrzymasz w $_POST['button'], więc na tym opieraj warunek tematu.
se6e
  1. if(isset($_POST['button'])) $subject = "Przycisk 1";
  2. else $subject = "Przycisk 2";


tak ma teraz wyglądać?
trueblue
Nie, mój błąd. Warunku nie musi być, bo w $_POST['button'] zawsze coś dostaniesz, pod warunkiem, że JS działa i działa poprawnie.
  1. $mail->Subject = 'wiadomość z '.$_POST['button'];
se6e
mój błąd, TERAZ DZIAŁA
se6e
A jak dodać do tego formularza kolejne elementy które będą się wyświetlać w treści wiadomości czyli body?
trueblue
Tak jak input i textarea, otrzymasz je w tablicy $_POST.
se6e
$mail->Body = $_POST['contact_body']; <-- jak to powinno wyglądać jeśli chcę dodać np. $_POST['contact_url']; , $_POST['contact_tel'];
Turson
  1. $mail->Body = $_POST['contact_body'].'Kontakt url: '.$_POST['contact_url'].', tel: '.$_POST['contact_tel'];
trueblue
Cytat(se6e @ 24.03.2014, 12:13:04 ) *
$mail->Body = $_POST['contact_body']; <-- jak to powinno wyglądać jeśli chcę dodać np. $_POST['contact_url']; , $_POST['contact_tel'];


  1. $mail->Body = $_POST['contact_body'].' '.$_POST['contact_url'].' '.$_POST['contact_tel'];

To są podstawy...
se6e
A czy ktoś mówił że znam PHP?

Dziękuję Wam za pomoc thumbsupsmileyanim.gif
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.