@qfrontend

Как подключить форму React к PHPMailer?

Приветствую) Не получается подключить форму обратной связи сделанную на React к PHPMailer... Вообще не знаю PHP и серверные языки, надо как то подключить эту форму обратной связи. Сайт залит на бесплатный хостинг ru.000webhost.com. Или может есть какие то другие варианты подключений.....? (НЕ google forms) Как вы подключаете формы на React?
React (Form.js)
import React, { Component } from "react";
import mod from "./Form.module.sass";

class Form extends Component {
  constructor(props) {
    super(props);
    this.state = {
      name: "",
      email: "",
      text: "",
      myfile: ""
    };
  }
  Change(e) {
    const { id, value } = e.currentTarget;
    this.setState({ [id]: value });
  }
  onSubmit(e) {
    e.preventDefault();
    let formData = new FormData();
    if (this.state.myfile) {
      formData.append("myfile", this.state.myfile);
    }
    formData.append("name", this.state.name);
    formData.append("email", this.state.email);
    formData.append("text", this.state.text);
    fetch("send.php", {
      method: "POST",
      body: formData,
      headers: {
        "Content-Type": "multipart/form-data"
      }
    }).then(response => {
      response.json().then(data => {
        console.log("Successful" + data);
      });
    });
  }
  render() {
    const { name, email, text } = this.state;
    return (
      <form
        id="form"
        encType="multipart/form-data"
        method="post"
        className={mod.form}
        onSubmit={this.onSubmit.bind(this)}
      >
        <p>Имя</p>
        <input
          id="name"
          name="name"
          type="text"
          value={name}
          placeholder="Представьтесь"
          onChange={this.Change.bind(this)}
        />
        <p>Email</p>
        <input
          id="email"
          name="email"
          type="text"
          value={email}
          placeholder="Укажите почту"
          onChange={this.Change.bind(this)}
        />
        <p>Сообщение</p>
        <textarea
          id="text"
          name="text"
          value={text}
          onChange={this.Change.bind(this)}
        />
        <p>Прикрепить файлы</p>
        <input
          id="myfile"
          type="file"
          name="myfile[]"
          multiple
          onChange={this.Change.bind(this)}
        />
        <p>
          <input value="Отправить" type="submit" />
        </p>
      </form>
    );
  }
}

export default Form;

PHPMailer (send.php)
<?php
// Файлы phpmailer
require 'phpmailer/PHPMailer.php';
require 'phpmailer/SMTP.php';
require 'phpmailer/Exception.php';
// Переменные, которые отправляет пользователь
$name = $_POST['name'];
$email = $_POST['email'];
$text = $_POST['text'];
$mail = new PHPMailer\PHPMailer\PHPMailer();
try {
    $msg = "ok";
    $mail->isSMTP();   
    $mail->CharSet = "UTF-8";                                          
    $mail->SMTPAuth   = true;
    // Настройки вашей почты
    $mail->Host       = 'smtp.gmail.com'; // SMTP сервера GMAIL
    $mail->Username   = 'login'; // Логин на почте
    $mail->Password   = '*******'; // Пароль на почте
    $mail->SMTPSecure = 'ssl';
    $mail->Port       = 465;
    $mail->setFrom('login@gmail.com', 'Alina'); // Адрес самой почты и имя отправителя
    // Получатель письма
    $mail->addAddress('qfrontend@gmail.com');  
    $mail->addAddress('testhalal2017@gmail.com'); // Ещё один, если нужен
    // Прикрипление файлов к письму
if (!empty($_FILES['myfile']['name'][0])) {
    for ($ct = 0; $ct < count($_FILES['myfile']['tmp_name']); $ct++) {
        $uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['myfile']['name'][$ct]));
        $filename = $_FILES['myfile']['name'][$ct];
        if (move_uploaded_file($_FILES['myfile']['tmp_name'][$ct], $uploadfile)) {
            $mail->addAttachment($uploadfile, $filename);
        } else {
            $msg .= 'Неудалось прикрепить файл ' . $uploadfile;
        }
    }   
}
        // -----------------------
        // Само письмо
        // -----------------------
        $mail->isHTML(true);
    
        $mail->Subject = 'Заголовок письма';
        $mail->Body    = "<b>Имя:</b> $name <br>
        <b>Почта:</b> $email<br><br>
        <b>Сообщение:</b><br>$text";
// Проверяем отравленность сообщения
if ($mail->send()) {
    echo "$msg";
} else {
echo "Сообщение не было отправлено. Неверно указаны настройки вашей почты";
}
} catch (Exception $e) {
    echo "Сообщение не было отправлено. Причина ошибки: {$mail->ErrorInfo}";
}

При загрузке страницы в консоли это сообщение
5d260fbae382d013206428.jpeg
После заполнения и отправки формы в консоли это
5d260ff809a7a491903386.jpeg
Во вкладке Network это
5d26105b3cd53490250748.jpeg
5d261069da641263041907.jpeg

Спасибо :)
  • Вопрос задан
  • 1470 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
При загрузке страницы в консоли это сообщение
просто не догрузился какой-то ресурс, картинка или шрифт, смотрите в нетворке подробности.

После заполнения и отправки формы в консоли это
...
Во вкладке Network это

Смотреть надо не ответ(хотя и его тоже), а что отправляет ваш скрипт, смотрите вкладку headers, там в отправляемых данных видно что уходит, и что нет, подозреваю что запрос уходит без данных name, email, text. А почему уже смотрите свой скрипт.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы