目前我有一个下拉菜单和一个文本区域。通过从下拉列表中选择一个数字,您可以从我的sql数据库中获取加载到文本区域的相应数据。还有一个用于保存/编辑文本的按钮,这可以成功地更新数据库。然而,什么不起作用是当新文本输入文本区域,保存,从下拉选择另一个数字,然后返回到前一个,新文本不出现,旧文本,即使数据库有已更新。
以前当我提交表单时,页面重新加载,这意味着一切正常,但是从那时起我需要停止这次重新加载,现在下拉列表没有从数据库中检索最新数据? / p>
下拉onchange函数(course.php)
function selectedItem(selection){
if(selection=="page1"){
document.getElementById("commentid").value = "<?php query2('page1',$_SESSION['courseID'], $_SESSION['userID']) ?>";
}
if(selection=="page2"){
document.getElementById("commentid").value = "<?php query2('page2',$_SESSION['courseID'], $_SESSION['userID']) ?>";
}
if(selection=="page3"){
document.getElementById("commentid").value = "<?php query2('page3',$_SESSION['courseID'], $_SESSION['userID']) ?>";
}
if(selection=="page4"){
document.getElementById("commentid").value = "<?php query2('page4',$_SESSION['courseID'], $_SESSION['userID']) ?>";
}
if(selection=="page5"){
document.getElementById("commentid").value = "<?php query2('page5',$_SESSION['courseID'], $_SESSION['userID']) ?>";
}
}
&#39; commentid&#39;是文本区域的id
query2 code(func.inc.php)
function query2($page,$courseID,$userID){//POPULATE COMMENT BOX FROM THE CORRECT PAGE, COURSE ID AND USER ID
$myData = mysql_query("SELECT {$page} FROM comments WHERE user_id='{$userID}' AND course_id='{$courseID}'");
while($record = mysql_fetch_array($myData)){
echo $record[$page] ;
}
}
重新加载页面时,现在每个下拉选项都会显示最新评论。看来SELECT查询没有从数据库中检索最新数据?
答案 0 :(得分:0)
新文本不会显示,因为它不在浏览器中。
你正在做的是:
1)从服务器加载 course.php 。它创建函数selectedItem(selection)
并将其输出到浏览器。在浏览器中,该功能现在如下所示:
if(selection=="page1"){
document.getElementById("commentid").value = "Text A";
}
if(selection=="page2"){
document.getElementById("commentid").value = "Text B";
}
等......
2)您为page1
发布了“文字CCCC”。此帖子由服务器拾取并放入数据库。然而,浏览器仍然具有旧的JavaScript,并且无法知道有新文本。只有你以某种方式改变了javascript,你才能看到新的文本。
有几个选项可以做到这一点:
像以前一样刷新页面。将再次创建函数selectedItem
,现在包含数据库中的新Text CCCC
。这是最简单的解决方案。
如果您不想刷新页面,可以在浏览器中替换javascript的内容。为此,您可以这样做:
在 course.php
中var text=new Array(
'page1'=>"<?php query2('page1',$_SESSION['courseID'], $_SESSION['userID']) ?>",
'page2'=>"<?php query2('page2',$_SESSION['courseID'], $_SESSION['userID']) ?>",
'page3'=>"<?php query2('page3',$_SESSION['courseID'], $_SESSION['userID']) ?>"
);
var selected_page='page1';
function selectedItem(selection){
selected_page=selection;
document.getElementById("commentid").value = text[selection];
}
现在浏览器有一个名为“text”的javascript数组,其中包含不同页面的文本:
Text=['page1'=>'Text A','page2'=>'Text B','page3'=>'Text C']
每次运行函数selectedItem
时,它都会将所选文本变量的值放在commentid
中。它还会更新变量selected_page
,以便您可以跟踪显示的变量。
发布表单时,只需更改相应变量的内容即可。这可以这样做:
在您的表单中添加以下内容:
<form onsubmit="change_text()">
并添加一点javascript函数
function change_text(){
//replace the corresponding variable with the new text
text[selected_page]=document.getElementById('mytextarea').value;
return true; // (to submit the form)
}
这将使用textarea中的文本覆盖text[selected_page]
的值。现在javascript'知道'有新文本可以显示它。因此,如果您将page1更改为“Text DDDDD”,则数组现在包含
Text=['page1'=>'Text DDDDD','page2'=>'Text B','page3'=>'Text C']
注意这是一个(非常)简化的示例。这是为了不检查服务器是否正确处理了帖子。因此,您仍然可以在浏览器和数据库中找到不同的文本。我建议你看看ajax(可能是jquery ajax)来正确地做到这一点。