@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>
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 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

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

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

Войти через центр авторизации
Похожие вопросы