【问题标题】:MySQL, PHP, Ajax to filter result set?MySQL、PHP、Ajax 过滤结果集?
【发布时间】:2011-10-05 06:23:46
【问题描述】:

我是 MySQL 新手,想按区域“过滤”结果集。我之前问过一个类似的问题,但我不知道我是要创建一个新问题还是继续那个问题,如果我弄错了,抱歉。

我查看了http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_database 并认为它是理想的,但我不确定如何让它工作,或者我如何让它“更新”结果。

理想情况下,我认为该区域下方的下拉框看起来会很整洁 - 但是,我没有任何成功 - 我真的完全受限于我的理解,有人可以帮忙吗? (感谢之前帮助过第一部分的人!!)

到目前为止,这就是我所拥有的一切,(以便了解我想要过滤的内容)。

非常感谢,scotia - 下面是 regionbox.php 文件

...

   <script type="text/javascript">
function selectRegion(str)
{
var xmlhttp;    
if (str=="")
  {
  document.getElementById("region").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("region").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","regionbox.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>

<P>
<table class="dbTable">
    <tr>
    <tr><th>Commodity</th> <th><form action="regionbox.php"> 
<select name="region" onchange="selectRegion(this.value)">
<option value="">Select Region</option>
<option value="E. Midlands">E. Midlands</option>
<option value="Gtr. London">Gtr. London</option>
<option value="North East">North East</option>
<option value="North West">North West</option>
<option value="Scotland">Scotland</option>
<option value="South East">South East</option>
<option value="South West">South West</option>
<option value="W. Midlands">W. Midlands</option>
<option value="Wales">Wales</option>
</select>
</form></th> <th>Member</th> <th>Size</th> <th>Price</th> <th>Date Posted</th>
    </tr>

<?php
$link = mysql_connect('localhost', '', '');

$db_selected = mysql_select_db('palegall_newTrader', $link);
if (!$db_selected) {
    die ('cant find newTrader' . mysql_error());
}

$region = mysql_real_escape_string($_POST['region']);
    $query = mysql_query("SELECT * FROM `sell` WHERE `commodity` = 'paper' ORDER BY `price`") 
       or die( mysql_error() ); 

    echo '<table class="dbTable">';

     while ($row = mysql_fetch_assoc($query))  
    { 

      echo '<tr><td>'.$row['commodity'].'</td> <td>'.$row['region'].'</td> <td>'.
                      $row['member'].'</td> <td>'.$row['size'].'</td> <td>'.
                      $row['price'].'</td> <td>'.$row['posted'].'</td> </tr>'; 
    }
    echo "</table>"; 
    ?> 
</body></html>

我已经删除了一些位。我希望这没问题。

【问题讨论】:

  • 很好地提出了这个新问题。我们需要查看regionbox.php中的相关代码才能回答您的问题,请删除链接以免有人入侵您的网站。
  • 哦,谢谢,我真的很感激...我应该在哪里添加 regionbox.php 代码? (对不起!)
  • 复制粘贴相关部分到您的问题中。然后选择代码并按CTRL+K使其看起来像代码。
  • 你想做什么?只显示与下拉值匹配的元素?或者每次选择过滤器时从数据库中“重新获取”数据?
  • 对不起@Antonio - 我错过了你的帖子 - 是的,我想“重新获取”我很抱歉我的问题不清楚!!!

标签: php jquery mysql ajax


【解决方案1】:

更改此代码

$query = mysql_query("SELECT * FROM `sell` WHERE `commodity`='Paper' 
                      ORDER BY `price`") 
   or die( mysql_error() ); 
$row=mysql_fetch_assoc($query);  
do 
{ 
  echo'<table class="dbTable">'; 
  echo '<tr><td>'.$row['commodity'].'</td> <td>'.$row['region'].'</td> <td>'.
                  $row['member'].'</td> <td>'.$row['size'].'</td> <td>'.
                  $row['price'].'</td> <td>'.$row['posted'].'</td> </tr>'; 
}
while($row = mysql_fetch_assoc($query)); 
  echo "</table>"; ?> 

进入:

$region = mysql_real_escape_string($_POST['region_Name']);
//For debugging: 
echo $region
$query = mysql_query("SELECT * FROM sell WHERE commodity = 'paper' 
                      AND region = '$region' ORDER BY price") 
   or die( mysql_error() ); 

echo '<table class="dbTable">';

//echo the rows in a while loop
while ($row = mysql_fetch_assoc($query))  
{ 

  echo '<tr><td>'.$row['commodity'].'</td> <td>'.$row['region'].'</td> <td>'.
                  $row['member'].'</td> <td>'.$row['size'].'</td> <td>'.
                  $row['price'].'</td> <td>'.$row['posted'].'</td> </tr>'; 
}
echo "</table>"; 
?> 

【讨论】:

  • ...我收到了一些错误消息,但我确定我只是做错了! - 所以我只是在处理它们,我真的很感谢你的帮助......很快就会回来!
  • ...对不起 - 我看不出我哪里出错了,错误信息似乎是指最后的回声?解析错误:语法错误,意外的 T_ECHO,在第 108 行的 /home/palegall/public_html/Reassessment/regionbox.php 中期待 T_WHILE 通过将 WHILE 放回末尾,我可以让标题显示在下拉列表中,但没有初始数据显示 - 很抱歉这么愚蠢。
  • @scotia,留下了一个不属于那里的do,抱歉。
  • 去掉 AND 变量后数据会像以前一样显示,但是没有下拉功能?
  • @Scotia,AND region = '$region' 将结果限制在这些地区。我不知道数据库中的布局和字段名,因此您需要调整查询以匹配您的数据库,还需要确保下拉列表中的值与数据库中使用的区域相同。
【解决方案2】:

好的,既然你不回答我就放一个我经常使用并且效果很好的小脚本。

它需要 jQuery 出现在您的网站中

$('select').change(function(){
var region  = $(this).val();
    $("tr").each(function () {
        if ($(this).text().search(new RegExp(region, "i")) < 0) {
            $(this).hide();
        } else {
            $(this).show();
        }
    });
});

你可以在这里看到这个工作http://jsfiddle.net/6psNF/1/

您应该调整您的表格代码,例如表格可以有一个 ID,而带有代码的行可以有一个类。带有小例子的小代码:

<table id="trader">
<tbody>
<tr>
    <td>Random</td>
    <td class="region">E. Midlands</td>
    <td>Member</td>
    <td>Size</td>
    <td>Price</td>
    <td>Date</td>
    <td>Posted</td>
</tr>
</tbody>

所以,我写的代码可以这样结束

$('select').change(function(){
var region  = $(this).val();
    $("#trader tr").each(function () {
        if ($(this).text().find(".region").search(new RegExp(region, "i")) < 0) {
            $(this).hide();
        } else {
            $(this).show();
        }
    });
});

在包含大量内容或超大表格的页面中提高性能!

【讨论】:

  • 非常抱歉 - 我错过了上面的帖子并试图确保我没有混淆名字等 - 我真的很感谢大家的帮助 - 斯科舍
  • 哦别担心@scotia 我只是想写一个有用的回复:-)
  • 我想我理解上述代码的目的,但我不确定 jquery 并且我很担心如果我尝试的东西与我刚才使用的东西太不同我会进一步混淆自己 - 抱歉伙计们,你最终与 plonker。我需要首先显示所有数据,然后让下拉列表过滤结果。 :)
  • 这就是这个答案的作用!首先获取所有内容,然后对其进行过滤。在这里试试jsfiddle.net/6psNF/1,你会看到的。我以 jquery 解决方案结束,因为它只需要几行代码并且具有出色的性能,还因为您的问题被标记为 jquery!
  • 哦,我想知道这是怎么回事?我没有这样标记它,因为我对它们一无所知?道歉。我查看了您建议的链接,因此将返回,现在尝试为我的桌子制作并尝试一下。再次感谢所有试图帮助我的人。
猜你喜欢
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
相关资源
最近更新 更多