2011-03-24 3 views
0

* * code mis à jour à partir de 3-28nest pas cette ajax recherche en direct travaillant

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 pour chaque sélection: [Professeur]

SELECT pID, lname, fname 
            FROM Professor 
            WHERE CONCAT(lname,fname) LIKE '%". $keywords . "%'"; 

[Département]

SELECT prefix, code 
            FROM Department 
            WHERE name LIKE '%". $keywords . "%'"; 

[cours]

préfixe SELECT, le code du parcours OÙ CONCAT (préfixe, bien sûr) LIKE « % ». $ keywords "% '";

+2

-vous obtenez un message d'erreur? Avez-vous des résultats de search.php? – Prisoner

+0

votre requête va échouer, singe citation aucune citation de fin correspondant, les mots-clés LIKE ne fonctionneront pas pour plusieurs mots ... –

+0

Dagon, en ajoutant une seule citation ne fait rien. Je l'ai juste essayé. Vous parlez comme '% **' ** "right? – Jshee

Répondre

1

Vous devriez changer votre requête comme ceci:

$query = mysql_query("SELECT pID, lname, fname 
            FROM Professor 
            WHERE CONCAT(lname,fname) LIKE '%". $keywords . "%'"); 

S'il vous plaît assurez-vous que ce ces champs dans JSON et javascript sont les mêmes:

$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>"); 

Code HTML:

<!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> 

Code PHP:

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

@YNhat - cela ne semble pas fonctionner. mon code. – Jshee

+0

Pouvez-vous vérifier s'il y a une erreur javascript? Avez-vous reçu la réponse du serveur? Veuillez utiliser Firebug pour vérifier votre demande et réponse – YNhat

+0

YNHat - J'ai pris une capture d'écran à http: // postimage.org/image/1bdiy0eqs/il ne montre pas d'erreurs sur JS dans firebug lite. – Jshee

0

Il ressemble dans votre javascript que vous essayez d'accéder à la .id et les propriétés .TITLE des objets JSON retournés, mais ils n'existent pas du tableau que vous créez en php

$arr[] = array("id" => $row["pID"], "title" => $row["lname"]." ".$row["fname"]); 

Est-ce ce travail?

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>"); 
    }); 
}); 

On dirait que manque une accolade de fermeture pour enfermer la .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>"); 
      }); 
    }); 
}); 
+0

Vérifiez le code modifié. – Jshee

+0

Et non, cela ne fonctionne toujours pas – Jshee

Questions connexes