Reputation: 2686
**Updated code as of 3-28
Index.php
<!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(){
$('#key').html($(this).val());
$('#table').html($('.table:checked').val());
// Do the ajax call
// Get the textbox value: $(this).val()
// Get the radio value: $('.table:checked').val()
/*$.post("search.php", { keywords: $(".keywords").val() }, function(data){
$("div#content").empty()
$.each(data, function(){
$("div#content").append("- <a href='prof.php?pID=" + this.pID + "'>" + this.last + "</a>");
});
}, "json");*/
});
});
</script>
</head>
<body>
Search by:
<input type="radio" name="table" class="table" value="Table 1" />Professor<br />
<input type="radio" name="table" class="table" value="Table 2" />Department<br />
<input type="radio" name="table" class="table" value="Table 3" />Course<br />
<input type="text" name="search" class="keywords">
<input type="submit" name="submit" class="search">
<div id="content">
</div>
</body>
</html>
Search.php
<?php
$link = mysql_connect('##',"##","##");
mysql_select_db("###", $link);
$keywords = mysql_real_escape_string( $_POST["keywords"] );
$query = mysql_query("SELECT pID, lname, fname
FROM Professor
WHERE CONCAT(lname,fname) LIKE '%". $keywords . "%'");
$arr = array();
while( $row = mysql_fetch_array ( $query ) )
{
$arr[] = array( "pID" => $row["pID"], "last" => $row["lname"], "first" => $row["fname "] );
}
echo json_encode( $arr );
?>
Sql for each selection: [Professor]
SELECT pID, lname, fname
FROM Professor
WHERE CONCAT(lname,fname) LIKE '%". $keywords . "%'";
[Department]
SELECT prefix, code
FROM Department
WHERE name LIKE '%". $keywords . "%'";
[course]
SELECT prefix, code FROM Course WHERE CONCAT(prefix,course) LIKE '%". $keywords . "%'";
Upvotes: 0
Views: 498
Reputation: 1317
You should change your query like this:
$query = mysql_query("SELECT pID, lname, fname
FROM Professor
WHERE CONCAT(lname,fname) LIKE '%". $keywords . "%'");
Please make sure this these fields in json and javascript are the same:
$arr[] = array( "id" => $row["pID"], "last" => $row["lname"], "first" => $row["fname"] );
$("div#content").append("- <a href='post.php?id=" + this.id + "'>" + this.first + " " + this.last + "</a>");
HTML code:
<!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';
break;
case 'department':
phppage = 'department';
break;
case 'course':
phppage = 'course';
break;
}
$.each(data, function(){
$("div#content").append("- <a href='" + phppage + ".php?pID=" + 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"></div>
</body>
</html>
PHP code:
<?php
$link = mysql_connect('localhost',"#","#");
mysql_select_db("#", $link);
$arr = array();
$keywords = mysql_real_escape_string( $_POST["keywords"] );
switch ($_POST["table"])
{
case 'professor';
$arr = getProfessor($keywords);
break;
case 'department';
$arr = getDepartment($keywords);
break;
case 'course';
$arr = getCourse($keywords);
break;
}
echo json_encode( $arr );
function getProfessor($keywords){
$arr = array();
$query = mysql_query("SELECT pID, lname, fname
FROM Professor
WHERE CONCAT(lname,fname) LIKE '%". $keywords . "%'");
while( $row = mysql_fetch_array ( $query ) )
{
$arr[] = array( "id" => $row["pID"], "name" => $row["fname"] . ' ' . $row["lname"]);
}
return $arr;
}
function getDepartment($keywords){
$arr = array();
$query = mysql_query("SELECT prefix, code
FROM Department
WHERE name LIKE '%". $keywords . "%'");
while( $row = mysql_fetch_array ( $query ) )
{
$arr[] = array( "id" => $row["code"], "name" => $row["code"]);
}
return $arr;
}
function getCourse($keywords){
$arr = array();
$query = mysql_query("SELECT prefix, code
FROM Course
WHERE CONCAT(prefix,course) LIKE '%". $keywords . "%'");
while( $row = mysql_fetch_array ( $query ) )
{
$arr[] = array( "id" => $row["code"], "name" => $row["code"]);
}
return $arr;
}
?>
Upvotes: 1
Reputation: 3809
It looks like in your javascript you're trying to access the .id and .title properties of the returned json objects but they don't exist from the array you create in php
$arr[] = array( "id" => $row["pID"], "title" => $row["lname"]." ".$row["fname"] );
Does that work?
EDIT:
$(document).ready(function(){
$(".search").click(function(){
$.post("search.php", { keywords: $(".keywords").val() }, function(data){
$("div#content").empty()
$.each(data, function(){
$("div#content").append("- <a href='post.php?id=" + this.id + "'>" + this.first + " " + this.last + "</a>");
});
});
Looks like that is missing a closing brace to enclose the $.each
$(document).ready(function(){
$(".search").click(function(){
$.post("search.php", { keywords: $(".keywords").val() }, function(data){
$("div#content").empty()
$.each(data, function(){
$("div#content").append("- <a href='post.php?id=" + this.id + "'>" + this.first + " " + this.last + "</a>");
});
});
});
Upvotes: 0