【问题标题】:Variable value not passing into mySQL statement in Bootstrap Modal变量值未传递到引导模式中的 mySQL 语句
【发布时间】:2014-08-05 16:49:24
【问题描述】:

我使用 jQuery 通过 span 标签将变量传递给 Bootstraps 模态,但在模态中运行 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>

模态:

<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 标签时运行。不过不太清楚如何解决这个问题。

【问题讨论】:

  • PHP 只在服务器上运行。因此,如果您想在页面加载后执行 PHP 脚本,并且不重新加载页面,请使用 XHR 调用服务器上的 PHP 脚本。然后 PHP 脚本可以通过 XHR 对象将信息发送回浏览器。
  • 我不太确定 XHR 是什么,我希望有另一种解决方案,因为变量 $numberid 在模态中回显很好,但在 MySQL 语句 $sqlcomment 中没有加载

标签: javascript php jquery html twitter-bootstrap


【解决方案1】:

使用以下方法传递多个变量的问题已解决:

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 帖子

【讨论】:

    【解决方案2】:

    PHP 只在服务器上运行。要让 Javascript 或 jQuery 执行 PHP 脚本,需要调用服务器。有两种方法可以实现 GET(如链接)和 POST(如表单)。 GET 和 POST 有两种方式,一种是重新加载页面,另一种是 XHR 对象,也称为 Ajax。

    所以,制作一个单独的PHP文件,比如...

    get_number_cmets.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 的 load 函数对服务器进行 XHR 调用,执行您在第一个参数中输入的文件,在本例中为 get_number_comments.php。那么get_number_comments.php 获取 GET 变量,安全地对其进行转义,将其插入到查询中,并通过 XHR 对象将结果发送回页面。

    (顺便说一句,由于 PHP mysql_* 函数显然即将失效,我强烈建议您转换为 PHP mysqli_* 函数。然后您还可以使用严格的数据库安全措施。)

    【讨论】:

    • 非常感谢 - 它现在通过变量提取
    • 是否可以在 .load 函数中发送多个变量?我想发送一个变量 $page,它是来自页面顶部附近列出的 URL 的 GET 变量 ($page = mysql_real_escape_string($_GET['page']);): (例如 get_number_cmets.php?topicid =' + $(this).data('topicid') &page=$page)
    • 它似乎不起作用 - &page=$page 是否应该用引号括起来,例如 '&page=$page'?
    • 我也试过 'get_number_cmets.php?topicid=' + $(this).data('topicid') +'&page='+page
    • 没有错误 - 没有任何内容加载到模式中 - 变量不再通过,是的,它是一个 PHP 页面
    猜你喜欢
    • 2015-01-27
    • 2014-01-05
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 2016-03-25
    • 2015-12-02
    相关资源
    最近更新 更多