1 1
Ученик
(230)
1 год назад
Для сохранения содержимого div'а в MySQL в виде BLOB необходимо преобразовать его содержимое в бинарный формат. В данном случае вы можете использовать метод Blob.prototype.arrayBuffer() для преобразования объекта Blob в ArrayBuffer, а затем передавать его в PHP-скрипт.
Пример кода на JS:
const sendNote = document.querySelector('div.enterNote').innerHTML;
const blob = new Blob([sendNote], { type: 'text/html' });
const reader = new FileReader();
reader.addEventListener('loadend', () => {
const arrayBuffer = reader.result;
const formData = new FormData();
formData.append('note', new Blob([arrayBuffer], { type: 'application/octet-stream' }));
formData.append('iduser', localStorage.getItem('authLink'));
fetch('../php/note/noteUser.php', {
method: 'POST',
body: formData,
}).then(response => response.text())
.then(result => console.log(result))
.catch(error => console.error(error));
});
reader.readAsArrayBuffer(blob);
Пример кода на PHP для сохранения BLOB:
$note = $_POST['note'];
$id = $_POST['iduser'];
$dateTime = date('Y-m-d H:i:s');
$stmt = $link->prepare("INSERT INTO `scnural`.`noteUsers`
(`id`, `userid`, `note`, `date`) VALUES
(NULL, ?, ?, ?);");
$stmt->bind_param('iss', $id, $note, $dateTime);
$stmt->execute();
Обратите внимание, что в данном примере мы используем FormData, чтобы отправить данные на сервер в виде формы, а также тип application/octet-stream для BLOB в качестве типа MIME.
Михаил
Просветленный
(30520)
1 год назад
Во-первых, я бы рекомендовал вам использовать тип данных TEXT вместо BLOB для хранения HTML-кода в таблице MySQL. Тип данных BLOB предназначен для хранения двоичных данных, таких как изображения или видео, а не текста. Тип данных TEXT позволяет хранить текстовые данные с различными кодировками символов, такими как UTF-8. Это упростит работу с HTML-кодом и избежать проблем с кодировкой.
Во-вторых, я бы посоветовал вам не передавать объект BLOB из JavaScript в PHP скрипт, а просто передавать строку HTML-кода. Объект BLOB может быть сложно обработать на стороне сервера и может вызвать ошибки при записи в базу данных. Вы можете просто изменить ваш код на следующий:
btnPublicNote.onclick = () => {
const sendNote = document.querySelector('div.enterNote').innerHTML;
//let blob = new Blob([sendNote], {type: 'text/html'}); // не нужно создавать объект BLOB
const param = 'note='+sendNote+'&iduser='+localStorage.getItem('authLink');
fetch('../php/note/noteUser.php', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
},
body: param
}).then(response => response.text()).then(result => console.log(result))
}
Ваш PHP код выглядит правильно, но вы должны убедиться, что тип данных поля note в таблице noteUsers соответствует типу TEXT и имеет подходящую кодировку символов.
это код передачи из js скрипта в php скрипт
это код содержащийся на стороне сервера в PHP
в базу вставляется просто blob object размером 13 байт. Хотя из JS смотрел передаётся объект BLOB размером и 15 кБ и 100 кБ. Но в базу пишет только 13 байт. Как с ними работать? BLOB? В рунете нашёл только статьи где описывается работа с BLOB и mysql на примере изображений, а как с текстом быть?