Я пытаюсь сохранить данные из 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’. Есть идеи почему?
Знаки плюса по умолчанию заменяются пробелами, поэтому сначала их нужно кодировать.
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){
...
}});
});
});
В целях безопасности вы ВСЕГДА должны экранировать свой текст, прежде чем подключить его к своей базе данных (поиск, сохранение и т. Д.). mysqli_real_escape_string
сделать это. Даже если вы используете готовые операторы, вы все равно должны избегать своих персонажей.
Если это действительно проблема, вы можете заменить +
другим символом, а затем замените его обратно при извлечении из БД