Имеется код:
<?php
$fp = fopen(date('Ymdhis').'-data.html', 'w');
$html = "";
foreach($_POST[data] as $data) {
$html .= $data.PHP_EOL;
}
echo (fwrite($fp, $html)) ? "Сохранено" : "Не сохранено";
fclose($fp);
?>
JS+HTML
<div class="getcode">Наполняемый контент, другие div блоки</div>
<button>Получить и сохранить сожержимое</button>
<script>
var button = document.querySelector("button");
button.addEventListener("click", sendSave, false);
function sendSave() {
var data = document.querySelector(".getcode").innerHTML;
var formData = new FormData();
formData.append("data", data);
var XHR = "onload" in new XMLHttpRequest() ? XMLHttpRequest : XDomainRequest;
var xhr = new XHR();
xhr.open('POST', 'save.php', true);
xhr.onreadystatechange = () => {
if (xhr.readyState !== 4) {
return;
}
if (xhr.status === 200) {
console.log(xhr.responseText);
}
};
xhr.send(formData);
}
</script>
Содержимое div блока сохраняется в файл на сервере по нажатию кнопки. Как реализовать чтобы при сохранении на странице еще через input передавать имя файла который сохранится.
FormData
третьим параметром принимает, как раз таки, имя файла которое будет отправлено серверу (USVString), когда Blob или File прошел проверку как второй параметр. Стандартное имя файла для Blob объектов это "blob".
Пример:
var formData = new FormData(); // Currently empty
formData.append('username', 'Chris');
formData.append('userpic', myFileInput.files[0], 'chris.jpg');
Справка
Соответственно значения инпута передаете третьим параметром и вроде как на этом всё. На сервере, соответственно, достаете.
Например инпут <input type="text" id="test" value="myTextValue">
, достаем так:
var txtName = document.querySelector('#test').value;
Передаем:
var txtName = document.querySelector('YOUR_SELECTOR').value;
var formData = new FormData(); // Currently empty
formData.append('username', 'Chris');
formData.append('userfile', myFileInput.files[0], txtName);
Правда это что касается файлов..
Если вы передаете в значении строку, то тогда из инпута также надо добавить новый передаваемый параметр со своим ключом, но со значением из инпута, т.е.
var data = document.querySelector(".getcode").innerHTML;
var fileName = document.querySelector('YOUR_SELECTOR').value;
var formData = new FormData(); // Currently empty
formData.append('data ', data);
formData.append('fileName', fileName);
На сервере ловить переменную из $_POST['fileName']
Итог
HTML
<div class="getcode">Наполняемый контент, другие div блоки</div>
<button>Получить и сохранить сожержимое</button>
<input type="text" id="fileName" value="myTextValue">
JS
var button = document.querySelector("button");
button.addEventListener("click", sendSave, false);
function sendSave() {
var data = document.querySelector(".getcode").innerHTML;
var fileName = document.querySelector('#fileName').value;
var formData = new FormData();
formData.append('data', data);
formData.append('fileName', fileName);
var XHR = "onload" in new XMLHttpRequest() ? XMLHttpRequest : XDomainRequest;
var xhr = new XHR();
xhr.open('POST', 'save.php', true);
xhr.onreadystatechange = () => {
if (xhr.readyState !== 4) {
return;
}
if (xhr.status === 200) {
console.log(xhr.responseText);
}
};
xhr.send(formData);
}
PHP
$fp = fopen($_POST['fileName'], 'w'); // $fp = fopen($_POST['fileName'].'-data.html', 'w');
$html = $_POST['data'].PHP_EOL;
echo (fwrite($fp, $html)) ? "Сохранено" : "Не сохранено";
fclose($fp);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
не получается запустить скрипт, нужен для автоматической вставки даты, при изменение данных в ячейке:
Имеется html и css кодПомогите написать JS для правильной работы скрипта, чтобы при выборе определенной опции менялась картинка
Цвет при нажатии CTRL+click меняется на #СССКак сделать чтобы при нажатии CTRL+click цвет менялся на #CCC если нажмешь еще раз CTRL+click то с #CCC на #DDD и так...
Добрый день, возник вопрос, есть 3 группы radio button, нужно что-бы при различных комбинациях выводилась определённая картинка, под каждую комбинацию...