Zastosowałem na stronie system newsów oparty na bazie danych. Chcę, aby podczas edycji wpisu, opartej na Ajax, jego dotychczasowa treść była w polu do edycji. I tu jest problem - funkcja eval źle działa. Dlaczego?
plik fetch_admin.php
<?php
// doł±czenie kodu współużytkowanego
include '../lib/common.php';
include '../lib/db.php';
// użytkownik musi się zalogować
include '401.php';
// odczytanie tre¶ci wpisu na blogu
$query = sprintf('SELECT POST_ID, POST_TITLE, POST_TEXT, ' .
'UNIX_TIMESTAMP(POST_DATE) AS POST_DATE FROM %sBLOG_POST WHERE ' .
'POST_ID = "%d"',
DB_TBL_PREFIX, $_GET['post_id']);
$result = mysql_query($query, $GLOBALS['DB']);
$record = mysql_fetch_assoc($result);
// zwrócenie wpisu
$data = array(
'post_id' => $record['POST_ID'],
'post_title' => $record['POST_TITLE'],
'post_text' => $record['POST_TEXT'],
'post_date' => date('d-m-Y', $record['POST_DATE']));
echo json_encode($data);
mysql_free_result($result);
mysql_close($GLOBALS['DB']);
?>
funkcja uzupełnająca formularz danymi z bazy
// odczytanie danych przy użyciu "AJAX"
var httpObj;
function fetch_info()
{
var select = document.getElementById('post_id');
if (select.options[select.selectedIndex].value == 'new')
{
return;
}
var url = 'fetch_admin.php?post_id=' +
select.options[select.selectedIndex].value + "&nocache=" +
(new Date()).getTime();
httpObj = createXMLHTTPObject();
httpObj.open('GET', url, true);
httpObj.onreadystatechange = function()
{
// wypełnienie pól
if (httpObj.readyState == 4 && httpObj.responseText)
{
var r = eval('(' + httpObj.responseText + ')');
document.getElementById('post_title').value = r.post_title;
document.getElementById('post_date').value = r.post_date;
updateCalendar();
document.getElementById('post_text').value = r.post_text;
tinyMCE.updateContent(tinyMCE.getInstanceById('mce_editor_0').formElement.id);
}
}
httpObj.send(null);
}