Prosty system komentarzy... problem z odczytaniem danych

Chyba wiem o co chodzi(a przynajmniej tak myślę) a pewno rozchodzi się o znak ', a pisałem już o tym

Przed zapisem do bazy używasz addslashes() a przy odczycie tekstu z bazy używasz stripslashes().

$autor =addslashes(trim($_POST['autor']));

$tresc = addslashes(trim($_POST['tresc']));

a przy odczycie

value="'.stripslashes($rekord['tresc']).'" />

itd.

Po tym wyskakuje błąd przy parsowaniu…

@edit:

Błąd pojawia się na 48 linii, po dodaniu stripslashes do wszystkich (id, autor itp.) błąd kończy się na linii 28, a dokładniej na tej:

echo '

addslashes() stripslashes() używasz tylko do tekstu i tak to się używa addslashes($tutaj_dajesz_tresc) http://php.net/manual/en/function.addslashes.php.

Dałem edit, zerknij w poprzednim poście.

Tak wygląda teraz kod:

if($_POST['a'] == 'save') 

   { 

      /* odbieramy zmienne z formularza */ 

      $id2 = (int)$_POST['id']; 

      $dodany = addslashes(trim($_POST['dodany'])); 

      $tytul = addslashes(trim($_POST['tytul']));

      $news = addslashes(trim($_POST['news'])); 

      $autor = addslashes(trim($_POST['autor'])); 

      $tresc = addslashes(trim($_POST['tresc'])); 

      /* uaktualniamy tabelę test */ 

      mysql_query("UPDATE aktualnosci SET dodany='{$dodany}', tytul='$tytul', news='$news', autor='{$autor}', tresc='{$tresc}' WHERE id='{$id2}'") or die('Błąd zapytania'); 

      echo 'Dane zostały zaktualizowane'; 

   }



    $id = (int)$_GET['id'];


    $wynik = mysql_query("SELECT * FROM aktualnosci WHERE id='{$id}'");   

   $rekord = mysql_fetch_array($wynik, MYSQL_ASSOC);



    echo ' 



        Data dodania:

        value="'.stripslashes$rekord['dodany'].'" />



        Strona:

        value="'.stripslashes$rekord['news'].'" />



        Autor:

        value="'.stripslashes$rekord['autor'].'" />



        Tytuł:

        value="'.stripslashes$rekord['tytul'].'" />



        value="'.stripslashes$rekord['tresc'].'" />'.stripslashes$rekord['tresc'].'


'; 


    ?>

Pominąłem wklejanie <?php i łączenia z bazą.

[...]

edit.php?id='.$id.'

[...]

stripslashes($rekord['news'])

itd.

No i niestety nie pomaga. ;/ Dalej to samo. Jakby textarea miało jakąś blokadę. ;/

textarea nie ma atrybutu value="".

Sprawdź czy teks się cały zapisuje do bazy danych czy tylko ucina przy wyczytywaniu(na jakim znaku). Nie usuwaj tych stripslashes() oraz addslashes().

Tak, w bazie danych zapisuje się cała treść, mimo to w textarea wyświetla się tylko część i tylko tą część mogę zmieniać. Dziwne zjawisko.

To oznacza że w tekście jest znak którego textarea “nie może strawić”.

Sprawdź coś takiego

'.htmlspecialchars(stripslashes($rekord['tresc'])).'

‘.htmlspecialchars(stripslashes($rekord[‘tresc’])).’

nie pomaga.

W tej treści rzeczywiście jest link, jednak na początku textarea jest od razu link, czyli kończy na , próbowałem zrobić też tak:ale to nic nie daje. Dodałem dla testów drugi wpis w bazę z treścią "Pierwsza częśćlink druga część" i w textarea wyświetla się wszystko jak wpisałem. Co może być tam nie tak to nie rozumiem.

link prosto z bazy danych:

“/” kłopotem być nie może bo w teście wszystko gra.;/

Dlatego osobiście wolę korzystać z bbcode. Wstaw tutaj ten tekst(albo jak nie chcesz tutaj wyślij mi na PW).

Nad wrzuceniem teraz BBCODE trochę roboty… Teraz na prawdę nie wyrabiam, dzisiaj jak rozwiązywaliśmy problem to ciągnąłem jeszcze 3 rzeczy osobno, dlatego na razie to zostawię. Podrzucę Ci jutro przed pracą ten tekst na PW.

@edit:

Sory, że nie podesłałem, ale rano nie miałem internetu. Sprawdziłem to przed chwilką, zrobiłem długi tekst jak tamten, po środku dałem link i jak w przypadku tamtego - pokazuje się od linka tekst w edycji.

“Długi tekst link długi tekst”

I podczas edycji jest “link długi tekst” czyli od linku jakby przestawał wyświetlać, nie wiem czemu.

Normalnie textarea przyjmuje wszystko(bo w końcu służy do zapisu danych) więc ciężko stwierdzić co jest przyczyną(nie widząc tego), czy tekst czy coś innego.

Tak więc co?

Dam przykłady z bazy danych. Krótki tekst z linkiem:

TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT link TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT[/code]




Treść w edycji (textarea) się wyświetla cały. Natomiast przy tym tekście już wyświetla od link:

[code]TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT linkTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT

To jest wyciągnięte teraz z bazy danych. I przy edycji z krótki tekstem jest całość wyświetlona, a przy długim tekście tylko od link. Tak więc nie wiem, co może być tutaj nie tak. ;/

Jedyne co mi się rzuca w oczy to brak backslashy przy adresie, do bazy zapisz

link

[/code]


ale nie poprzez ten skrypt tylko bezpośrednio.



Tuż pod daj

[code] echo $rekord[‘tresc’];

Robiłem już w ten sposób linki w bazie (link) i jak wspominałem bez zmian.

Piszesz, żeby dodać pod to:

echo $rekord['tresc'];

W tym pliku edycja.php odpowiedzialnym za edycję tak?

Tak, zapomniałem napisać(albo sprawdź w źródle strony co pisze pomiędzy - chociaż wątpię żeby była jakaś różnica).

Hahaha, rozwiązany problem. Sprawa banalna. :slight_smile:

Kod był taki:

'.htmlspecialchars(stripslashes($rekord['tresc'])).'

Skasowałem po prostu value bo przecież treść będzie między textarea więc teraz wygląda to tak:

'.htmlspecialchars(stripslashes($rekord['tresc'])).'

I wszystko gra, przy dłuższych tekstach wyświetla się normalnie całość.

@edit:

Jeszcze małe pytanko. Jak pytać się o aktywną sesję? Chodzi o to, że logowanie będzie w pliku login.php, po zalogowaniu przenosi do np. zalogowany.php i chce, żeby było zapytanie do bazy, jeżeli zalogowany to wyświetli treść, jeśli nie to wywali błąd “Nie jesteś zalogowany”.

To już ostatnie pytanie. :slight_smile:

Post z 2 strony(05.01.2010) i kto rozwiązał pierwszy :stuck_out_tongue: Głupie błędy są najgorsze.

Poczytaj o sesjach - temat rzeka dlatego poszukaj na google(na forum też tego znajdziesz pełno) konkretnych tutoriali. Ogólnie całość sprowadza się do sprawdzenie dowolnego parametru zapisanego w sesji, jeżeli jego zawartość nam odpowiada to wyświetlamy treść jeżeli nie to nie.

Mała uwaga bo trochę źle wcześniej napisałem htmlspecialchars() użyj przy zapisie do bazy danych nie przy odczycie z niej.

Okej, poprawię błąd.

Co do sesji to przypomniało mi się, ale nie wiem czy z głowy dobrze pisze. Z resztą sam widzisz w tym temacie co było. :slight_smile:

<?

session_start(); 

  if(!session_is_registered("uzytkownik")){ 

  header("location:index.php"); 

}

?>

Wydaje mi się, że dobrze. Tylko jak w przypadku tej edycji nie będzie czasem potrzebny na górze jeszcze kod do łączenia z bazą? ;p