Afficher les résultats d'une recherche sans recharger la pag
Posté : 02 juil. 2007, 11:43
Bonjour tout le monde, je souhaiterais qu'n utilisateur fasse une recherche à partir de différents critères qui lui sont proposés à travers des checkbox. Lorsqu'il valide sa recherche, je souhaiterais que le résultat s'affiche en bas des checkbox mais sans recharcger la page.
Pour ça, j'ai pensé utiliser AJAX, mais je ne vois pas comment faire. Quel code et où placer mon code.
Voilà déjà le code que j'ai fait :
Pour ça, j'ai pensé utiliser AJAX, mais je ne vois pas comment faire. Quel code et où placer mon code.
Voilà déjà le code que j'ai fait :
<?
echo "<br /><br />Choose the different criteria which correspond to your request : ";
/*---------------------------------*/
//on ouvre le fichier criteria.xml
$criteriaFile = $cfg['ressources_root'].'criteria.xml';
$domCriteria = new DOMDocument('1.0','UTF-8');
$domCriteria->load($criteriaFile);
$xpCriteria = new DOMXPath($domCriteria);
$cat_criteria = $domCriteria->getElementsByTagName('cat');
$result_find_criteria = $domCriteria->getElementsByTagName('criteria');?>
<form name="critera" method="post" action="search-engine.php"><?
echo "<ul>";
foreach($cat_criteria as $cat){
$name_cat = $cat->getAttribute('name');
$id_cat = $cat->getAttribute('id');
echo "<br /><input type=\"checkbox\" name=\"cat\" value=\"$id_cat\">".$name_cat."</input>";
foreach ($cat->childNodes as $criteria)
{
if ($criteria->nodeType != XML_ELEMENT_NODE) continue;
if ($criteria->tagName == 'criteria')
{
$name_criteria = $criteria->getAttribute('name');
$id_criteria = $criteria->getAttribute('id');
echo "<ul><input type=\"checkbox\" name=\"crit\" value=\"$id_criteria\">$name_criteria</input></ul>";
}
}
}
echo "</ul>";?>
<input type="submit" value="Search" />
</form>
<?
/*-----------------------------------------------------*/
//on affiche le résultat en fonction d'un seul critère //
/*-----------------------------------------------------*/
$link_file = $cfg['ressources_root'].'/matrix/criteria-practice.xml';
//simple xml va convertir ce fichier xml en tableau
//Chaque type de balise enfant de la racine est une propriété qui est un tableau indexé numériquement et chaque index est un nouvel objet SimpleXML.
$xml = simplexml_load_file($link_file);
if ( $_POST['cat'] or $_POST['crit'] ){
foreach($xml->link as $value) {//tableau qu'on parcours. Chaque valeur est un objet simpleXML
if($value->criteria[0]['idcat']==$_POST['cat'] or $value->criteria[0]['idcrit']==$_POST['crit']) {
//Il s'agit de récupérer la valeur de l'attribut 'idcat' du noeud 'criteria' de la balise 'link' analysée - pareil pour 'idcrit'
$practice[]=( (int)$value->practice[0]['id'] );
$id_practice = $practice[0];
}
}
//on ouvre le document xml qui correspond à la recherche
$practiceFile = $cfg['ressources_root'].'content/practice/'.$id_practice.'.xml';
$domPractice = new DOMDocument('1.0','UTF-8');
$domPractice->load($practiceFile);
$xpPractice = new DOMXPath($domPractice);
$item_practice = $domPractice->getElementsByTagName('item');
if (isset($item_practice)){
foreach ($item_practice as $item) {
foreach ($item->childNodes as $child){
if($child->nodeType != XML_ELEMENT_NODE) continue;
if($child->tagName == 'title'){
$titre = utf8_decode($child->firstChild->nodeValue);}
elseif($child->tagName == 'short_description'){
$short_description = utf8_decode($child->firstChild->nodeValue);}
}
echo "<p>$titre<br/>$short_description";
}
}
else {
echo "pas de practice";
}
}
?>