我正在使用ajax从文本区域发送数据:
$('a#btn-send').click(function()
{
var user = $("input#user").val();
var conv = $("input#conv").val();
var msj = $("textarea#msj").val();
if(msj!=''){
var data = '{user:' + user + ',msj:'+msj+',conv:'+conv+'}' ;
$("textarea#msj").val('');
$.ajax(
{
type: "POST",
url: "messajes.php",
data: data,
cache: false,
success: function()
{
parent.fadeOut('slow', function() {$(this).add();});
toastr.options = {
"closeButton": true,
"debug": false,
"newestOnTop": false,
"progressBar": true
}
toastr.success("Message semt","Success");
}
});
}
});
对于初学者来说,我不知道这是否是发送数据的正确方法,但是我之前仅用一个数据元素(?)进行过此操作,我的意思是,仅使用“ id”。现在,我尝试发送多个数据,但无法使用php控制器捕获它:
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
include_once('conection.php');
$connection = connect();
if(isset($_POST['msj'])){
$msj = $_POST['mjs'];
$conv = $_POST['conv'];
$user = $_POST['user'];
$sql = "INSERT INTO messages (msj, conversation, user) VALUES('$msj',$conv,'$user')";
$statement = $connection->prepare($sql);
$statement->execute();
}
}
有什么我想念的吗?
我猜我必须使用JSON编码/解码数据,但我不是专业人士,并且没有找到解决此确切情况的任何示例。
现在我在Jquery代码中有了这个
$('a#btn-enviar').click(function()
{
var user = $("input#user").val();
var conv = $("input#conv").val();
var msj = $("textarea#msj").val();
if(msj!=''){
var data = {user: user, msj: msj, conv: conv};
$("textarea#msj").val('');
$.ajax(
{
type: "POST",
url: "mensajes.php",
data: data,
dataType: 'json',
cache: false,
success: function()
{
//code
}
});
}
});
和php如下:
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
include_once('conectar.php');
$conexion = conectar();
if(isset($_POST['data'])){
$data = json_decode($_POST['data']);
$msj = $data->msj;
$conv = $data->conv;
$user = $data->user;
$sql = "INSERT INTO messages(conversation, msj, user) VALUES ($conv, '$msj', '$user')";
$statement = $conexion->prepare($sql);
$statement->execute();
}
}
答案 0 :(得分:1)
不引用数据。您正在制作数据字符串。应该是
var data = {user: user, msj: msj, conv: conv};
如果您使用的是JSON,请在dataType: 'json'
中发送$.ajax()
:
$.ajax(
{
type: "POST",
url: "messajes.php",
data: data,
dataType: 'json',
cache: false,
success: function()
{
//code
}
});
您的PHP代码应该是
if(isset($_POST['user'], $_POST['msj'], $_POST['conv'])){
include_once('conectar.php');
$conexion = conectar();
$msj = $_POST['msj'];
$conv = $_POST['conv'];
$user = $_POST['user'];
$sql = "INSERT INTO messages(conversation, msj, user) VALUES (?, ?, ?)";
$statement = $conexion->prepare($sql);
$statement->execute(array($conv, $msj, $user));
}
您直接在查询中使用变量,因此即使看起来像这样,语句也无法准备。我已经根据PDO准备好的语句更改了代码,如果您使用的是mysqli
,请相应地更改代码。
mysqli:http://php.net/manual/es/mysqli.prepare.php
pdo:http://php.net/manual/en/pdo.prepare.php
如果此代码用于插入数据库并通知用户成功插入,则显然您不需要dataType:'json'
,dataType:'text'
可以完成此工作。然后,您可以在PHP成功插入后回显一些标识符,例如echo 'TRUE';
,并在JavaScript中可以检查文本TRUE
并通知用户。