Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][HTML][PHP]Formularz kontaktowy nie dostarcza wiadomości
Forum PHP.pl > Forum > Przedszkole
abaza
Hej,
To moje pierwsze zapytanie więc prosze o wyrozumiałość.
Mam problem odnośnie stworzenia formularza zamówienia. Póki co dodalam kilka pól, które w przyszłości zamierzam rozbudować ale niestety po sprawdzeniu wiadomości nie dochodzą. Po wypełnieniu pól formularza wyskakuje komunikat: "Ups, tutaj nic nie ma" i wraca na stronę główną. Formularz robiłąm zgodnie z instrukcją na stronie: https://devcave.pl/dajsiepoznac2017/formula...taktowy-HTML-JS.
Pewnie coś pokręciłam ale dopiero się uczę więc nie rozumiem gdzie jest błąd. Prosze o pomoc. Poniżej wklejam kod.
funtions.php:
  1. <?php
  2.  
  3. use Respect\Validation\Exceptions\NestedValidationException;
  4. use Respect\Validation\Rules\Email;
  5. use Respect\Validation\Rules\Length;
  6. use Respect\Validation\Rules\StringType;
  7. use Respect\Validation\Rules\NotEmpty;
  8. use Respect\Validation\Validator;
  9.  
  10. require_once __DIR__ . '/vendor/autoload.php';
  11.  
  12. /**
  13.  * @param array $form
  14.  *
  15.  * @return array of errors
  16.  */
  17. function validateContactForm(array $form): array
  18. {
  19. $errors = [];
  20. $rules = [
  21. 'email' => (new Validator())->addRules([new NotEmpty(), new Email()]),
  22. 'name' => (new Validator())->addRules([new NotEmpty(), new StringType(), new Length(4, 78)]),
  23. 'message' => (new Validator())->addRules([new NotEmpty(), new StringType(), new Length(8, 6000)]),
  24. ];
  25. $validationMessages = (require_once __DIR__ . '/settings.php')['validationMessages'];
  26.  
  27. foreach ($rules as $key => $validator) {
  28. /** @var $validator Validator */
  29. try {
  30. $validator->setName($key)->assert($form[$key] questionmark.gif null);
  31. } catch (NestedValidationException $exception) {
  32. $exception->findMessages($validationMessages);
  33. $errors[$key] = $exception->getMessages();
  34. }
  35. }
  36. if (validateReCaptcha($form['g-recaptcha-response'] questionmark.gif '') === false) {
  37. $errors['recaptcha'][] = "Potwierdź, że nie jesteś robotem!";
  38. }
  39. return $errors;
  40. }
  41. function validateReCaptcha(string $code): bool
  42. {
  43. $url = 'https://www.google.com/recaptcha/api/siteverify?' . http_build_query([
  44. 'secret' => (require __DIR__ . '/settings.php')['reCaptcha']['secret'],
  45. 'response' => $code,
  46. ]);
  47. $content = file_get_contents($url);
  48. $response = json_decode($content, true);
  49. return $response['success'];
  50. }
  51. function getMailer(): Swift_Mailer
  52. {
  53. $config = (require __DIR__ . '/settings.php')['mailer'];
  54. $transport = new Swift_SmtpTransport($config['host'], $config['port']);
  55. $transport->setUsername($config['username']);
  56. $transport->setPassword($config['password']);
  57. return new Swift_Mailer($transport);
  58. }
  59. function prepareMail(array $params): Swift_Message
  60. {
  61. $config = (require __DIR__ . '/settings.php')['mailer'];
  62. $mail = new Swift_Message(
  63. $params['name'],
  64. $params['message'],
  65. 'text/plain',
  66. 'UTF-8'
  67. );
  68. $mail->setFrom($params['userEmail']);
  69. $mail->setReplyTo($params['userEmail']);
  70. $mail->setTo($config['email']);
  71. return $mail;
  72. }
  73. function sendMail(array $params): bool
  74. {
  75. $mailer = getMailer();
  76. return $mailer->send(prepareMail($params));
  77. }


emailform.php:
  1. <?php
  2. require_once 'swiftmailer/lib/swift_required.php';
  3. $config = require_once 'emailconfig.php';
  4. $secretKey = $config['secretKey'];
  5. $userEmail= $_POST['userEmail'];
  6. $subject= filter_var($_POST['subject'], FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);
  7. $messageText= filter_var($_POST['message'], FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);
  8. $checkIfBot = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secretKey.'&response='.$_POST['g-recaptcha-response']);
  9. $recaptcha = json_decode($checkIfBot);
  10.  
  11. if(!filter_var($name, FILTER_VALIDATE_EMAIL)){
  12. $alert = 'To pole jest wymagane!';
  13. }
  14. else if (empty($email)){
  15. $alert = 'Wpisz swój adres e-mail!';
  16. }
  17. else if (empty($message)){
  18. $alert = 'Pusta wiadomość? Napisz coś!';
  19. }
  20. else if($recaptcha->success===false){
  21. $alert = 'Potwierdź, że nie jesteś robotem!';
  22. }
  23. else {
  24. $transport = Swift_SmtpTransport::newInstance($config['mailServer'], $config['port'])
  25. ->setUsername($config['username'])
  26. ->setPassword($config['password']);
  27. $mailer = Swift_Mailer::newInstance($transport);
  28. $message = Swift_Message::newInstance($subject)
  29. ->setFrom($name)
  30. ->setReplyTo($email)
  31. ->setTo($config['myEmail'])
  32. ->setBody($message);
  33. $emailSent = $mailer->send($message);
  34. if ($emailSent){
  35. $alert = 'Wysłano. Dzięki za wiadomość!';
  36. }
  37. else {
  38. $alert = 'Coś poszło nie tak.';
  39. }
  40. }
  41. $response = json_encode(array(
  42. 'text' => $alert
  43. ));
  44. exit($response);
  45. ?>
sadistic_son
Komunikat "Ups, tutaj nic nie ma" nawet nie występuje w kodzie który wkleiłaś, więc ciężko stwierdzić co się tam dzieje. Poszkaj fragmentu z tym komunikatem i zobacz co go wywołuje. Pewnie puste pola formularza, ale to trzeba przejrzeć jakie są warunki o tym decyzujące i obstawiam, że w tym fragmencie właśnie je znajdziesz. Bez tego nie ma nawet sensu analizować tego co wkleiłaś powyżej.
abaza
Dziękuję za szybką odpowiedź. Znalazłam szablon strony błędu ale nadal nic mi to nie wyjaśniło. Poniżej wklejam kod:
  1. <?php
  2. global $wpdb;
  3. $search_term = urldecode( stripslashes( untrailingslashit( substr( $_SERVER['REQUEST_URI'], 1 ) ) ) );
  4. $find = array( "'.html'", "'.+/'", "'[-/_]'" ); $replace = " ";
  5. $search_term = trim( preg_replace( $find, $replace, $search_term ) );
  6. $search_term_q = esc_js( sanitize_text_field( urlencode( strip_tags( $search_term ) ) ) );
  7.  
  8. $redirect_location = home_url() . '/';
  9. get_header();
  10. ?>
  11. <div class="container main">
  12. <div class="row">
  13. <div class="main col-md-9">
  14. <h1 class="section-title-lg"><?php _e( 'Oops.. there\'s nothing here', 'franz-josef' ); ?></h1>
  15.  
  16. </div>
  17.  
  18. <?php get_sidebar(); ?>
  19.  
  20. </div>
  21. </div>
  22.  
  23. <script type="text/javascript">
  24. setTimeout(function(){window.location.replace( "<?php echo esc_url( $redirect_location ); ?>" );},2000);
  25. </script>
  26.  
  27. <?php get_footer(); ?>
nospor
z tego co widze to korzystasz wordpress? I wiadomosc bledu ktora masz wordpress daje gdy nie znaleziono strony. Wiec defacto to nie jest problem z kodem (przynajmniej na tym etapie) a ze strona na ktora przekierowujesz formularz - wordpress jej nie widzi. Niestety nie znam wordpress wiec ni ewiem jak to powinno wygladac poprawnie
sadistic_son
Jako że wypowiadałem się wcześniej, to wypada teraz napisać, że niestety ale też Ci nie pomogę bo nie znam WordPress. A tak szczerze to jeśli nospor Ci nie jest w stanie pomóc to marne Twoje szanse sad.gif
abaza
Dziękuję za odpowiedź smile.gif
nospor
Cytat
A tak szczerze to jeśli nospor Ci nie jest w stanie pomóc to marne Twoje szanse

bez przesady. Ja poprostu nie znam narzedzia, ktore jest tu uzyte. Ktos inny, moze ogarniac
Salvation
Cytat(abaza @ 8.05.2024, 10:52:27 ) *
Formularz robiłąm zgodnie z instrukcją na stronie: https://devcave.pl/dajsiepoznac2017/formula...taktowy-HTML-JS.
Pewnie coś pokręciłam ale dopiero się uczę więc nie rozumiem gdzie jest błąd.

Szczerze powiedziawszy, to instrukcja, którą znalazłaś, jest do strony "prostej" - bez frameworka czy CMS-a.
Ty masz Wordpressa, więc kod musisz _świadomie_ dostosować pod silnik. Jeżeli chcesz mieć 100% kontroli nad kodem, to robisz wtyczkę albo... wykorzystujesz już jakąś wtyczkę ze sklepu.
Lub możesz też zrobić custom form sama: https://quadlayers.com/create-a-form-in-wordpress/
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-2024 Invision Power Services, Inc.