【发布时间】:2023-04-06 18:34:01
【问题描述】:
我会解释我的代码,然后在代码sn-ps之后继续解决问题:
我有一个名为“functions_questions”的表单。提交后,以下代码会根据当前分数增加或减少我的 sql 数据库(标题为“答案”)中的一列(标题为“分数”)。
<?php
$id = $_SESSION['id'];
if(isset($_POST['functions_question'])){
$res = $db->query("SELECT score FROM answers WHERE id=$id");
$data = $res->fetch_array();
if($data['score']<2)$db->query("UPDATE answers SET score = score+1 WHERE id=$id");
if($data['score']>1)$db->query("UPDATE answers SET score = score-1 WHERE id=$id");
}
?>
我还有以下 AJAX 代码,它会在提交表单时自动更改 div (id = "ajaxtest") 中的文本。当然,这样做不会刷新页面,因为它使用 AJAX。
<script type='text/javascript'>
$(document).ready(function () {
$('#questionform').on('submit', function(e) {
e.preventDefault();
$.ajax({
url : $(this).attr('action') || window.location.pathname,
type: "POST",
data: $(this).serialize(),
success: function (data) {
ajaxtest.innerHTML = '"<?php echo $data['score']; ?>"';
},
});
});
});
</script>
最后,我有以下代码,它显示了标题为“答案”的数据库中标题为“分数”的列中的值。
<?php
$resss = $db->query("SELECT * FROM answers WHERE id=$id");
$data = $resss->fetch_array();
var_dump($data['score']);
?>
当我提交表单时,我可以作为管理员在数据库中看到分数已更新。 AJAX 代码将 div (ajaxtest) 更改为 $data['score'],但它显示更新之前的前一个分数,而不是新更新的分数。如何修改它以便 ajaxtest 显示更新的分数而不是未更新的分数?
【问题讨论】:
-
表单本身是否命名为
functions_questions?或者这实际上是表单中输入/按钮/提交/其他表单字段的名称? -
这是表单的名称。
-
在 HTML 中,表单本身并不是表单元素;它没有值,也没有提交。您需要根据已提交的实际表单元素进行测试。
-
<?php echo $data['score']; ?>的值在页面加载时是固定的 - PHP 在发送页面之前呈现页面,包括 javascript。如果您想使用从 PHP 脚本返回的数据,您需要更改成功回调以执行类似ajaxtest.innerHTML = data.score;的操作 -
嗯,当我将其更改为
ajaxtest.innerHTML = 'data.score';时,div 只是更改为“data.score”。