我有一个奇怪的问题(至少对我而言)。我有一个带有textarea的表单(使用ckeditor但还尝试过其他人......)当我提交文本时,它会部分保存在我的数据库中。
数据库是utf8mb4_unicode_ci,我存储数据的列是带有uf8mb4校对的文本数据类型。
使用phpmyadmin如果我在列中放入纯文本(没有内部html),它会毫无问题地存储。如果我使用表单放置文本,它只存储文本的一部分。似乎不允许html标签..
该页面包含:
meta charset='UTF-8'
当我连接到数据库时,我使用此字符串:
if(!mysqli_set_charset($con, "utf8mb4")) {
printf("Error loading character set utf8: %s\n", mysqli_error($con));
exit();
}
这是我用来在数据库中存储数据的代码:
<?php
include('connect.php');
$id = preg_replace("/[^0-9]/",'',$_POST['id']); // ID AUTOVETTURA
$testo = $_POST['testo']; // PRENDO TESTO
$tabella = $_POST['tabella']; // LEGGO TABELLA DOVE: 1 = CHI SIAMO; 2 = DISCLAIMER; 3 = PRIVACY; 4 = COOKIE; 5 = CONDIZIONIVENDITA;
$stmt = mysqli_stmt_init($con); // INIZIALIZZO LA CONNESSIONE
if($tabella == 1){
mysqli_stmt_prepare($stmt,'UPDATE chisiamo
SET chisiamo.testo = ?
WHERE chisiamo.id = ?')
or die(mysqli_error($con)); // QUERY RECUPERO DATI
mysqli_stmt_bind_param($stmt,'si',$testo,$id); // PREPARO I PARAMETRI
mysqli_stmt_execute($stmt); // ESEGUO LA QUERY
}
if($tabella == 2){
mysqli_stmt_prepare($stmt,'UPDATE disclaimer
SET disclaimer.testo = ?
WHERE disclaimer.id = ?')
or die(mysqli_error($con)); // QUERY RECUPERO DATI
mysqli_stmt_bind_param($stmt,'si',$testo,$id); // PREPARO I PARAMETRI
mysqli_stmt_execute($stmt); // ESEGUO LA QUERY
}
if($tabella == 3){
mysqli_stmt_prepare($stmt,'UPDATE privacy
SET privacy.testo = ?
WHERE privacy.id = ?')
or die(mysqli_error($con)); // QUERY RECUPERO DATI
mysqli_stmt_bind_param($stmt,'si',$testo,$id); // PREPARO I PARAMETRI
mysqli_stmt_execute($stmt); // ESEGUO LA QUERY
}
if($tabella == 4){
mysqli_stmt_prepare($stmt,'UPDATE cookie
SET cookie.testo = ?
WHERE cookie.id = ?')
or die(mysqli_error($con)); // QUERY RECUPERO DATI
mysqli_stmt_bind_param($stmt,'si',$testo,$id); // PREPARO I PARAMETRI
mysqli_stmt_execute($stmt); // ESEGUO LA QUERY
}
if($tabella == 5){
mysqli_stmt_prepare($stmt,'UPDATE condizionivendita
SET condizionivendita.testo = ?
WHERE condizionivendita.id = ?')
or die(mysqli_error($con)); // QUERY RECUPERO DATI
mysqli_stmt_bind_param($stmt,'si',$testo,$id); // PREPARO I PARAMETRI
mysqli_stmt_execute($stmt); // ESEGUO LA QUERY
}
mysqli_stmt_execute($stmt); // ESEGUO LA QUERY
mysqli_stmt_close($stmt); // CHIUDO LO STATEMENT
mysqli_close($con); // CHIUDO CONNESSIONE
?>
这是连接代码:
$con = mysqli_connect($host,$user,$password,$db);
if (!$con) {
die('Connection Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
if(!mysqli_set_charset($con, "utf8mb4")) {
printf("Error loading character set utf8: %s\n", mysqli_error($con));
exit();
}
我还尝试在查询之前对文本使用addslashes函数,但它没有解决我的问题..
请提示吗?
编辑:
这是我用来调用php脚本将数据记录到数据库中的函数:
$(document).ready(function(){
$('form').on('submit', function (e) {
var id = 1;
var testo = CKEDITOR.instances.editor1.getData()
alert(testo);
var tabella = $('#tabella').val();
var data_1 = 'testo=' + testo + '&id=' + id + '&tabella=' + tabella;
e.preventDefault();
$.ajax({
type: "POST",
contentType: "application/x-www-form-urlencoded;charset=UTF-8",
data: data_1,
url: "php/aggiorna_pagine.php"
})
.done(function(){
$('.success').show();
$('.success').fadeOut(2000);
});
});
});