Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > unterminated string literal


Автор: Orient 18.1.2007, 17:43
Здравствуйте

Задача у меня такая. по нажатию на кнопку сделать запрос к БД и вывести на страницу.
Страницу всю не перегружаю, с помощью JavaScript в ставляю в innerHTML нужного элемента результат запроса.
Так вот, все хорошо работало, до того момента как я не вставитл в текст данных в таблице символы <,>,".

При записи в БД я вопсользовался функцией mysql_real_escape_string
При выводе stripslashes и htmlspecialchars.
Так вот, в результате всего этого возникает ошибка в браузере в JavaScript. Пишется unterminated string literal.


Что я делаю не так? Помогите, а то уже туплю который день не могу понять что делать.

Спасибо

Автор: szz 18.1.2007, 17:53
Это значит что у тебя где-то получается какой-то кусок, где нет второй пары кавычек, например что-то такое:
Код

var str="нет закрывающей кавычки;
var another="вот и глючит";

Покажи пажалста код (или хотя бы критические на твой взгляд фрагменты), а то так непонятно что как.

Добавлено @ 17:55 
Мне кажется что stripslashes рубит заэскейпенные кавычки.
Т.е. например
Код

var str = "some \"value\" here";

превращает в
Код

var str = "some "value" here";


Автор: Orient 18.1.2007, 18:00
по нажатию на копку работает вот этот Javascript
Код

    function RefreshPhoneList( sender ) {
        var PhoneManufacturerList = document.getElementById( "PhoneManufacturerList" );
        var PhoneModelList = document.getElementById( "PhoneModelList" );    
    
        var link = "getdisklist.php?&manufacturer=" + PhoneManufacturerList.value + "&model=" + PhoneModelList.value;
        
        
        link = link + "&admin=" + sender.Admin;
        
        
        var old_s = document.getElementById("dataloader");
        if (old_s) {   
            old_s.parentNode.removeChild(old_s);            
        }
        
        var s = document.createElement("script");
        s.setAttribute("type", "text/javascript");
        s.src = link;
        s.id = "dataloader";
        document.getElementsByTagName("head")[0].appendChild(s);        
    }



getdisklist.php содержит вот что:
Код

        $sss = "";        
        
            
        if ( $ServerConnection = ServerConnect() ) {
            
                $PhoneType = ' ';
        
                $query = 'SELECT * FROM .......' )';
        
            //echo $query;
            if ( $res = mysql_query( $query ) ) {
                /*$sss .=
                    '<table width="100%" border="0" ><tr><td>';
                   */ 
                
                if ( mysql_num_rows( $res ) == 0 ) {
                    $sss .= '<br><br><center>Èçâèíèòå, íè÷åãî íå íàéäåíî</center>';
                } else                
                while( $line = mysql_fetch_array( $res )  ) {
                    $ss = stripslashes( $line[ 'About' ] );  
                    $sss .= $ss;
                }

            } else {
                
            }
        } else {
            
            
        }    
         
    
    $flag = true;
    if ( isset( $PData ) )    
        if ( count( $PData ) <> 0 )
            $flag = false;
        
    if ( $flag )
        echo 'document.getElementById(  "DiskListTable" ).innerHTML ="'. $sss .'";'; 




Автор: szz 18.1.2007, 18:05
Попробуй в 20-й строке ( попробуй сначала первый вариант - не сработает - второй и т.д.
Код

 20:                  $ss = addslashes( $line[ 'About' ]) ; 
Код


 20:                  $ss = stripslashes( htmlspecialchars($line[ 'About' ]) ); 
Код


 20:                  $ss = htmlspecialchars($line[ 'About' ]) ; 


 В записи "About" есть кавычки?

Добавлено @ 18:09 
Цитата

if ( count( $PData ) <> 0 )

  Впервые вижу чтоб кто-то <> использовал smile

Автор: mr.Anderson 18.1.2007, 18:11
szz, это, наверно, привычка из Basic или Pascal. smile

Автор: Antarn 18.1.2007, 18:30
Код

8:                $query = 'SELECT * FROM .......' )';

используй разные кавычки, например:
Код

$query = "SELECT * FROM table WHERE pole='test' ";

Автор: szz 18.1.2007, 18:31
Это он стирал запрос и забыл стереть эту маленькую кавычку...

Автор: Antarn 18.1.2007, 18:42
а разве такой запрос пройдет ?
Код

$query = 'SELECT * FROM table WHERE pole='test' ';

Автор: Orient 18.1.2007, 18:50
szz, делфист я, по профессии, так что действительно это привычка. порой как в паскале пишу, порой как в пхп

Добавлено @ 19:04 
szz, 

все три примера не подошли.

вот текст из About на котором все падает:

    sdfsdfsdfs

\&quot;adfasd\&quot;

Автор: Mal Hack 18.1.2007, 20:07
Делается так.
Отключаются magic_quotes - все.
При вставке в Базу делается htmlspecialchars, далее при выводе все будет нормально.

Автор: Orient 19.1.2007, 11:13
Ох...  проблема таки разрешилась.  Два дня тупления окончились.
Вобчем дело в том, что в About хранится много строчный текст, который котом с Javascript вставляется, вот переход на новую строку и вызвал данную ошибку.  Транслятор решил что это незаконченная строка.

С помощью вот такого кода: 
Код
$text=ereg_replace("(\r\n|\n|\r)", "<BR/>", $text);
  все излечилось.


Большое всем спасибо за помощь и участие.

Автор: Mal Hack 19.1.2007, 15:16
Боже, зачем так сложно?
str_replace убивает сначала все \r, потом еще раз все \n заменяем на <br/> и не мучаемся с POSIX

Автор: Orient 22.1.2007, 09:50
Какой первый рабочий пример нашел, такой и применил. 
В принципе можно и str_replace использовать, правда переделывать не охота  :-)
Спасибо на совет

Автор: szz 22.1.2007, 09:52
И где же ты такой пример нашел? Дай-ка ссылку, интересно работы этого автора посмотреть smile

Автор: Orient 23.1.2007, 17:55
вот где: http://forum.vingrad.ru/topic-75785/hl/ereg_replace%2Cand%2C%2526amp%3Blt%3Bbr%2526amp%3Bgt%3B/index.html

Автор: Beos 20.8.2007, 05:08
Спасибо огромное! Навели меня на путь истинный =) У меня переменная (с тем же глюком из за символов) уходила из пхп в яваскрипт и была та же ошибка.

Решил её вот так:
Код

$out_txt = str_replace("\r", '', $out_txt);
$out_txt = str_replace("\n", '\r\n', $out_txt);


Может каму ещё поможет =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)