Значение переменной, не переданное в инструкцию mySQL в Bootstrap Modal

79
7

Я передаю переменные, используя jQuery для Bootstraps, модально через теги span, но имея проблему при запуске PHP в модальном режиме. Переменные все тянут нормально, но когда я пытаюсь запустить mySQL-команды, тег span, который я храню в переменной, выглядит как ничто, даже если это хорошо. Я привел пример кода ниже:

HTML:

<a role='button' data-topicid='$number' data-toggle='modal' data-target='#modaluserinfo' class='modalsend'>

JS:

<script>
$(document).ready(function () {
$('.modalsend').click(function () {
$('span.user-topicid').text($(this).data('topicid'));
});
});
</script>

Modal:

<div class="modal fade" id="modaluserinfo" tabindex="-1" role="dialog" aria-labelledby="modaluserinfo" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="myModalLabel">Details...</h4>
</div>
<div class="modal-body" style="text-align:center; margin-top:10px;">
<?php
$numberid = "<span class='user-topicid'></span>";
echo $numberid;// THE VALUE ECHOS FINE IN THE MODAL, BUT FAILS TO LOAD IN THE MYSQL QUERY BELOW

$sqlcomment = mysql_query("SELECT * FROM comments WHERE comments.topic_id='$numberid' AND comments.emotions_id='1'");
$commentnumber = mysql_num_rows($sqlcomment);

echo $commentnumber;
?>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>

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

спросил(а) 2021-01-19T20:19:48+03:00 9 месяцев, 1 неделя назад
1
Решение
91

PHP работает только на сервере. Для Javascript или jQuery для выполнения PHP-скрипта необходимо сделать вызов на сервер. Есть два способа сделать это GET (например, ссылку) и POST (например, форма). И есть два способа, которыми вы GET и POST, один из способов - перезагрузить страницу, другой - объект XHR, AKA Ajax.

Итак, создайте отдельный файл PHP, например...

get_number_comments.php:

<?php

// LOAD YOUR DATABASE CREDENTIALS HERE

$numberid = mysql_real_escape_string($_GET['topicid']);
$page = mysql_real_escape_string($_GET['page']);

$sqlcomment = mysql_query("SELECT * FROM comments WHERE comments.topic_id='$numberid' AND comments.emotions_id='1'");
$commentnumber = mysql_num_rows($sqlcomment);

echo $commentnumber;

?>

И измените функцию готовности документа на:

$(document).ready(function () {
$('.modalsend').click(function () {
$('span.user-topicid').load('get_number_comments.php?topicid=' + $(this).data('topicid') + '&page=' + encodeURIComponent('<?php echo page; ?>'));
});
});

Внутренняя DIV вашего модала теперь выглядит так:

<div class="modal-body" style="text-align:center; margin-top:10px;">
<span class='user-topicid'></span>
</div>

Функция загрузки jQuery делает вызов XHR на сервер, в этом случае выполняется файл, который вы вводите в первом аргументе, get_number_comments.php. Таким образом, get_number_comments.php принимает переменную GET, безопасно ускользает от нее, интерполирует ее в запросе и отправляет результат обратно на страницу через объект XHR.

(Кстати, поскольку PHP mysql_* функции, по-видимому, SOON являются нулевыми и недействительными, я призываю вас преобразовать функции PHP mysqli_*. Тогда вы также можете использовать строгие меры безопасности базы данных.)

ответил(а) 2021-01-19T20:19:48+03:00 9 месяцев, 1 неделя назад
46

Проблема была решена для передачи нескольких переменных, используя следующий метод:

HTML:

$page = mysql_real_escape_string($_GET['page']);

<a role='button' data-topicid='$number' data-page='$page' data-toggle='modal' data-target='#modaluserinfo' class='modalsend'>

JQuery:

$(document).ready(function () {
$('.modalsend').click(function () {
$('span.user-topicid').load('get_number_comments.php?topicid=' + $(this).data('topicid') + '&page=' + $(this).data('page'));
});
});

Обратитесь к сообщению @bloodyKnuckles за любыми подробностями

ответил(а) 2021-01-19T20:19:48+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема