Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Добавление конвертируемого файла в форму PHP (https://javascript.ru/forum/jquery/63620-dobavlenie-konvertiruemogo-fajjla-v-formu-php.html)

Valeraertert 18.06.2016 20:01

Добавление конвертируемого файла в форму PHP
 
Путем длительного поиска и усилий удалось найти решение как сохранить таблицу HTML. Удалось это реализовать с помощью скрипта, который сохраняет таблицу в exel и все вроде ок, но .. все никак не удается найти рабочее решение, чтобы при нажатии на кнопку, активировалось действие скрипта 1(который выполняет функцию конвертации таблицы HTML в Exel), при этом конвертируемый файл Exel автоматически добавился в форму для отправки!
Для работы есть все необходимое форма, PHP обработчик, JS конвертер и JS отправка формы с вложением.. все полностью рабочее.. вот только связать не получается форма+конвертируемый файл..

Помогите пожалуйста.

Вот код:
скрипт 1 конвертер таблицы HTML
var tableToExcel = (function() {
  var uri = 'data:application/vnd.ms-excel;base64,'
    , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'
    , base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) }
    , format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) }
  return function(table, name) {
    if (!table.nodeType) table = document.getElementById(table)
    var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
    window.location.href = uri + base64(format(template, ctx))
  }
})()


форма
<form action="#" method="post" id="sendform" enctype="multipart/form-data"  >
      <input name="file"  value="1" size="40" type="file" />
      <input value="Отправить"  name="sendMail" type="submit" />

</form>

скрипт 2 для отправки формы
// Как только страничка загрузилась 
	window.onload = function () { 
		// проверяем поддерживает ли браузер FormData 
			if(!window.FormData) {
				/* * если не поддерживает, то выводим 
				* то выводим предупреждение вместо формы */
				var div = ge('content');
				div.innerHTML = "Ваш браузер не поддерживает объект FormData";
				div.className = 'notSupport'; 
			}
	}


$(document).ready(function(){
	// =validation
	var errorTxt = 'Ошибка отправки';
	$("#sendform").validate({
		submitHandler: function(form){
			var form = document.forms.sendform,
				formData = new FormData(form),
				xhr = new XMLHttpRequest();

			xhr.open("POST", "/send.php");
			
			xhr.onreadystatechange = function() {
				if (xhr.readyState == 4) {
					if(xhr.status == 200) {
						$("#sendform").html('<p class="thank">Данные отправлены!<p>');
					}
				}
			};
			xhr.send(formData);
		}
	});	
})

function sendSuccess(callback){
	$(callback).find("form fieldset").html(thank);


и еще PHP который работает в связке
<?php
$to = 'barselonaua@gmail.com';

if ( isset( $_POST['sendMail'] ) ) {
  $name  = substr( $_POST['name'], 0, 64 );
  $tel = substr( $_POST['tel'], 0, 64 );
  $email   = substr( $_POST['email'], 0, 64 );
  $message = substr( $_POST['message'], 0, 250 );
 

  if ( !empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0 ) {
    $filepath = $_FILES['file']['tmp_name'];
    $filename = $_FILES['file']['name'];
  } else {
    $filepath = '';
    $filename = '';
  }
 
  $body = "Имя:\r\n".$name."\r\n\r\n";
  $body .= "Контактный номер:\r\n".$tel."\r\n\r\n";
  $body .= "E-mail:\r\n".$email."\r\n\r\n";
  $body .= "Описание заказа:\r\n".$message;
 
  send_mail($to, $body, $email, $filepath, $filename);

}


Часовой пояс GMT +3, время: 21:26.