【发布时间】:2019-01-04 15:52:57
【问题描述】:
我正在尝试通过 AJAX 将数据发送到 PHP 文件,然后使用 SQL 上传到我的数据库。我已经更改了我的表格以允许插入 UTF-8。当我使用表单插入时它工作正常,但是当使用 AJAX 发送数据时它不会发送它。
例如,我尝试将一些文本和表情符号发送到 PHP 文件,然后上传到我的数据库。
我已经在页面顶部添加了<meta charset="utf-8">,甚至在页面和 PHP 文件中添加了header("Content-Type: text/html; charset=utf-8");,因为我看到其他一些帖子提到了这一点,但它没有用。
这里是 AJAX 函数:
$detail = $('#post').text(); //Gets text from div
$.ajax({
url: 'edit.php',
type: 'post',
contentType: 'application/x-www-form-urlencoded;charset=utf-8',
data: {detail: $detail},
datatype: 'html',
success: function() {
console.log($detail);
}});
$detail 只是来自 div 的值,而编辑文件所做的只是UPDATE 表格。
当我 console.log 时,它会返回带有文本和表情符号的数据,但它不会插入到我的数据库中。
在写这篇文章时,我注意到添加 'application/x-www-form-urlencoded;charset=utf-8' 会使整个过程停止工作,但我不知道为什么。
询问者的后端代码:
<?php
$host = "hostname";
$user = "user";
$password = "pass";
$db_name = "database";
$tbl_name = "table";
// Connect to server and select databse.
$conn = mysqli_connect($host, $user, $password)or die("cannot connect");
mysqli_select_db($conn, $db_name)or die("cannot select DB");
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$detail = $_POST['detail'];
// Add your validation and save data to database
if(strlen($detail) <= 5000) {
$stmt = mysqli_stmt_init($conn);
$sql = "UPDATE $tbl_name SET detail = ?";
if (mysqli_stmt_prepare($stmt, $sql)) {
mysqli_stmt_bind_param($stmt, "s", $detail);
mysqli_stmt_execute($stmt);
}
mysqli_stmt_close($stmt);
}
}
?>
注意:当我通过表单传递它但通过 AJAX 添加表情符号(如 ????它不起作用。
【问题讨论】:
-
对于插入,我们需要查看 PHP 代码。我的猜测是
$detail不是您所期望的。您所说的内容类型是 jQuery AJAX 的默认值,因此如果控制台中没有错误,这将很难解决。 -
在浏览器中查看来自调试器的 HTTP 请求也很好。
-
@JayBlanchard 我编辑了我的帖子,以便您可以看到后端。控制台中没有出现错误。
$detail完全符合其应有的样子,并且在我设置contentType之前,整个事情都运行良好。 -
您知道您的更新语句将填充表中的每一行,对吧?
-
你知道 MySQL 的默认 UTF8 并不是真正的 UTF8,对吧?如果您想存储表情符号,您需要使用 utfmb4 以获得完整的 UTF8 支持。