Moteur de recherche avec ajax

Signaler
Messages postés
8
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
10 mars 2006
-
Messages postés
510
Date d'inscription
samedi 29 décembre 2001
Statut
Membre
Dernière intervention
23 mai 2008
-
COUCOU...C'EST KATOUSA
je viens de commencer à peine à me familiariser avec ajax , j'essaye maintenant de faire un petit moteur de recherche d'un forum avec ajax, mon pb est que j'arrive pas à faire l'affichage des sujets de ce forum:


mon programme:index.htm


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


<html>
<head>
<title>Recherche-Forum</title>

<link rel="stylesheet" type="text/css" href="styles.css" />

<script type="text/javascript" language="JavaScript" src="ajax.js"></script>
<script type="text/javascript" language="JavaScript" src="traitement.js"></script>

<script language="JavaScript">
<!--



var proc;



function requete()
{

document.getElementById("mot").value="";
loadXMLDoc('recherche.php');

window.clearInterval(proc);
proc = setInterval("requete()",20000);

return false;
}



function requete_mot()
{


var mot = document.getElementById("mot").value;
loadXMLDoc('recherche_mot.php?mot=' + mot);

window.clearInterval(proc);
proc = setInterval("requete_mot()",20000);

return false;
}

//-->
</script>

</head>

Les sujets,

----

<form name="choix_mot" onSubmit="return requete_mot()">
Recherche par mot-clé :

</form>

Afficher toutes les sujets

</html>
---

donc : il y a un champs texte dans le quelle un membre du forum accède et tape un mot clé pour effectuer un recherche sur les sujet du forum
il ya un lien ,ou qd on clique on affiche tous les sujet du forum
-----------------
programme:traitement.js

function xmltraitement(monxml) {



var calquehtml = "";


var fichiers = monxml.getElementsByTagName('sujet');

if(fichiers.length == 0) {

calquehtml = "Pas du sujet de discussion pour le mot que vous avez taper";

}
for(var i = 0; i < fichiers.length; i++) {


var titre = fichiers[i].getElementsByTagName('titre')[0].firstChild.data;
var contenu = fichiers[i].getElementsByTagName('contenu')[0].firstChild.data;
var date = fichiers[i].getElementsByTagName('date')[0].firstChild.data;



calquehtml1+= '<hr width=\'700\'>'+
'
'+titre+' ('+date+')
'+
'
'+contenu+'
'+
}

}

document.getElementById('calque_liste').innerHTML = calquehtml ;

}
------------------
programme recherche_mot.php

<?
include "ini.php";
header('Content-type: text/xml');
echo '<?xml version="1.0" encoding="iso-8859-1"?>';
echo '<lessujets>';


dbconnect();


function f_query() {
global $db;

$sql = "SELECT * FROM sujet_discussion WHERE contenu LIKE '%".$_GET["mot"]."%' OR titre_sujet LIKE '%".$_GET["mot"]."%'";

$sqlresults = mysql_db_query($db, $sql);

if(!$sqlresults) {
echo 'recherche_mot .php: erreur SQL.\n';
echo $sql;
exit;
}

while($data = mysql_fetch_array($sqlresults)) {

echo '<sujet>';
echo '<titre>'.$data["titre_sujet"].'</titre>';
echo '<contenu>'.$data["contenu"].'</contenu>';
echo '<date>'.$data["date_sujet_discussion"].'</date>';
echo '</sujet>';

}
}

f_query();
dbclose();


echo '<lessujets>';



?>
-------------------------
programme recherche.php
<?
include "ini.php";
header('Content-type: text/xml');
echo '<?xml version="1.0" encoding="iso-8859-1"?>';
echo '<lessujets>';
dbconnect();


function f_query() {
global $db;

$sql = "SELECT * FROM sujet_discussion";

$sqlresults = mysql_db_query($db, $sql);

if(!$sqlresults) {
echo 'recherche.php: erreur SQL.\n';
echo $sql;
exit;
}

while($data = mysql_fetch_array($sqlresults)) {
/*if($data["lien"]=="_")
{
$data["lien"]="";
}*/
echo '<sujet>';
echo '<titre>'.$data["titre_sujet"].'</titre>';
echo '<contenu>'.$data["contenu"].'</contenu>';
echo '<date>'.$data["date_sujet_discussion"].'</date>';

echo '</sujet>';

}
}

f_query();
dbclose();


echo '</lessujets>';
?>
-----------------
programme ajax.js

// JavaScript Documentvar req;


function loadXMLDoc(url) {

if (window.XMLHttpRequest) {

req = new XMLHttpRequest(); // pour XMLHttpRequest natif (Gecko, Safari, Opera)

try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); // Pour supprimer la sécurité de Mozilla
} catch (e) {}

req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
req.send(null);

} else if (window.ActiveXObject) {

req = new ActiveXObject("Microsoft.XMLHTTP"); // pour IE/Windows ActiveX
if (req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
req.send();
}
} else {

alert("Votre navigateur ne connait pas l'objet MLHttpRequest.");

}
}



function processReqChange() {


if (req.readyState == 4) { // quand le fichier est chargé


if (req.status == 200) { // detécter problème de format


try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {}

xmltraitement(req.responseXML.documentElement);


} else {

alert("Il y avait un problème avec le XML:\n" + req.statusText);

}

}
}
-------------------------------
la feuille de style style.css

.grotitre{
font-family: Arial, Helvetica, sans-serif;
color: Black;
font-size: 16px;
font-weight:bold;
}


.calque_rech {

font-family: Arial, Helvetica, sans-serif;
color: Black;
font-size: 15px;

}


.calque_liste {

width:500px;

}


.texte_titre {

font-family: Arial, Helvetica, sans-serif;
color: #000000;
font-size: 14px;
background:#CCCCCC;
width: 700px;
}


.texte_contenu {

font-family: Arial, Helvetica, sans-serif;
color: #000000;
font-size: 14px;
width: 700px;
background:#E3E3E3;
text-align:justify;

}


.texte_lien {

font-family: Arial, Helvetica, sans-serif;
color: blue;
font-size: 14px;
color: #993300;
text-decoration:underline;

}
-----------------------------------------
la connexion à la base ini.php

<?


// connexion base de données


$hn = "localhost"; // define hostname
$db = "forum_discussion"; // define database name
$dbuser = "root"; // user
$dbpass = "1111"; // password



// fonctions de connexion à bdd


function dbconnect() {
global $hn, $db, $con, $errormsg, $dbpass, $dbuser;
$con = @mysql_connect($hn, $dbuser, $dbpass);
$db_sel = @mysql_select_db($db, $con);
if (!$db_sel) {
dbconnectdev();
}
}


function dbconnectdev() {
global $hn, $db, $con, $errormsg, $dbpass, $dbuser;
$con = @mysql_connect($hn);
$db_sel = @mysql_select_db($db, $con);
if (!$db_sel) {
echo "probleme de connexion à la base de donnees";
exit;
}
}


function dbclose() {
global $con;
mysql_close($con);
}


?>

-------------------------
la table sujet_discussion(id_sujet,titre_sujet, contenu ,date_sujet_discussion)

je vous prie de m'aider car j'arrive pas à comprendre pourquoi ça marche pas, quand je clique sur le boutton rechercher il'ya aucun action que ce fait de meme pour le lien

7 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

désolé, mais je n'arrive pas à voir où tu fais appel à Ajax ? je vois les méthodes Ajax, les ytraitements...mais je ne vois pas quand est déclenchée ta méthode Ajax ?
Messages postés
8
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
10 mars 2006

COUCOU...C'EST KATOUSA
merci, ou moment ou on excute les requetes recherche et recherche_mot et il aura une construction d'un fichier xml à partir de la base de donnés (la table sujet_ discussion)

loadXMLDoc('recherche.php');le chargement de ce fichier autant qu'un fichier xml cette la fonction traiter dans le fichier ajax.js qui va vérifier que le fichier est bien chargé dans ce cas il fait appel à la fonction
xmltraitement(req.responseXML.documentElement); qui sera traiter dans le fichier traitement.js
qui permet d'extraire les donnés de ce fichier en bouclant sur le noeuds et les afficher grace à un feuille de style

j'espere que c'est claire
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Okkk, j'avais pas faait attention à loadXMLDoc().

Quand tu cliques sur ton lien, donc, rien ne se passe ? Vérifies, avec Firefox c'est encore le mieux pour ça, si tu as des erreurs javascript, en ouvrant la console javascript après avoir cliqué sur le lien ?
Mets aussi des alert () et des echo pour suivre pas à pas le déroulement du programme.
Messages postés
8
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
10 mars 2006

COUCOU...C'EST KATOUSA
mais le pb n'est pas dans les code mais dans le programme index.htm quand je clique sur rechercher il n'a pas un évènement de submit c'est comme j'ai pas cliqué
Messages postés
510
Date d'inscription
samedi 29 décembre 2001
Statut
Membre
Dernière intervention
23 mai 2008

Bahdans un sens c'est normal qu'il ne se passe rien c'est le propre d'ajax, en fait il se passe destrucs mais tu ne les vois pas forcément vu que ca ne recharge pas les pages... petite question maintenant, ou as tu mis la fonction qui permet d'afficher les résultats ? je ne crois pas que de simples echo suffisent... enfin il faut ensuite il me semble envoyer tout ca sur la page enpar javascript...

tu peut'inspirer de cette source qui je pense t'aidera... :
http://www.phpcs.com/codes/TRADUCTEUR-FRANCAIS-GT-MARTIEN-SI-SI_32720.aspx


----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Si si , les simples echo suffisent, justement.
Mais il y a peut-être un soucis dans l'affichage justement, niveau js.

Par contre, là " COUCOU...C'EST KATOUSA
mais le pb n'est pas dans les code mais dans le programme index.htm quand je clique sur rechercher il n'a pas un évènement de submit c'est comme j'ai pas cliqué"
WhiteDwarf a raison : avec Ajax tu ne sentiras rien passer, c e n'est pas comme un submit. Donc le problème ne vient pas, à mon avis du lien, mais bien qu'il se plante quelque part dans tes traitements js.

Donc j'insiste...tu devrais regarder le debugger js de Firefox, et mettre des echo et des alert un peu partout pour suivre le déroulement des opérations.
De ttes façons, la soluton ne te tombera pas toute crue dans le bec, faut chercher... ;-)

WhiteDwarf => ravi que mon source stupide de traduction frabçais -> martien t'aie plu ;-)
Messages postés
510
Date d'inscription
samedi 29 décembre 2001
Statut
Membre
Dernière intervention
23 mai 2008

"WhiteDwarf => ravi que mon source stupide de traduction frabçais -> martien t'aie plu ;-) "
il m'a vraiment fais tripper et est super pour apprendre les méthodes types ajax... :p


----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------