@toroptseva

(form method="POST" action="/form-submit/") Как сделать чтобы данные с формы приходили мне на почту? или хоть куда-то приходили?

Сайт на вордпрес. Вставляю на странице форму загрузки файлов сразу мне на гугл диск. (сервис drive uploader). Надо чтобы клиент загрузил файлы, написал кто он и т.п.
Форма имеет поле ввода контактной информации, которая должна приходить вместе с уведомлением о новой загрузке. Мне надо чтобы на почту письмо приходило с данными из этих полей и ссылка на эту загрузку. Или может вместе с файлами текстовый документ в туже папку падал с данными полей?

Понимаю что ГЛАВНАЯ ошибка это /form-submit/ - Что должно быть на этом месте ?

Форма:
<form method="POST" action="/form-submit/">
  Subject: <input type="text" name="subject" /><br />
  Email: <input type="text" name="email" /><br />
  Description: <textarea type="text" name="description"></textarea><br />
  Attach files:
  <input type="hidden" name="uploaded_files" id="uploaded_files" />
  <input type="hidden" name="uploaded_folder_link" id="uploaded_folder_link" />
  <input type="file" id="upload" name="upload" class="driveuploader-replace" /><br />
  <input type="submit" id="sendbtn">
</form>
<script>
  var sendbtn = document.getElementById('sendbtn');
  function driveUploaderCallback(status, result) {
    if (status == 'start') {
      // disable the send button during uploading
      sendbtn.disabled = true;
    } else if (status == 'done') {
      // format the list of files into the hidden form field
      sendbtn.disabled = false;
      var files = '';
      result.files.forEach(function(file) {
        files += '<a href="' + file.link + '">' + file.name + '</a><br>';
        });
      document.getElementById('uploaded_files').value = files;
      document.getElementById('uploaded_folder_link').value = result.folder.link;
    }
  }
</script>
<script src="https://driveuploader.com/upload/{uploader key}/embed.js"></script>
  • Вопрос задан
  • 771 просмотр
Пригласить эксперта
Ответы на вопрос 1
Главная ошибка в том, что вы просто дерете откуда-то код и не думаете как это вообще все должно работать.
Первое что нужно добавить: <form enctype="multipart/form-data">
Второе, вам нужно в поле action написать ссылку скрипта, который будет обрабатывать это, например action="/formHandler.php"
Третье, для того чтобы иметь какой-то доступ к файлу, вам его нужно для начала загрузить куда-то, средствами вордпресс это делается через данную функцию (думаю погуглить на русском варианты реализации вы сможете). Вот например кусок кода, который будет грузить файл на сайт и возвращать ссылку:
if(isset($_FILES['file2']) && wp_verify_nonce( $_POST['file2_nonce'], 'file2' ) ){
	$files = $_FILES['file2'];
	$overrides = array( 'test_form' => false );
	foreach ($files['name'] as $key => $value) {
	  if ($files['name'][$key]) {
	    $file = array(
	      'name'     => $files['name'][$key],
	      'type'     => $files['type'][$key],
	      'tmp_name' => $files['tmp_name'][$key],
	      'error'    => $files['error'][$key],
	      'size'     => $files['size'][$key]
	    );
	    $movefile = wp_handle_upload($file,$overrides);
            $file_url = $movefile['url']; // Ссылка на файл
	  }
	}
}

В этом коде важно обратить внимание на следующие вещи:
  • $_FILES['file2'] - тут file2 - название вашего инпута, куда вы грузите файл, например <input type="file" name="file2">
  • $_POST['file2_nonce'] - это скрытый инпут в форме, который вставляется так: <?php wp_nonce_field(); ?>Подробнее об этой функции
UPD: для работы куска кода с загрузкой файла, нужно в начале скрипта прописать:
require_once( $_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );

Собственно получив ссылку на файл, нам надо его как-то отправить, самым простым решением будет подключение библиотеки PHP Mailer. С помощью нее можно спокойно прикрепить файл методами:
$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name

В общем-то это вся, надеюсь, исчерпывающая информация по вашей проблеме.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 11:20
1000 руб./за проект
25 апр. 2024, в 11:02
5000 руб./за проект
25 апр. 2024, в 10:42
150000 руб./за проект