Mam taką oto sytuację, za pomocą tych komend:
Kod
var fced = FCKeditorAPI.GetInstance(name);
var zawartosc = fced.GetXHTML(true);
var zawartosc = fced.GetXHTML(true);
pobieram zawartość FCKeditor i przekazuje ją za pomocą jQuery do pliku PHP gdzie ma zostać zapisana w BD.
Wszystko jest okej w moim skrypcie, gdyby nie przypadek, że dodałem plugin Google Maps Do FCK i on dodaje do treści skrypt. W przypadku kiedy zawartość FCK jest przekazywana przez PHP wówczas nie ma problemu z zapisaniem tego w BD. Ale kiedy chce za pomocą jQuery (czyli JS) przekazać zmieną "zawartosc" która zawiera w sobie skrypt JS to wówczas nie zapisuje mi tego do BD.
I nie wiem jak to rozwiązać. Wydaje mi się że wynika to z tego że w zapytaniu do BD:
Kod
$aktualizuj = "UPDATE $tab_menu SET description='$value' WHERE id=$postID";
$values - która zawiera wartość przekazaną przez JS (ze zmiennej zawartosc) jest obrana w pojedyczny cudzysłów (z racji tego że to string), a wewnątrz zmiennej skrypty są opatrzone również pojedyńczymi cudzysłowiami - I tutaj zapewne pojawia się konflikt niedomkniętech cudzysłowiów. Tylko nie wiem jak to rozwiązać teraz.
Zaznacze jeszcze że opakowanie w stripslashes, czy htmlspecialchars nie rozwiązuje problemu.
Kiedy zastosuje mysql_escape_string to znowu nie zapisze mi skryptu w BD. Ma ktoś jakieś inne pomysły ?
Znalazłem miejsce w którym problem występuje.
Kod
...
document.write('<div id="gmap20099623323" style="width:400px; height:240px;">.<\/div>\');
document.write('<div id="gmap20099623323" style="width:400px; height:240px;">.<\/div>\');
Tutaj DIV ujęty jest w cudzysłów pojedyńczy i w tym miejscu występuje konflikt, nie wiem jak to przerobić by działało poprawnie. jak cudzysłów pojedyńczy zamienie na podwójny to dane zostaną zapisane w BD, ale na stronie nie wykonają się (tzn nie wyświetli mapki), z racji tego że wewnątrz występuje cudzysłów podwójny i to z kolei rozwala skrytp. Ma ktoś jakieś propozycje ?
---------------------------------------------------------
Rozwiązałem to sam - jak w większości przypadków.
W pliku do którego przekazywałem dane z JS (jQuery) w celu zapisania danych w bazie danych zmieniłem linijkę:
Kod
$value = $_POST["tresc"]
na Kod
$value = str_replace("'","\'",$_POST["tresc"]);
Metoda może i zakombinowana trochę, ale przynajmniej skrypt działa tak jak trzeba.Cały problem był w tym, że FCKw pluginie googlemaps/fckplugin.js przekazuje do textarea dobrze zakodowany ten wpis czyli zamias ' występuje \', niestety textarea w stanie widoku automatycznie przekształca \' na '. Przez co zapisać się tego nie dało do BD bo jak pisałem wcześniej był błąd składni.