Сохраняйте данные из contentEditable div с помощью mysqli

Я пытаюсь сохранить данные из contentEditable div в базу данных mySql. Но, похоже, символ «+» не может быть сохранен в БД. Это правильная концепция или я что-то упустил?

index.php

<div id="la_sent" contentEditable=true></div>
<button class="saveChanges">Save changes</button>

script.js

$(document).ready(function(){
$( ".saveChanges" ).click(function() {
content = $('#la_sent').html();
dataUrl = "iid=1&content="+content;
$.ajax({
url:"ajax.php",
type:"POST",
data:dataUrl,
success:function(data){
...
}});
});
});

ajax.php

$type = $_POST['iid'];
$content = $_POST['content'];
$mysqli=connect_database(); //connection to database
$stmt = $mysqli->prepare('UPDATE email_structure SET content = ? WHERE type = ?');
$stmt->bind_param('ss', $content, $type);
$ress = $stmt->execute();
$stmt->close();
$mysqli->close();
echo "OK";

Например: если я пишу в строке элемента div ‘a + b + c’, это добавляет в строку БД ‘a b c’. Есть идеи почему?

2

Решение

Знаки плюса по умолчанию заменяются пробелами, поэтому сначала их нужно кодировать.

encodeUriComponent это один из способов сделать это в JavaScript

Так что редактирование вашего script.js пройти content переменная через encodeURIComponent прежде чем добавить его в datUrl должен сделать свое дело.

$(document).ready(function(){
$( ".saveChanges" ).click(function() {
content = $('#la_sent').html();
dataUrl = "iid=1&content="+encodeURIComponent(content);  //encode content variable
$.ajax({
url:"ajax.php",
type:"POST",
data:dataUrl,
success:function(data){
...
}});
});
});
3

Другие решения

В целях безопасности вы ВСЕГДА должны экранировать свой текст, прежде чем подключить его к своей базе данных (поиск, сохранение и т. Д.). mysqli_real_escape_string сделать это. Даже если вы используете готовые операторы, вы все равно должны избегать своих персонажей.

Если это действительно проблема, вы можете заменить + другим символом, а затем замените его обратно при извлечении из БД

0