Имя сохраняемой страницы php

760
26 ноября 2016, 09:15

Имеется код:

<?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 передавать имя файла который сохранится.

Answer 1

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);
READ ALSO
не запускается скрипт

не запускается скрипт

не получается запустить скрипт, нужен для автоматической вставки даты, при изменение данных в ячейке:

1692
Как создать выпадающий список select, который будет менять изображение?

Как создать выпадающий список select, который будет менять изображение?

Имеется html и css кодПомогите написать JS для правильной работы скрипта, чтобы при выборе определенной опции менялась картинка

655
Цвет div блока JS

Цвет div блока JS

Цвет при нажатии CTRL+click меняется на #СССКак сделать чтобы при нажатии CTRL+click цвет менялся на #CCC если нажмешь еще раз CTRL+click то с #CCC на #DDD и так...

643
Проверка radio button JavaScript

Проверка radio button JavaScript

Добрый день, возник вопрос, есть 3 группы radio button, нужно что-бы при различных комбинациях выводилась определённая картинка, под каждую комбинацию...

980