Funkcja eval() nie działa

0

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);
}
2

Tak patrze na Twój kod i mam lekki WTF. Kod PHP aż się prosi o zmianę (serio, tam masz takie wejście na wywalenie całej bazy że aż bije po oczach), zmianę na PDO (bo mysql jest do wywalenia odkąd weszło mysqli) itp

W js - 2005 dzwonił, chce swój kod z powrotem ;) może antyczne rozwiązanie a'la

eval("var r ="+httpObj.responseText);

albo lepiej - jquery albo jakikolwiek inny framework? bo serio w eval aż prosi się o strzelenie sobie w stopę. Może nawet jakieś JSON.parse() ?

0

Twoje eval() też nie działa

0

Serio? wow. nie dziwie się. Weź zrób jak każdy dobry programista, otwórz konsole i zobacz czemu nie działa. albo daj co faktycznie zwraca Ci ten Twój skrypt. Może nie jest za bardzo zgodne ze standardem. Może eval nie może przemielić tego co dostaje, może jakieś warny w outpucie wyskakuja, może masz jakieś zbędne whitespaces, może zamiast eval użyj czegoś innego (jak chociaz json.parse() albo jakiś framework)?

Wiesz "nie działa" to nie coś co mówi programista ;)

0

Taki kod dałem
var r=JSON.parse(httpObj.responseText);

Dołączyłem bibliotekę json2.js i nadal formularz przy edycji wpisu jest pusty

1

SOA#1 – Standardowa Odpowiedź Administratora nr 1: U mnie działa.

debuguj :) serio. otwórz konsole, tam pewnie będzie warn albo coś czemu konkretnie nie działa. albo co jest w responseText...

0

Jak pozbyć się znaków  z początku pliku fetch_admin.php - może to jest powód

0

Czy macie jeszcze jakieś pomysły?

0

powtórzę się - skopałeś na samym początku. masz rozpieprzone kodowania w plikach i dopóki tego nie naprawisz - będzie źle.

zainstaluj normalne IDE (Notepad++ to notatnik z kolorowaniem, nie IDE), zrób nowy projekt, poustawiaj wszędzie UTF-8 bez BOM i otwieraj kolejno pliki w tym notepadzie, w IDE twórz nowe pliki i wklejaj ich treść.

NIE KOPIUJ CAŁYCH PLIKÓW!!!

i powinno działać ;)

0

Już jest dobrze z polskimi znakami - brakowało <?php header('Content-Type: text/html; charset=utf-8');?> po wejściu do bazy. A httpObj.responseText zawiera całą tablicę, tylko jest problem z jej odkodowaniem

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.