2015-03-06 2 views
0

В настоящее время у меня есть выпадающее меню и текстовая область. Выбрав номер из выпадающего списка, вы получите соответствующие данные, загруженные в текстовую область из моей базы данных sql. Существует также кнопка для сохранения/редактирования текста, это работает и успешно обновляет базу данных. Однако то, что не работает, - это когда новый текст вводится в текстовую область, сохраняется, выбирая другой номер из раскрывающегося списка, а затем возвращается к предыдущему, новый текст не отображается, старый текст делает, даже если база данных имеет был обновлен.SELECT запрос не восстанавливает данные

Раньше, когда я отправлял форму, перезагружаемую страницу, что означало, что все работало нормально, однако с тех пор мне нужно было остановить эту перезагрузку, которую я сделал, теперь выпадающий список не извлекает обновленные данные из базы данных?

выпадающий 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']) ?>"; 
    } 


} 

'CommentID' является идентификатор текстовой области

Query2 код (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 не извлекает последние данные из базы данных?

+1

В чем проблема? Php выполняется, когда страница загружается (на стороне сервера), если вы хотите, чтобы что-то динамическое для клиента использовало ajax. –

+0

Поскольку вы остановили страницу при перезагрузке, это нормально, что текст не обновляется ... Вам нужно будет снова захватить страницу или, по крайней мере, часть, которая вас интересует. – Salketer

ответ

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. Этот пост загружается сервером и помещается в базу данных. Однако браузер все еще имеет старый 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=['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) 
} 

Это перепишет значение text[selected_page] с текстом в текстовом поле. Теперь javascript «знает», что есть новый текст, который может отображать его. Так что если вы изменили page1 к «Текст DDDDD», массив теперь содержит

Text=['page1'=>'Text DDDDD','page2'=>'Text B','page3'=>'Text C'] 

Примечание Это (очень) упрощенный пример. Это не проверка того, правильно ли обрабатывается сообщение сервером. Таким образом, вы все равно можете получить разные тексты в браузере и базе данных. Я предлагаю вам заглянуть в ajax (возможно, jquery ajax), чтобы сделать это правильно.

+0

Большое спасибо за подробный ответ, я посмотрю на это! – user3402227

Смежные вопросы