Задача стоит такая: на странице 1.php посетитель вводит данные в форму (без перезагрузки, с подсчетом количества введенных знаков), и эти данные записываются в базу. При следующем посещении страницы посетитель видит в форме ранее введенную им информацию и может её изменить.
Кроме того, полученная от пользователя информация подвергается логической обработке – дезактивируются ссылки и вставляются шорт-коды. Возможно, будет делаться что-то ещё – этот этап пока в разработке.
И эта инфа видна на странице 2.php.
Чтобы разобраться, как это работает, я сделал макет, в котором вместо базы инфа записывается в текстовые файлы. Вот их коды:
Файл 1.php:
<script src="/js/jquery-3.6.4.min.js"></script>
<!-- Подсчет оставшихся знаков -->
<script>
function checklength(t){
var ml = $(t).attr('maxlength');
var diff = ml - $(t).val().length;
var ad = $(t).nextAll('div:first');
if (diff==ml){
ad.html(' ').css('color','green');
}
else if(diff>10){
ad.text('Осталось знаков: '+diff).css('color','green');
}
else{
ad.text('Осталось знаков: '+diff+'!').css('color','red');
}
}
</script>
<?php
$busedu = @file_get_contents('storage.txt');
// Замена сущностей на HTML
$busedu = html_entity_decode($busedu, ENT_QUOTES, 'UTF-8')
?>
<div id="busedu">
<textarea name="busedu" maxlength="500" onkeyup="checklength(this);" ><?php echo $busedu; ?></textarea>
<div class="znak"> </div>
<div class="maxznak"><p style="text-align:center; margin: 0;">Max 500</p></div>
</div>
<input type="hidden" name="id-form" value="busedu-f">
<input class="pusk" style="display:block;" type="submit" name="submit" value="Отправить">
</form>
<div id="busedu-fs"></div>
<script>
$(document).ready(function () {
$('.group_b').submit(function () {
// Получение ID формы
var formID = $(this).attr('id');
// Добавление решётки к имени ID
var formNm = $('#' + formID);
var formNms = $('#' + formID + 's');
$.ajax({
type: "POST",
url: '/send.php',
data: formNm.serialize(),
beforeSend: function () {
// Вывод текста в процессе отправки
$(formNms).html('<p style="text-align:center">Отправка...</p>');
},
success: function (data) {
// Вывод текста результата отправки
$(formNms).html('<p style="text-align:center">'+data+'</p>');
},
error: function (jqXHR, text, error) {
// Вывод текста ошибки отправки
$(formNms).html(error);
}
});
return false;
});
});
</script>
Файл send.php
if ($_POST['id-form'] == "busedu-f")
{
// Замена HTML сущностями
$busedu = htmlentities($_POST['busedu'], ENT_QUOTES, 'UTF-8');
if (strlen($busedu) > 0)
{
file_put_contents('storage.txt', $busedu);
echo "Принято";
}
else
{
file_put_contents('storage.txt', "");
echo "Данные не введены или удалены";
}
/* Здесь какая-то обработка на уровне РНР, включая регулярку, в результате которой удаляются ссылки и вставляются шорт-коды, в результате чего из переменной $busedu формируется переменная $control
*/
file_put_contents(control.txt', $control);
}
Файл 2.php
$control = @file_get_contents(control.txt');
echo $control;
Здесь вместо базы используется запись в файлы, в реальном коде будет запись в базу. Тем не менее, как мне кажется, экранировать (использовать addslashes) нет нужды, поскольку кавычки заменены их сущностями.
Правильно ли здесь сделана защита от хакеров?
Или надо сделать что-то иначе?