我有一个带有与MySQL数据库绑定的实时表的项目。
我制作了一个表单,用于输入用户输入并插入数据库。但是我在插入日期时遇到了麻烦。
我使用jQuery和Ajax将值作为数据字符串传递给执行插入查询的PHP文档:
的jQuery / AJAX:
$('.btn-add').click(function () {
if ($('.add-form').is(':hidden')) {
$('.add-form').slideDown(400);
$(this).children('i').fadeOut(100);
} else {
var title = $("#title").val();
var genres = $("#genres").val();
var languages = $("#languages").val();
var dev = $("#dev").val();
var date = $(".picker").next().val().split(".").reverse().join("-");;
// I used a date picker for this. It picks the date as "dd.mm.yyyy."
//and I had jquery convert it to "yyyy-mm-dd" for mysql compatibility.
var dataString = 'title1=' + title + '&genres1=' + genres + '&languages1=' + languages + '&dev1=' + dev + '&date1=' + date;
if (title == '' || genres == '' || languages == '' || dev == '' || date == '') {
Materialize.toast('Please complete all the forms.', 4000);
} else {
// AJAX Code To Submit Form.
$.ajax({
type: "POST",
url: "php/add-game.php",
data: dataString,
cache: false,
success: function (result) {
tableLoad();
Materialize.toast(result, 4000);
$('.add-form').slideUp(400);
$('.btn-add').children('i').fadeIn(100);
}
});
}
}
});
附加game.php:
<?php
$conn = mysqli_connect("localhost", "root", "****", "db-name");
$title = $_POST["title1"];
$genres = $_POST["genres1"];
$languages = $_POST["languages1"];
$dev = $_POST["dev1"];
$date = $_POST["date1"];
$sql = "INSERT INTO games (title, genres, languages, developer, release-date)
VALUES ('$title', '$genres', '$languages','$dev','$date')";
if ($conn->query($sql) === TRUE) {
echo "Success!";
} else {
echo "Something went wrong.";
}
$conn->close();
?>
现在,我首先尝试传递前4个文本值的代码,没有日期,并且它工作得很好:添加了新行,输入信息和表刷新,但我似乎无法获得它可以正确插入日期。
我尝试使用$date
文档中的错误消息回显.php
,并以“yyyy-mm-dd”格式向我显示日期。然而,仍然出现问题,我不知道它是什么。
编辑-1:
编辑-2: debug.txt文件的内容:
如您所见,日期格式很好。 (2015年3月15日)
答案 0 :(得分:2)
看起来对我来说是对的。 我会检查release-date列是否真的是DATE列。 并尝试在查询中对日期进行硬编码,以查看它是输入问题还是什么。
$sql = "INSERT INTO games (title, genres, languages, developer, release-date)
VALUES ('$title', '$genres', '$languages','$dev','2016-05-01')";
编辑: 我做了一些测试,这是因为columnt名称发布日期,因为它包含' - '字符。尝试将coulmn名称更改为release_date或releaseate。否则你可以在查询中转义列名,但是如果可以的话我会避免这种情况,因为下次你必须构建一个查询时它会导致同样的错误并且找出错误并不容易。
$sql = "INSERT INTO games (title, genres, languages, developer, `release-date`)
VALUES ('$title', '$genres', '$languages','$dev','$date')"
注意'与'不同 我甚至没有把它放在我的键盘上。
答案 1 :(得分:1)
您好,为了将String解析为MySql Date格式,您可以尝试使用MySQL的STR_TO_DATE()函数:
"INSERT INTO games (title, genres, languages, developer, release-date)
('$title', '$genres', '$languages','$dev',STR_TO_DATE('$date', '%m/%d/%Y'))";
答案 2 :(得分:1)
您只需更改Ajax Call
和PHP Code
中的几行。这将使您的代码清晰,当然您的问题将得到解决。
Ajax致电:
data:{ "dataString":dataString},
PHP代码:
parse_str($_POST['dataString'],$data);
$title = $data["title1"];
$genres = $data["genres1"];
$languages = $data["languages1"];
$dev = $data["dev1"];
$date = date("Y-m-d", strtotime($_POST["date1"]));
然后运行插入您的查询。它会起作用。