PHP вставляет символы в HTML, которых нет в строке эха

php добавляет = "" в конец строки, когда я пытаюсь отобразить кнопку в свойстве onclick.

Это получает данные sql на сервере XAMPP. Он проходит по циклу и по сути составляет календарь, показывающий все мои счета и оплачиваю ли я их каждый месяц. Я использую AJAX для обновления базы данных и изменения оплачиваемой стоимости нажатием кнопки каждый месяц.

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

echo $billName
foreach ($months as $v) {
//$clickstring = 'onclick = "setCalendar("'.$billName.'","'.$v.'")';
$clickstring = "onclick=\"setCalendar(\"".$billName."\",\"".$v."\")";
if ($row["$v"] == "1") {
echo '<button class = "paidBtn green-text"'.$clickstring . '><i class = "fa fa-check" aria-hidden = "true"></i></button>';
} else {
echo '<button class = "unpaidBtn red-text"'.$clickstring.'><i class = "fa fa-times" aria-hidden = "true"></i></button>';
}

Скажем, например, на первой итерации $ billname = "Amazon"; и $ v = "jan". По первому эхо Амазонка верна. Однако, когда он использует ту же переменную при двойном щелчке, он вставляет перед ней пробел и, кажется, выполняет strtolower (). jan вставлен правильно, но после него добавляются дополнительные символы и кавычки. Вот вывод html из браузера:

<button class = "unpaidBtn red-text" onclick = "setCalendar(" amazon","jan") = ""><i class = "fa fa-times" aria-hidden = "true"></i></button>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
56
2

Ответы 2

Проблема в том, что HTML-код, который вы повторяете, будет выглядеть примерно так

onclick = "setCalendar("something", "month")"

Обратите внимание, как у вас есть двойные кавычки внутри двойных кавычек в этом атрибуте HTML? Вы не можете этого сделать, потому что это преждевременно завершает ваш onclick. Вы можете обойти это различными способами, например, экранировать его с помощью \, но это усложняется, потому что тогда на вашем php вам нужно избегать \, который выглядит как \\, и это просто сходит с ума.

Только один из возможных способов переписать это, используя одинарные кавычки для аргументов onclick

echo $billName;

foreach ($months as $v) {
    $className = ($row[$v] == 1) ? 'paidBtn green-text' : 'unpaidBtn red-text';
    $icon = ($row[$v] == 1) ? 'check' : 'times';
    echo "<button class=\"$className\" onclick=\"setCalendar('$billName', '$v'\")>";
    echo "<i class=\"fa fa-$icon\" aria-hidden=\"true\"></i></button>";
}

Я также немного отредактировал это с помощью троичных файлов и удалил дважды, если у него был html, что является немного избыточным IMO. И убрал конкатенацию строк, чтобы ее было немного легче читать.

Спасибо за помощь и очистку кода. Результат ближе к тому, что мне нужно, но еще не совсем. Теперь это результат: <button class = "unpaidBtn red-text" onclick = "setCalendar ('Amazon', 'jan'") = ""> <i class = "fa fa-times" aria-hidden = "true "> </i> </button>

William McCown 22.12.2018 06:59

Я нашел решение. Я оставляю вопрос, если кто-то столкнется с той же проблемой. $ clickstring = "onclick = \" setCalendar ('". $ billName."', '". $ v."') \ "";

Другие вопросы по теме