Я передаю переменные, используя 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. Не слишком уверен, как это исправить.
Проблема была решена для передачи нескольких переменных, используя следующий метод:
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 за любыми подробностями
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_*
. Тогда вы также можете использовать строгие меры безопасности базы данных.)