【问题标题】:PHP: Navigating through dataPHP:浏览数据
【发布时间】:2011-08-10 16:22:41
【问题描述】:

我正在开发一个 PHP 站点,需要允许用户选择数据并在下一个 DIV 上显示不同的数据(参见附图)。本质上,我希望使用 SQL SELECT 语句填充 DIV(溢出:自动,因此它会滚动),并允许用户单击列表项。如果有意义的话,该项目会为右侧的 div 创建一个新的 SELECT 语句。关于解决此问题的最佳方法的任何意见? PHP 新手,但不是 HTML/CSS。

扎克

【问题讨论】:

  • 不确定您的问题是什么?这可能最好使用 JavaScript 完成,因此您不必重新加载页面
  • @Pekka:这是一个列视图。我需要根据先前列的选择来填充列。例如:如果我按 Company 2(在附图上),下一列将显示 SQL 数据库中与 Company2 关联的所有文件(使用 SELECT 语句)。
  • 看起来和 Mac OS 中的文件资源管理器风格相同。

标签: php mysql html css list


【解决方案1】:

我认为最好的方法是使用 jQuery(一个 JavaScript 库)。 I 非常易于使用,如果你掌握了诀窍,你可以用它做出惊人的事情。

对于 PHP/MySQL,您可以使用 jQuerys Ajax 功能(请参阅http://api.jquery.com/jQuery.ajax/)。使用回调显示加载的数据(见下文)。

这是一个非常简单的示例,说明如何使用动态内容显示另一个 div(其中可能是更多可供选择的链接)。如果你把它和 Ajax 结合起来,你应该得到你所需要的。

在 head 标签中包含 jQuery:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>

正文代码:

<!-- First Box: click on link shows up second box -->
<div id="selectOne" style="float: left; margin-right: 10px; border: #666 thin solid; padding: 10px;">
  <a href="#" id="one">One</a><br />
  <a href="#" id="two">Two</a><br />
  <a href="#" id="three">Three</a>
</div>

<!-- Second Box: initially hidden with CSS "display: none;" -->
<div id="selectTwo" style="float: left; margin-right: 10px; display: none; border: #666 thin solid; padding: 10px;"></div>

<!-- The JavaScript (jQuery) -->
<script type="text/javascript">

//Do something when the DOM is ready:
$(document).ready(function() {

//When a link in div with id "selectOne" is clicked, do something:
$('#selectOne a').click(function() {
    //Fade in second box:
    $('#selectTwo').fadeIn(500);

    //Get id from clicked link:
    var id = $(this).attr('id');

    //Depending on the id of the link, do something:
    if (id == 'one') {
        //Insert html into the second box which was faded in before:
        $('#selectTwo').html('One<br />is<br />selected')
    } else if (id == 'two') {
        $('#selectTwo').html('Two<br />is<br />selected')
    } else if (id == 'three') {
        $('#selectTwo').html('Three<br />is<br />selected')
    }
});
});
</script>

因此,如果您要使用 jQuerys Ajax-Functionality,您可以使用类似的东西(未经测试!):

$('#selectOne a').click(function() {

var id = $(this).attr('id');

    $.ajax({
        type: 'POST',
        url: 'getYourData.php',
        data: 'thisIsSentToPHPFile='+id,
        success: function(msg){
            //everything echoed in your PHP-File will be in the 'msg' variable:
            $('#selectTwo').html(msg)
            $('#selectTwo').fadeIn(500);
        }
    });
});

getYourData.php 可能是:

$id = $_POST['id'];
$query = mysql_query('SELECT * FROM table WHERE id='.$id);
$result = mysql_fetch_assoc($query);

//Now echo the results - they will be in the callback variable:
echo $result['tablefield1'].', '.$result['tablefield2'];

试一试,稍微调整一下,你应该就能让它工作了。

【讨论】:

  • 谢谢!我会试一试 - 我将您提供的 AJAX 代码放在哪里?它是否在同一个 BODY 部分?
  • 嘿 Zakman,很抱歉回答迟了。是的,您可以在同一正文部分或单独的 JavaScript 文件 (.js) 中执行此操作。如果这样做,则必须像 jQuery-File 一样将 js-file 包含在标头中,但要包含 jQuery 文件!
【解决方案2】:

最直接的方法可能是将正确的部分设为 iframe。

那么中间列表中的每个项目都可以是这样的链接:

<a href="displaySubItems.php?company=2" target="rightColumn">Company 2</a>

在 displaySubItems.php 中,您将使用您的 select 语句中的 $_GET['company'] 值来填充表格。

您也可以使用 AJAX 方法来填充右侧的表格,尽管我个人对 AJAX 不太熟悉,所以我无法告诉您更多相关信息。我还怀疑 iframe 得到了更广泛的支持。

编辑:根据您的一个 cmets 更改了一些部分

【讨论】:

  • 感谢您的回复!唯一的问题是我的数据链接到 mySQL 数据库。那么我如何首先填充项目列表呢? 'href="displaySubItems.php?company=2' 显然知道有一个 company2。我将如何动态创建这些链接以推送到 displaySubItems.php?
  • 您对 PHP MySQL 类的熟悉程度如何?通读这些的介绍,然后选择一个或另一个(不是两个):php.net/manual/en/book.mysql.phpphp.net/manual/en/book.mysqli.php。基本上你会得到你的结果并循环它们以获得你的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
相关资源
最近更新 更多