我一直想创建一个小型应用程序,以经典形式(包括选择,输入和文本区域)填充SQL数据库。我正在使用PHP,并添加了JQuery代码以在页面上同时显示它(以便避免重定向到用于SQL连接和查询的db.php页面)。
我的问题是,尽管它可以正常工作(例如我现在拥有2、3、4甚至10个字段),但它在某个时候停止工作了,我发现自己现在无法确定几个小时了。
首先,下面是代码:
jQuery代码:
$("#dotSave").click( function() {
$.post( $("form").attr("action"), $("form").serializeArray(), function(info) { $("#result").html(info + " (#" + $dotNo + ")"); } );
console.log($("form").serializeArray());
});
// Stops db.php from displaying
$("form").submit( function() {
return false;
});
PHP代码:
<?php
// Server details (working)
$conn = mysqli_connect($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$userName = isset($_POST['userName']) ? $_POST['userName'] : '';
$inputDate = isset($_POST['inputDate']) ? $_POST['inputDate'] : '';
$sourceType = isset($_POST['sourceType']) ? $_POST['sourceType'] : '';
$sourceYear = isset($_POST['sourceYear']) ? $_POST['sourceYear'] : '';
$sourceLink = isset($_POST['sourceLink']) ? $_POST['sourceLink'] : '';
$sourceName = isset($_POST['sourceName']) ? $_POST['sourceName'] : '';
$sourceAuthor = isset($_POST['sourceAuthor']) ? $_POST['sourceAuthor'] : '';
$author = isset($_POST['author']) ? $_POST['author'] : '';
$content = isset($_POST['content']) ? $_POST['content'] : '';
$tags = isset($_POST['tags']) ? $_POST['tags'] : '';
if($conn->query("INSERT INTO dots VALUES('', '$sourceType', '$sourceName', '$sourceLink', $sourceAuthor', '$sourceYear', '$tags', '$author', '$content', '$userName', '$inputDate')"))
echo "DB: Record saved!";
else
echo "DB: Ooops, didn't get through.";
$conn->close();
?>
因此,我基本上总是得到“ DB:糟糕,没有通过。”在我的#results div中
我记得要解决的最后一个问题是textarea字段中的caracter'正在停止查询工作。然后我意识到我的数据库表和列在latin_swedish_ci中,我将其更改为utf8_unicode_ci。从那以后,我尝试直接在两个排序规则设置中使用空白列创建新的数据库,但没有获得更好的成功,所以可能不是那样。
我已经验证了变量是否已正确传递到序列化数组(很好地记录到控制台中)和php变量中,方法是在运行查询之前通过回显它们。现在想法不多了...有人可以吗?
最佳答案
代替:
echo "DB: Ooops, didn't get through.";
为什么不输出错误内容:
echo mysqli_error($conn);
最好只在开发过程中这样做。