2011-07-14 55 views
4

我是MySQL新手&想“过滤”按地区设置的结果。我以前曾问过类似的问题,但我不知道是否要创建一个新问题或继续该问题,对不起,如果我弄错了。MySQL,PHP,Ajax来过滤结果集?

我看了看http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_database &认为这将是理想的,但我不知道如何让它工作,或者我怎样才能让它“更新”结果。

理想情况下,我认为该地区下方的下拉框会显得整洁 - 但是,我没有取得任何成功 - 我真的完全局限于我的理解,任何人都可以帮忙吗? (感谢前面帮助过第一部分的人!!)

这就是我到目前为止所做的,(了解我想要过滤的内容)。

非常感谢,舍 - 下面是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> 

我剥出位。我希望这是好的。

+0

好呼吁使这个新的问题。我们需要查看'regionbox.php'中的相关代码才能回答您的问题,请删除该链接以避免人们破解您的网站。 – Johan

+0

哦,谢谢,我真的很感激它......我应该在哪里添加regionbox.php代码? (对不起!) – scotia

+0

在您的问题中复制粘贴**相关部分**,然后选择代码并按下CTRL + K使其看起来像代码。 – Johan

回答

3

改变此密码

$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>"; 
?> 
+0

...我有一些错误消息,但我确定我只是做错了! - 所以我只是通过他们工作,我很感激你的帮助......很快回来! – scotia

+0

...对不起 - 我不能看到Imm出错的地方,错误信息似乎指的是最后的回声?解析错误:语法错误,意外的T_ECHO,期待T_WHILE在第108行的/home/palegall/public_html/Reassessment/regionbox.php 通过将WHILE放回到最后,我可以使用下拉列表显示标题,但没有最初的数据显示 - 抱歉太蠢了。 – scotia

+0

@scotia,留下了一个不属于那里的'do',对不起'那个。 – Johan

3

好吧,既然你不回答我会把一个小脚本,我经常使用,并有一个整洁的效果。

它需要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(); 
     } 
    }); 
}); 

在有大量的内容或超级大表页面提高性能!

+0

非常抱歉 - 我错过了帖子abovve并试图确保我没有混淆名字等 - 我真的很感激大家的帮助 - scotia – scotia

+0

哦,别担心@scotia我只想写一个有用的回复:-) –

+0

我想我理解上述代码的目的,但我不确定jquery和我是否担心,如果我尝试一些与我正在使用的东西截然不同的东西,我会进一步迷惑自己 - 对不起,最后你会遇到笨蛋。我需要首先显示所有数据,然后使用下拉式过滤结果。 :) – scotia