Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript] Unexpected token illegal
Forum PHP.pl > Forum > Przedszkole
Terrorizer
Zrobiłem sobie na stronie skrzynkę, żeby użytkownicy mogli kontaktować się między sobą.
Niektóre wiadomości nie chcą się otwierać. Otworzyłem konsolę i po kliknięciu w taką nieaktywną wiadomość wyskakuje "Uncaught SyntaxError: Unexpected token ILLEGAL".
Czytałem, że to może być wina js, ale przyczyn może być wiele. Wiadomości nie zawierały żadnych szczególnych znaków to były testowe wiadomości w stylu "asdasd"

Mam sporo kodu, jednak wrzucę, gdyby ktoś miał ochotę na to zerknąć.
  1. <div id="messagebox">
  2. <?php
  3. $nick = mysql_fetch_array(mysql_query('SELECT nick FROM users WHERE id = "'.$_SESSION['id'].'"'));
  4. $messages = mysql_query("SELECT * FROM msg WHERE receiver = '".$nick['nick']."' ORDER BY id DESC ");
  5. while($allmessages = mysql_fetch_assoc($messages)){
  6. $x = $allmessages['id'];
  7. $m = $allmessages['message'];
  8. $nickfetch = mysql_fetch_array(mysql_query("SELECT * FROM msg WHERE receiver = '".$nick['nick']."' AND id = '".$x."' "));
  9. $n = $nickfetch['sender'];
  10. $s = $allmessages['seen'];
  11. echo "<button class='my-button' id='".$x."' onClick=\"openmsg('$m','$n');seenupdate('$x')\">";
  12. echo "<div class='left'>" . substr($allmessages['message'],0,40) . " " . "..." . "</div>";
  13. echo "<div class='right'>" . $allmessages['date'] . " " . " " . " ";
  14. echo '<div class="nicklink"><a href="user.php?user=' . $allmessages['sender'] . '">' . $allmessages['sender'] .'</div>';
  15.  
  16. echo "</button>". "<br /> <br />";
  17. if ($s == "no"){
  18. echo "<script>
  19. $(document.getElementById(".$x.")).css('background-color', '#adff2f');
  20. $(document.getElementById(".$x.")).css('color', 'black');
  21. </script>
  22. ";
  23. }
  24. }
  25. ?>
  26. </div>


  1. <script>
  2. function openmsg(m,n) {
  3. $(document).ready(function(){
  4. document.getElementById("messagebox").innerHTML = "<div class='mes'>Wiadomość:<br />" + m + "<br /><br /><a href='mailbox.php' id='wstecz'><button>wstecz</button></a>" + "<a href='respond.php?user=" + n + "' id='wstecz'><button>odpowiedz</button></a></div>";
  5. });
  6. }
  7. </script>
  8.  
  9. <script>
  10. function seenupdate(x) {
  11. $.ajax({
  12. type : "POST",
  13. url : "messageseenupdate.php",
  14. data : {
  15. seen : "YES",
  16. id : x
  17. }
  18. });
  19. }
  20. </script>


EDIT: w konsoli błąd wskazuje mi na coś takiego:
  1. <script>(function() {with (this[2]) {with (this[1]) {with (this[0]) {return function(event) {openmsg('wiadomość wiadomość wiadomoooość
  2. ','KrolowaJadwiga');seenupdate('98')
  3. };}}}})</script>
mmmmmmm
w 13 lnii nie masz zamknięego <DIV>. Może to to.
Terrorizer
Niestety nie pomogło, ale to też dobra uwaga, dzięki tongue.gif
trueblue
Spróbuj podejrzeć treść wiadomości hexedytorem, czy nie ma jakichś nietypowych znaków.
Terrorizer
Nie wiem czy robię to poprawnie. Wystarczy, że skopiuję wiadomość z bazy i wkleję do hexeditora za pomocą edit>enter string?
Jeśli tak, to nie pokazuje nic nadzwyczajnego
trueblue
Zrobiłbym backup tabeli "msg" do pliku i ten plik podejrzał.
Terrorizer
W treści tej wiadomosci, która nie chce się otworzyć jest dopisek "/r /n".
Wysłałem z ciekawości drugą taką samą i się otwiera normalnie, a hex już w niej tych znaków nie znajduje.
Teraz tylko pytanie, co z tym zrobić haha.gif?

edit: Chciałbym dodać, że nie używam żadnych "string escape". Właściwie, to niedawno się dowiedziałem o istnieniu czegoś takiego. Czy tu leży przyczyna?
edit2: Gdy wciskam enter w wiadomości, rzeczywiście przestaje się ona otwierać. Muszę się teraz nauczyć używać tego string escape, czuję, że to jest to
trueblue
Użyj json_encode na stringu wiadomości.
Terrorizer
Nie wiem czy to ma jakieś znaczenie, ale czy to powinno być zrobione przed zapisaniem stringu do bazy, czy po ściągnięciu stringu z bazy i odczytaniem już?

Dodając json_encode przed zapisaniem wiadomości do bazy zwyczajnie sprawia, że się ona nie zapisuje wcale:
  1. if (isset ($_POST['send']) ){
  2. include 'connect.php';
  3. $escapedmessage = json_encode($_POST["message"]);
  4. mysql_query('INSERT INTO msg (message, receiver, sender, date) VALUES ("'.$escapedmessage.'", "'.$_GET["user"].'", "'.$sendernick["nick"].'" ,"'.date("H:i | d-m-Y").'") ');
  5. }

Natomiast gdy dodaję to polecenie wypisując wiadomości z bazy, to już w ogóle żadna nie chce mi się otworzyć
  1. $m = json_encode($allmessages['message']);
Turson
Jeżeli json nie zapisuje się do bazy to z jakiejś konkretnej przycyzny. Masz ponad 250 postów to może wypadałoby wiedzieć jak wyświetlać błędy zapytań mysql. Masz podpowiedź w podwieszonym temacie
Terrorizer
Niby tak, ale dodałem:
  1. ini_set('display_errors','1');
Oraz to:
Niestety niczego mi to nie wyświetla, jedynie przerywa skrypt.

Pomyślałem, że może gdzieś się schowała treść wiadomości, ale daję ctrl+a , wklejam całość strony w notatnik, ale nie ma żadnych errorów widocznych.
Turson
Co zwraca
  1. echo('INSERT INTO msg (message, receiver, sender, date) VALUES ("'.$escapedmessage.'", "'.$_GET["user"].'", "'.$sendernick["nick"].'" ,"'.date("H:i | d-m-Y").'") ');
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.