Отправить письмо с php с html данными формы - PullRequest
0 голосов
/ 05 февраля 2020

Понятия не имею, как работает php. Я использую JavaScript для каждой логики c, но это только для использования клиентом, а php для сервера, я думаю. Я получаю сообщение об ошибке 405 (метод не разрешен).

Как я могу отправить себе электронное письмо (пример: "example@gmail.com") с входными данными из формы html?

//** IF u need it **

// Working Contact Form
$('#contact-form').submit(function() {
  var action = $(this).attr('action');

  $("#message").slideUp(750, function() {
    $('#message').hide();

    $('#submit').before('').attr('disabled', 'disabled');

    $.post(action, {
        name: $('#name').val(),
        email: $('#email').val(),
        comments: $('#comments').val(),
      },
      function(data) {
        document.getElementById('message').innerHTML = data;
        $('#message').slideDown('slow');
        $('#cform img.contact-loader').fadeOut('slow', function() {
          $(this).remove()
        });
        $('#submit').removeAttr('disabled');
        if (data.match('success') != null) $('#cform').slideUp('slow');
      }
    );

  });

  return false;

});

// Example starter JavaScript for disabling form submissions if there are invalid fields
(function() {
  'use strict'
  window.addEventListener('load', function() {
    // Fetch all the forms we want to apply custom Bootstrap validation styles to
    var forms = document.getElementsByClassName('needs-validation')

    // Loop over them and prevent submission
    Array.prototype.filter.call(forms, function(form) {
      form.addEventListener('submit', function(event) {
        console.log("test")
        if (form.checkValidity() === false) {
          event.preventDefault()
          event.stopPropagation()
        }
        form.classList.add('was-validated')
      }, false)
    })
  }, false)
}())
//Ignore CSS, doesnt matter
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="post" action="php/contact.php" name="contact-form" id="contact-form">
  <div class="row">
    <div class="col-lg-6">
      <div class="row">
        <div class="col-lg-12 col-md-6">
          <div class="form-group">
            <input name="name" id="name" type="text" class="form-control border rounded" placeholder="Name :">
          </div>
        </div>
        <!--end col-->
        <div class="col-lg-12 col-md-6">
          <div class="form-group">
            <input name="email" id="email" type="email" class="form-control border rounded" placeholder="Email :">
          </div>
        </div>
        <!--end col-->
        <div class="col-lg-12">
          <div class="form-group">
            <input name="subject" id="subject" class="form-control border rounded" placeholder="Betreff :">
          </div>
        </div>
        <!--end col-->
      </div>
      <!--end row-->
    </div>
    <!--end col-->

    <div class="col-lg-6">
      <div class="form-group">
        <textarea name="comments" id="comments" rows="4" class="form-control border rounded" placeholder="Nachricht :"></textarea>
      </div>
    </div>
    <!--end col-->
  </div>
  <!--end row-->
  <div class="row">
    <div class="col-sm-12 text-right">
      <input type="submit" id="submit" name="send" class="submitBnt btn btn-pill btn-custom" value="Senden">
      <div id="simple-msg"></div>
    </div>
    <!--end col-->
  </div>
  <!--end row-->
</form>
<!--end form-->

Я использую VS-код с расширением LiveServer для создания веб-сайта. Могу ли я использовать php там или в чем проблема? Кстати, все еще есть проблема с JS я думаю ..?!

Если кто-нибудь знает, как помочь, пожалуйста, прокомментируйте! Спасибо.

1 Ответ

1 голос
/ 05 февраля 2020

Каждый файл .php открывается с ключевым словом <?php. Это означает, что этот файл содержит PHP код. HTML может использоваться в PHP файлах, поэтому для этого нет другого типа файла. Закройте файл php с помощью ?>.

Вы также можете иметь отдельные строки кода PHP, например, в HTML.

<?php $title = 'Hello World'; ?>
<h1><?php echo $title; ?></h1>

You ' Вам нужно будет собрать данные, которые отправляют на сервер. PHP имеет глобальные переменные , которые являются переменными, которые доступны везде в любом файле. Например, переменная $_GET. Если вы используете метод GET для отправки ваших данных, вы сможете прочитать эти данные из глобальной переменной $_GET в файле, в который вы их отправляете.

$_GET является ассоциативным массивом . Таким образом, отправленные данные хранятся примерно так:

[
  'name' => '',
  'email' => '',
  'comments' => ''
]

Ассоциативные массивы сопоставимы с объектами в JavaScript. У них обоих есть ключ и значение. Проверьте, установлен ли ключ с помощью функции isset() в PHP.

Поскольку вы разрешаете пользователю отправлять данные, важно sanitize их данные. Он может содержать вредоносный код и должен рассматриваться как таковой, пока вы не очистите его . filter_var - это функция PHP, которая может сделать это за вас.

Теперь, когда у вас есть данные и вычистили их, вы можете использовать функцию mail, чтобы отправить письмо адрес электронной почты. Функция mail возвращает логическое значение в зависимости от того, была ли почта успешно отправлена.

Удачи!

<?php

/** 
 * Get all the send data from JS.
 * $_GET is a global PHP variable. It is an array
 * which contains the data sent with the GET method.
 */
$name     = isset($_GET['name']) ? $_GET['name'] : '';
$email    = isset($_GET['email']) ? $_GET['email'] : '';
$comments = isset($_GET['comments']) ? $_GET['comments'] : '';

/**
 * All data that a user can send must be treated as dirty.
 * Therefor it is important to filter all malicious characters
 * from the data. Otherwise you are open to vulnerabilities.
 */
$name     = filter_var($name, FILTER_SANITIZE_STRING);
$email    = filter_var($email, FILTER_SANITIZE_EMAIL);
$comments = filter_var($comments, FILTER_SANITIZE_FULL_SPECIAL_CHARS);

/**
 * Now the data is received and sanitized we can use it
 * to send an email with.
 */
$to      = $email; // The email address to send to.
$from    = 'sender@example.com'; // Your email address.
$subject = 'the subject'; 
$message = $comments; // I assume comments is the message. 
$headers = 'From: ' . $from . "\r\n" . 'Reply-To: ' . $from . "\r\n" . 'X-Mailer: PHP/' . phpversion(); 

/**
 * Send the email.
 * The mail() function returns a true or false based
 * on if the email was sent successfully.
 */
$mail_status = mail($to, $subject, $message, $headers);

/**
 * Send a message back to JS based on if the mail has beent sent or not.
 */
if ($mail_status === true) {
  return 'Mail has been sent';
} else {
  return 'Sending the mail has failed';
}

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...