Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Wpisywanie dużych tekstów do tablicy
Forum PHP.pl > Forum > Przedszkole
pikornecki
Witam, mam pewien duży problem.

Pracuję z edytorem CKEditor. Wysyłam treść do bazy danych. Chciałbym teraz zmienić tą treść za pomocą tego samego formularza (pod textarea podpięty CKEditor). Formularz składa się z tego textarea oraz selecta. W momencie zmiany selecta powinna wpisać się treść z odpowiedniego miejsca z bazy danych. Można to zrobić ajaxem, wiem niemniej jednak ja robię to tak (pseudokod):

1. pobierz za pomocą php info z bazy


$q = "SELECT id, name FROM tabela ORDER BY id";y
$r = mysqli_query($dbc, $q);
if (mysqli_num_rows($r) >= 1) {
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
$maxId = $row['id'];
$bookmarkContent[$row['id']] = $row['bookmarkContent'];
}
}
2. mam więc tablicę z pobranymi argumentami pora wtrącić to do javascript

echo '
<script language="JavaScript" type="application/javascript">
var tablica = new Array();
';
for ($i = 1; $i <= $maxId; $i++) {
$tekst = htmlspecialchars_decode($bookmarkContent[$i]);
$tekst = str_replace('&nbsp', '<br />', $tekst);
print "tablica[$i] = '$tekst';";
}
3. a następnie funkcja ''wpychająca'' te texty do wyswiga
echo 'function zakladkaDoEdycji2(form)
{
yourInt = parseInt(form);
CKEDITOR.instances.bookmarkEditor.setData(tablica[form]);
}
</script>';

Wywołanie funkcji wygląda tak

onchange="zakladkaDoEdycji2(this.form.changableBookmarksList.value)"

a name obiektu(textarea) to bookmarkEditor

I teraz pojawia się problem bo jak do jednego elementu tablicy jest wpisywany bardzo długi tekst to się wykrzacza. Z tej strony http://www.truuck.boleslawiec.pl/przepe%C5...enie_stosu.html dowiedziałem się (czego domyślałem się wcześniej) że przepełniam tablicę a tym samym stos. pytanie jak to zrobić żeby działało.

W skrócie zmiana selekta ma spowodować wpisanie tekstu z bazy danych do textarea do którego podpięty jest wyswig. JAK TO ZROBIĆ?
zegarek84
może daj tą stronę live...

jestem ciekaw jednego fragmentu w Twoim kodzie:
Kod
print "tablica[$i] = '$tekst';";

czy w tym tekście nigdy nie wystąpi pojedynczy apostrof?? - nie wydaje mi się by był on znakiem specjalnym ;p - może jednak konsola coś pokazuje...

i a propo treści z strony do której podałeś linka
Cytat
Inną przyczyną przepełnienia stosu jest próba stworzenia dużej tablicy na stosie. Rozwiązaniem jest zwykle przydzielanie pamięci dynamicznie.

JS jest dosyć mocno dynamicznym językiem, poza tym po drodze tworzysz dynamicznie tablicę deklaracją new Array(); wink.gif
pikornecki
ok znam już prawdopodobną odpowiedź:

Multiline Strings

teraz więc pytanie, jak z takiego stringa:


'<p>
&nbsp;</p>
<p class="p1" style="text-align: center; ">
<span style="color:#ff0000;"><span style="font-size:18px;"><b>STOLARSKI &nbsp;ZAKŁAD &nbsp;USŁUGOWO - PRODUKCYJNY</b></span></span></p>
'

zrobić takiego co zastąpi mi nową linię na znak ' \ ' tak jak na tej stronie:

http://www.strzelecki.info/2011/05/26/mult...ngs_javascript/
zegarek84
znak nowej linii w windowsie to \r\n, w linuxie to \r, w macu to \n więc znaki specjalne \r i \n mógłbyś zamieniać na spacje gdyż tak jest wyświetlana nowa inia w html'u i nie piszę o br - ale to tak k' woli tego o co bezpośrednio pytałeś...

w zrobisz duuuużo lepiej jeśli lukniesz na funkcję w php json_encode czy podobnie się zwie i już po problemie szybka konwersja Twojej tablicy jedną funkcją wink.gif
pikornecki
no i bym powiedział ZAJE..ŚCIE zegarek84 pomogłeś smile.gif funkcja json_encode pozbawiła mnie jakichkolwiek problemów i wszystko działa smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.