PHP jQuery «неопределенный строковый литерал» в обработчике onclick

0

Я использую PHP для передачи переменных в onclick элемента, однако, когда я это делаю, я получаю сообщение об ошибке "Unterminated string literal" в строке слишком долго. Мой PHP выглядит следующим образом:

$query = $conn->prepare("SELECT Name, Image, Description, Link, Price, ID FROM gallery ORDER BY ID desc");

            $query->execute();
            $query->bind_result($name, $img, $desc, $link, $price, $id);

            while($query->fetch())
            {
                if(strlen($desc) > 100)
                {
                    $sdesc = substr($desc, 0, 100) . '...';
                }

                $onclick = 'popup(\'' . $name . '\', \'' . $desc . '\', \'' . $price . '\', \'' . $img . '\', \'' . $link . '\', ' . $id . ')';

                echo '<div class="gallery" onclick="' . $onclick . '">
                    <img src="' . $img . '" alt="' . $name . '" />
                    <div><p>' . $sdesc . '</p>
                    <a href="' . $link . '" target="_blank">' . $price . '</a>
                    </div></div>';
            }

Мой jQuery выглядит следующим образом

function popup(title, desc, price, img, link, id)
            {
                $(".popupbodyg").children().remove();

                var HTML = '<input type="image" src="close.gif" id="close" /><div><div id="comments">' +
                            '<iframe src="comments.php?id=' + id + '"></iframe><br /><input type="image" id="share" src="Very-Basic-share-icon.png" /></div>' +
                            '<div id="desc"><p>' + desc + '</p><br />' + 
                            '<a class="gallery" href="' + link + '" target="_blank">' + price + '</a></div>' + 
                            '<div id="img"><img src="' + img + '" alt="' + title + '"/></div></div>';

                $(".popupbodyg").append(HTML);
                $("#popup").toggle();

                $(".popupbodyg #img").css("width", $(".popupbodyg").width() - 230 + "px");
                $(".popupbodyg #img").css("height", $(".popupbodyg").height() - ($("#desc").height - 5) + "px");

                $("#close").click(function(){
                    $("#popup").hide();
                });

                $("#share").click(function(){

                    $("#sharepopup").show();

                    $("#sharepopup").find("#link").attr("value", "http://www.encantojewellerydesign.com/gallery/?g=" + id);
                    $("#sharepopup").find(".fb-share-button").attr("data-href", "http://www.encantojewellerydesign.com/gallery/?g=" + id);

                    $("#sclose").click(function(){
                        $("#sharepopup").hide();
                    });

                });
            }

Единственный способ, о котором я могу думать сейчас, - ограничить количество символов в описании, чего я бы хотел избежать.

  • 0
    Используйте " снаружи» и ' внутри» в ваших строках PHP, чтобы вам не приходилось использовать \' или \" все время.
  • 0
    Какую фактическую ошибку вы получаете? (PHP? Какой номер строки? - JavaScript?)

2 ответа

-2
Лучший ответ

Вы пытались использовать методы замены строк, которые находятся в другом месте на SO?

$desc=str_replace("\n","\\n",$desc); //I'm guessing that the newline would probably be in the description if anywhere in the data you're passing.

ТАКЖЕ: Еще немного другой подход заключается в том, чтобы просто вставлять данные в ваш элемент и извлекать данные с помощью одного обработчика кликов, который передает его в свою всплывающую функцию.

Другими словами, вы можете изменить div.gallery так:

<div class="gallery" data-name=".$name." data-img=".$img." data-desc=".$desc." data-link=".$link." data-price=".$price." data-id=".$id.">

Затем добавьте обработчик щелчка следующим образом:

$('gallery').on('click', function() {
  var name = $(this).data('name');
  var img = $(this).data('img');
  var desc = $(this).data('desc');
  var link = $(this).data('link');
  var price = $(this).data('price');
  var id = $(this).data('id');
  popup(title, desc, price, img, link, id);
});
  • 0
    Я попробую оба решения!
  • 0
    Ну, я решил сделать вторую секунду первым, и это работает! Спасибо!
-3

Я предполагаю, что это связано с дополнительными html-символами, которые $ description и другие переменные передаются в yout js. Попробуйте, может быть, что-то вроде этого (для лучшего ответа, отправьте дамп переменных, которые вы передаете):

<?php
$query = $conn->prepare("SELECT Name, Image, Description, Link, Price, ID FROM gallery ORDER BY ID desc");

            $query->execute();
            $query->bind_result($name, $img, $desc, $link, $price, $id);

            while($query->fetch())
            {
                if(strlen($desc) > 100)
                {
                    $sdesc = substr($desc, 0, 100) . '...';
                }

                $onclick = 'popup(\'' .strip_everything( $name ). '\', \'' . strip_everything($desc ). '\', \'' .strip_everything $price) . '\', \'' . $img . '\', \'' . $link . '\', ' . $id . ')';

                echo '<div class="gallery" onclick="' . $onclick . '">
                    <img src="' . $img . '" alt="' . $name . '" />
                    <div><p>' . $sdesc . '</p>
                    <a href="' . $link . '" target="_blank">' . $price . '</a>
                    </div></div>';
            }

            function strip_everything($str){
                $str = strip_tags($str);
                return str_replace("\n" , ' ' , $str);
            }
  • 0
    В этих строках вообще нет HTML
  • 0
    @StressedProgrammer вы пробовали решение?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню