2012-01-28 3 views
0

У меня есть этот код, который должен отражать некоторые значения из базы данных MySQL. Я использую тот же самый код дважды, и эта часть кода работает не так, как ожидалось.Php «echo» не работает должным образом с событием «onmouseover»

У меня есть DIV, который изменяет содержание при наведении курсора мыши (с $(this).html('')).

В принципе у нас есть что-то вроде:

echo "<a href=\" event.php?id=".$donnees['event_ID']." \">"; 
echo "<div class=\"" ; 
//here, check which category we have, and select the appropriate CLASS (DP_0, _1, _2, _3). 
if ($donnees['event_category'] == 'universitaire') { 
    echo "DP_0"; 
} else if ($donnees['event_category'] == 'sociol') { 
    echo "DP_1"; 
} else if ($donnees['event_category'] == 'artiste') { 
    echo "DP_2"; 
} else if ($donnees['event_category'] == 'aventurier') { 
    echo "DP_3"; 
} else { 
    echo "DP_0"; 
} 
echo "\" id=\"".$donnees['event_ID']."\" onmouseover=\"$(this).html('"; 
echo "Institution: ".$donnees['event_institution']. "</br>"; 
echo "Association: ".$donnees['event_association']. "</br></br>"; 
echo "')\” onmouseout=\"$(this).html('"; 

echo $donnees['event_name'] . "</br></br>"; 
echo "Adresse: ".$donnees['event_adresse'] . "</br></br>"; 

if ($donnees['event_payant'] == '0') { 
    echo "PAYANT"; //Works 
    echo "<p>BLABLA</p></br'>"; // Works 
    echo "<p style=\"background-color:red;\”>BLABLA</p></br>"; // doesn't work 
} 


echo "')\" sty1e=\" "; 
//here, check which category we have, and select the appropriate background 
if ($donnees['event_category'] == 'universitaire') { 
    echo "background-image:url('images/universitaireCategory.png');"; 
} else if ($donnees['event_category'] == 'sociol') { 
    echo "background-image:url('images/socialCategory.png');"; 
} else if ($donnees['event_category'] == 'artiste') { 
    echo "background-image:url('images/artisteCategory.png');"; 
} else if ($donnees['event_category'] == 'aventurier') { 
    echo "background-image:url('images/aventurierCategory.png');"; 
} else { 
    echo "background-image:url('images/universitaireCategory.png');"; 
} 
echo " \"> "; 

я заметил странные части. Если я:

echo "<p>BLABLA</p></br>"; // That code works fine 

но:

echo "<p style=\"background-color:red;\">BLABLA</p></br>"; // doesn't work 

Как только я добавляю что-то с \"\" или ' ', все то, что после того, как нарушается. Зачем?

Тот же самый код позже в мой код работает:

<div> <p style=\"background-color:red;\">BLABLA</p></br> </div> 
+2

Как выглядит ваш визуализированный html при создании источника просмотра? –

+0

Как выглядит получившийся HTML? –

ответ

1

Я думаю, что проблема заключается в том, что проблематичной HTML инкапсулируется в onmouseover="" РНР вторя из \" как " и результирующий HTML является что-то вроде:

onmouseover="$(this).html('<p style="background-color:red">BLABLA</p></br>')"

в результате, onmouseover фактически только "$(this).html('<p style=".

Чтобы заставить его работать, вам придется избегать двойных кавычек в PHP и Javascript частей вашего кода. К сожалению, я не знаю, как это сделать.

Я установил jsfiddle here, который, как я надеюсь, демонстрирует мою точку зрения.

+1

Двойной кавычек будет '\\\' '. Это« PHP, напечатайте обратную косую черту, а затем кавычку ». Это заставляет JS видеть сбежавшая цитата – Borealid

+0

@magicalex Очень полезно! Мне удалось исправить мою проблему, приняв другое решение (меняя содержимое пролета на мыши вместо всего моего Div-cl.ly/DknB). Мне было любопытно и попробовал это с помощью мой старый код, и это действительно сработало! Будет использовать это в будущем! Спасибо! –

+0

Добро пожаловать. – magicalex

4

Несколько вещей.

  • Не говорите, что «это не работает». Опишите, как. Я уверен, что если ваша бабушка позвонила вам, чтобы сказать вам, что ее компьютер не работает, вам придется задавать вопросы, чтобы исправить это.

  • Вы вообще не должны генерировать Javascript, используя PHP-код, как вы. Вместо этого напишите один набор JS, а затем отправьте ему разные данные (JSON, возможно?) Из PHP. Это упрощает отладку и очищает код, плюс вы можете обслуживать JS из другого источника - и вы можете тестировать Javascript!

  • Ваш код уязвим для атак XSS, если данные, которые вы помещаете в JS, содержат любой пользовательский ввод. Что, если event_name должно было быть чем-то вроде !"--;;^$&\\\*$'#? Будет ли созданный вами JS синтаксически корректным?

  • Не используйте атрибут style, где его можно избежать. Вместо этого используйте таблицы стилей и классы. Это упрощает отладку, поддержку и переучивание вашего сайта.

  • Вы можете избежать необходимости избегать ваших кавычек, используя одинарные кавычки вокруг строки, поскольку в PHP допустим любой тип цитаты. Обратите внимание, что переменные не будут интерполированы внутри строк с одним кавычком.

  • </br> не допустим. Попробуйте <br />, который является допустимым HTML и XHTML.

  • Нет ничего плохого в вашем заявлении echo. В выходном документе будет создан следующий HTML: <p style="background-color:red;">BLABLA</p></br>. Проблема в другом месте, но у меня недостаточно информации, чтобы сказать, где. Скорее всего, ваш сгенерированный JS бросает ошибки: взгляните на консоль разработчика в Google Chrome и проверьте сгенерированный Javascript на наличие ошибок, вызванных неправильным вводом ввода в код. Затем, когда это проблема, сделайте то, что я предложил ранее, и напишу функцию JS, которая принимает вход из PHP, вместо функции JS, которая написана PHP.

+0

Это больше комментариев/предложений, а не фактический ответ. – j08691

+0

@ j08691 Я попытался написать ответ, который будет наиболее полезен будущим пользователям Интернета, читающим эту страницу. Многие люди копируют примеры, не понимая их - если бы я только что сказал «проблема X», они с радостью последуют по стопам автора и скоро столкнутся с такими же проблемами. – Borealid

+0

Я думаю, что это отличный пост, следуя этим советам и рефакторингу, вероятно, решит проблему, если бы это не было вызвано опечаткой ... Но я согласен с тем, что она идет по линии того, что считается «ответом» на SO. –

3

Почему-то "фигурные кавычки" в конечном итоге в вашем коде:

echo "<p style=\"background-color:red;\”>BLABLA</p></br>"; 
//         ^^^ 

Это произведет сломанный HTML.

<p style="background-color:red;\”>BLABLA</p></br> 

Заменить его нормальным кавычками:

echo "<p style=\"background-color:red;\">BLABLA</p></br>"; 
+0

Ах! Я посмотрел его опубликованный снимок экрана. В его шрифте нет видимой разницы между символами кавычек ... – Borealid

+0

Возможно, это не так (пример 2 не показывает), но я не знаю, как иначе случайная фигурная цитата попала бы в сообщение, если только это было там для начала. Séraphin: «Посмотрите HTML-источник» в следующий раз - проблема была бы обнаружена быстро. –

+0

Oups хорошо! Спасибо за помощь! Даже не думал о публикации созданного пользователем html! На моей стороне не было курчавых цитат, это было сделано при переносе моего кода в stackoverflow! (Сначала я опубликовал скриншот, а кто-то нашел время, чтобы отредактировать мой оригинальный пост) –

Смежные вопросы