【问题标题】:Using PHP/SQL - How can I click an item in a list to display another list of items assoicated to the clicked item [duplicate]使用 PHP/SQL - 如何单击列表中的项目以显示与单击的项目关联的另一个项目列表 [重复]
【发布时间】:2012-11-14 03:50:48
【问题描述】:

可能重复:
How can I refresh a detail select list when my master select changes using AJAX

我只是在一段时间后再次开始学习 PHP,在环顾四周后认为我需要使用 JS/ajax 来实现这一点,我打算在我对 PHP 更加熟悉之后了解更多。我想学习如何为我现在正在做的一些事情做到这一点。

我有一个父项目表,我将其显示为链接列表。单击父项时,我希望单击的父项的子项显示在另一个列表中。我可以使用简单的查询来显示 2 个列表,我只是不知道如何在单击时更新页面/sql 查询。

<?php require ('connection.inc.php'); ?>

<div id="lists">
    <h3>Lists</h3>
     <?php      
    $lists = mysql_query("SELECT * FROM lists") 
    or die(mysql_error());
    while($info = mysql_fetch_array( $lists )) 
    {  
    echo "<a href=\"#\">".$info['ListName']."</a><br />";
    } 
    ?>      
</div>  

<div id='listitems'>
    <h3>List <?php $parent=2; echo $parent?> Items</h3> 
     <?php
    $listitems = mysql_query("SELECT * FROM listitems WHERE parent=$parent") 
    or die(mysql_error()); 
    while($info = mysql_fetch_array( $listitems )) 
    { 
    echo $info['itemName']."<br />";
    }   
    ?>
</div>

【问题讨论】:

标签: php javascript mysql ajax


【解决方案1】:

除了代码问题(mysql_* == mucho deprecato),您需要检查请求是否为 AJAX 并输出列表项。

我使用 jquery 来简化 ajax 请求。

<?php
require ('connection.inc.php');

/* AJAX request */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && 
        strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
    $query = sprintf('SELECT * FROM listitems WHERE parent=%d',
            mysql_real_escape_string($_REQUEST['parent']));
    $listitems = mysql_query($query)
            or die(mysql_error()); 
    printf('<h3>List %d Items</h3>', $_REQUEST['parent']);
    while($info = mysql_fetch_array( $listitems )) 
    { 
        echo $info['itemName']."<br />";
    }
    exit;
}

/* Normal request */
?>

<div id="lists">
    <h3>Lists</h3>
    <?php      
    $lists = mysql_query("SELECT * FROM lists") 
            or die(mysql_error());
    while($info = mysql_fetch_array( $lists )) 
    {  
        echo "<a href=\"#\">".$info['ListName']."</a><br />";
    } 
    ?>      
</div>  

<div id='listitems'>
</div>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
jQuery(function($)){
     $('#lists').delegate('a', 'click', function(){
         $('#listitems').load(window.location.pathname, {parent: $(this).text()});
         return false;
     });
}
</script>

【讨论】:

  • 感谢您的回复。当我单击列表链接时,不会加载任何项目。任何线索可能导致这种情况?我认为这可能与父 ID 有关,但是在更改它们之后,我仍然无法获得要显示的项目列表。页面源将列表项区域显示为空。
  • 得到了一些帮助。我在这里发布了完整的答案 - stackoverflow.com/q/5914993/1853914,因为它在被标记为重复后被关闭了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
相关资源
最近更新 更多