【发布时间】:2015-07-29 14:18:38
【问题描述】:
我想用 JQuery $.ajax 发送一个表单,但是我有一个问题。似乎 PHP 无法序列化 $_POST。这很奇怪,因为变量 elementiPost 不为空,事实上,如果我这样做 console.log(parametriPost) 控制台会向我显示正确的内容。
最奇怪的是 PHP 获取了我手动附加到 parametriPost ($_POST['data_r']) 的参数,而不是 $(this).serialize() 的参数!
如果我在 $ore 中手动输入一个数字,它可以正常工作,所以问题不在于查询。
谢谢。
代码如下:
JQuery
$('form').submit(function(e) {
e.preventDefault();
var formId = $(this).attr('id');
var data = area_get_row_date(formId);
var parametriPost = $(this).serialize() + '&data_r=' + data;
$.ajax({
url: 'insert_db.php',
method: 'POST',
async: false,
data: parametriPost,
success: function() {
// Success code
},
error: function(xhr, status, error) {
alert("Errore!");
}
});
});
PHP (insert_db.php)
$data = str_replace('_', '.', $_POST['data_r']);
$ore = $_POST['orelavorateore_2_07_2015'];
$sql = "INSERT INTO ore_lav
VALUES (NULL, 134, 4,STR_TO_DATE('" . $data . "', '%d.%m.%Y'), " . $ore . ", 1, 1)";
$results = api_store_result(api_mysql_query($sql));
这是 parametriPost 包含的内容:
lavorati_prenotati=L&periodointegrazione_3_07_2015=on&orelavoratechf_3_07_2015=&orelavorateore_3_07_2015=a&extra_field1_orelavoratechf_3_07_2015=&extra_field1_orelavorateore_3_07_2015=&extra_field2_orelavoratechf_3_07_2015=&extra_field2_orelavorateore_3_07_2015=&orenonlavoratechf_3_07_2015=&orenonlavorateore_3_07_2015=&orenonlavoratetipologia_3_07_2015=L&extra_field1_orenonlavoratechf_3_07_2015=&extra_field1_orenonlavorateore_3_07_2015=&extra_field1_orenonlavoratetipologia_3_07_2015=L&extra_field2_orenonlavoratechf_3_07_2015=&extra_field2_orenonlavorateore_3_07_2015=&extra_field2_orenonlavoratetipologia_3_07_2015=L&orenonpagateore_3_07_2015=&orenonpagatetipologia_3_07_2015=L&extra_field1_orenonpagateore_3_07_2015=&extra_field1_orenonpagatetipologia_3_07_2015=L&extra_field2_orenonpagateore_3_07_2015=&extra_field2_orenonpagatetipologia_3_07_2015=L&orelavoratechf_3_07_2015=&orelavorateore_3_07_2015=&data_r=3_07_2015
【问题讨论】:
-
基本调试:
var_dump($_POST, $_SERVER['REQUEST_METHOD'])。确认 php 确实收到了该数据,并且确实执行了 POST。而且你很容易受到sql injection attacks -
data_r=')); DROP TABLE ore_lav;:( 无论如何,它对我有用 -$_POST包含预期的所有字段。 -
嗯,您的参数中有
orelavorateore_3_07_2015=(空字符串)。你到底希望得到什么?此外,如果您在 PHP 中使用双引号字符串,则不需要使用附加语法,只需将变量放在字符串中,例如"INSERT INTO ... STR_TO_DATE($data) ... "。 -
它也是最后一个参数,所以你有两次,第二次覆盖第一个...
var_dump将作为你的ajax查询的结果返回,如success函数的一个参数,所以你可以简单地console.log它。或者您可以让 php 脚本将其记录到文件中。
标签: php jquery ajax serialization