我有多个输入字段,用户可以在其中填写问题的答案,使用JavaScript我将用户输入放入数组中。
当我在google chrome中查看控制台日志时,我看到数组将被设置为正确,之后我想将带有AJAX的数组发送到另一个php页面,以便我可以将数据保存到我的数据库中。
当我检查我的数据库时,发布结果="数组" :(
有人可以帮助我吗?////// JavaScript和AJAX代码:
if (isConfirm) {
checkAnswers();
$('input[id="answer"]').each(function() {
allAnswers.push($(this).val());
allAnswers.toString();
});
console.log(allAnswers);
$.ajax({
type: 'post',
url: 'actions/save_questions.php',
data: { 'answers': allAnswers }
});
}
/////// PHP代码:
<?php
$user_answer = $_POST['answers'];
$date = date('d-m-Y h:i:s');
$arr = array($user_answer);
$query = "INSERT INTO made_questions (lesson_id, user_answer, datum) VALUES ('1', '$arr', '$date')";
mysqli_query($conn,$query) or die (mysqli_error($conn));
?>
我的数据库的输出是:
id:27
lesson_id:1
user_answer:数组&lt; -----这是错的:(
datum:16-06-2016 08:12:32
控制台日志输出:
[&#34;马&#34;,&#34; nocleu&#34;,&#34; Geel&#34;,&#34;这是我的狗&#34;,&#34; Guten标签&# 34;,&#34; Sun&#34;,&#34; Aap&#34;,&#34; Honger&#34;,&#34; knol&#34;,&#34; Cat&#34;]
有人可以帮助我???
非常感谢!
答案 0 :(得分:2)
.toString()
和.join()
不会修改原始变量。你需要说:
allAnswers = allAnswers.toString();
OR
data: {'answers': allAnswers.toString()}
如果您希望值“,”分开而不仅仅是“,”,这是.toString()
返回的内容,您可以说:
allAnswers = allAnswers.join(", ");
OR
data: {'answers': allAnswers.join(", ");
重要的是要注意,如果以这种方式使用.toString(),你的.each()循环将会中断。
$('input[id="answer"]').each(function(){
allAnswers.push($(this).val());
allAnswers = allAnswers.toString();
});
上面的代码不起作用因为在第一次迭代之后,allAnswers将是一个字符串,因此,调用.push()
将引发异常,因为.push()
不是函数string
。
$('input[id="answer"]').each(function(){
allAnswers.push($(this).val());
});
allAnswers = allAnswers.toString();
此代码修复了此问题,方法是将数组转换为字符串,然后将值附加到数组。
答案 1 :(得分:1)
如果您希望以字符串格式保存所有问题,可以使用json_encode
<?php
$user_answer = $_POST['answers'];
$date = date('d-m-Y h:i:s');
$ques = json_encode($user_answer);
$query = "INSERT INTO made_questions (lesson_id, user_answer, datum) VALUES ('1', '$ques', '$date')";
mysqli_query($conn,$query) or die (mysqli_error($conn));
?>
警告:您的代码不安全!
答案 2 :(得分:0)
在将数组连接到sql之前,应将数组转换为字符串。
$arr = implode(",", $user_answer);