2011-03-31 36 views
0

基本上,我有一个正在为3个单选按钮中的两个工作的实时搜索。 “教授”和“部门”都很好。但“课程”无线电代码似乎没有工作。我不明白。 Professor为什么不是这个PHP/AJAX工作?

Department

Before I type anything in it gives me this

If I type in "Eng" for "Engineering" or "English", I get lesser options, but still undefined

看来Ajax的工作,但由于某种原因它不拉这些字段。

在PHP是

function getDepartment($keywords){ 
    $arr = array(); 

    $query = mysql_query("SELECT dID, name 
          FROM Department 
          WHERE name LIKE '%". $keywords . "%'"); 

    while($row = mysql_fetch_array ($query)) 
    { 
     $arr[] = array("id" => $row["dID"], "name" => $row["name"]); 
    } 

    return $arr; 
} 

function getCourse($keywords){ 
    $arr = array(); 

    $query = mysql_query("SELECT cID, prefix, code 
          FROM Course 
          WHERE CONCAT(prefix,code) LIKE '%". $keywords . "%'"); 

    while($row = mysql_fetch_array ($query)) 
    { 
     $arr[] = array("id" => $row["cID"], "course" => $row["prefix"] . ' ' . $row["code"]); 
    } 

    return $arr; 
} 

The columns in phpmyadmin

**的Javascript

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>jQuery Search Demonstration</title> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $(".keywords").keyup(function(){ 
     getData(); 
    }); 
    $(".table").click(function(){ 
     getData(); 
    }); 
}); 

function getData(){ 
    $.post("search.php", 
     { 
      keywords: $(".keywords").val(), 
      table: $('.table:checked').val() 
     }, 
     function(data){ 
      $("div#content").empty(); 
      var phppage; 
      switch($('.table:checked').val()) 
      { 
       case 'professor': 
        phppage = 'prof'; 
        ext = '.php?pID='; 
        break; 
       case 'department': 
        phppage = 'department'; 
        ext = '.php?dID='; 
        break; 
       case 'course': 
        phppage = 'course'; 
        ext = '.php?cID='; 
        break; 
      } 

      $.each(data, function(){ 
       $("div#content").append("- <a href='" + phppage + ext + this.id + "'>" + this.name + "</a>"); 
      }); 
     }, 
     "json"); 
} 
</script> 
</head> 
<body> 
Search by: 
<input type="text" name="search" class="keywords" /><br /> 

<input type="radio" name="table" class="table" value="professor" checked="checked" /> Professor<br /> 
<input type="radio" name="table" class="table" value="department" /> Department<br /> 
<input type="radio" name="table" class="table" value="course" /> Course<br /> 

<div id="content" style="background-color:#eee;"></div> 

</body> 
</html> 

的一列 “代码” 是一个数值,例如153或两者“前缀和 “代码”一起会像“INFO 153”一样。

任何人?Ajax是否有限制它可以拉出的记录数量?本课程表可能有1200门课程,但为什么他们没有定义?

+0

什么是JavaScript代码? – 2011-03-31 01:11:43

+0

看起来像你的Where子句不工作,你得到所有行 – fazo 2011-03-31 01:15:29

+0

Javascript被添加。 Fazo怎么会是where子句?它适用于教授和那些在sql中使用* concat()*以及 – Jshee 2011-03-31 01:25:12

回答

2

您正在检索name,但在搜索课程时,name已重命名为course。您可以通过更改这一行的PHP解决这个问题:

$arr[] = array("id" => $row["cID"], "course" => $row["prefix"] . ' ' . $row["code"]); 

要这样:

$arr[] = array("id" => $row["cID"], "name" => $row["prefix"] . ' ' . $row["code"]); 

此外,unrelatedly,在JavaScript中,你没有宣布其设置ext。你或许应该改变这一行:

var phppage; 

要这样:

var phppage, ext; 

编辑:这是你如何将风格的项目作为一个适当的项目符号列表:

var content=$("#content"); 
var ul=$("<ul>"); 
content.append(ul); 
$.each(data, function(){ 
    ul.append('<li><a href="' + phppage + ext + this.id + '">' + this.name + "</a></li>"); 
}); 
+0

+1。我只是写了相同的答案 – Ben 2011-03-31 01:32:45

+0

杰出!非常感谢。另外一个快速的问题是,是否有一种以更友好的方式输出$ arr的快速方法,例如所有的课程都在像COM 310 \ n COM 420 \ n ...等新行上。 [[原谅我的新手问题]] – Jshee 2011-03-31 01:36:22

+0

@woopie:那么你目前正在输出所有结果以短划线开头。如果你用'
'代替它们,那么它们将全部分开。如果你给我一秒钟,我会编辑我的答案,以显示如何将其输出为适当的项目符号列表。 – icktoofay 2011-03-31 01:37:58

-1

是我也在where子句中为LIKE函数实现了CONCAT函数,但它没有工作。然后我使用了单独的列来实现类似的功能。当然,你的where子句不起作用。

如下您可以实现此代码,当然单选按钮功能:

function getCourse($keywords){ 
    $arr = array(); 

    $query = mysql_query("SELECT cID, prefix, code 
          FROM Course 
          WHERE prefix LIKE '%". $keywords . "%' OR code LIKE '%". $keywords . "%'"); 

    while($row = mysql_fetch_array ($query)) 
    { 
     $arr[] = array("id" => $row["cID"], "course" => $row["prefix"] . ' ' . $row["code"]); 
    } 

    return $arr; 
} 

享受!

+0

'where'子句不是问题。 – icktoofay 2011-04-01 02:14:40