Page 1 sur 1

Ajax et PHP avec connexion MySQL

Posté : 11 sept. 2006, 17:11
par idy
Bonjour à tous !

J'apprécierais votre aide avec les codes suivants. Le 1er fichier en ajax permet la recherche d'un mot-clé. La recherche du mot-clé s'effectue dans MySQL via le fichier PHP lancé en ajax. Le fichier PHP devrait fonctionner sans problème, car testé indépendamment.
Quand je lance le premier fichier html, rien ne se passe, pas même de message "No results found" censé être envoyé par le fichier PHP.
Merci pour votre aide.

Fichier Ajax :

Code : Tout sélectionner

<html> <head> <script language = "javascript"> function search() { var XMLHttpRequestObject = false; if (window.XMLHttpRequest) { XMLHttpRequestObject = new XMLHttpRequest(); } else if (window.ActiveXObject) { XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHttp"); } if(XMLHttpRequestObject) { var keyword = document.getElementById('text_zone').value; var fichier_externe = "db_request.php?word=" + keyword; XMLHttpRequestObject.open("GET", fichier_externe); XMLHttpRequestObject.onreadystatechange = function() { if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) { var affichage = XMLHttpRequestObject.responseText; document.getElementById('target').innerHTML = affichage; delete XMLHttpRequestObject; XMLHttpRequestObject = null; } } XMLHttpRequestObject.send(null); } } </script> </head> <form> <input type="text" id="text_zone" size="40"> <input type="submit" id="ok" value="OK" onclick="search()"> </form> <br><br> <div id="target"> </div> </html>

Fichier PHP :

Code : Tout sélectionner

<? if(!$_GET["word"]) { echo "No results found"; } else { $keyword = $_GET["word"]; $query = "select * from $table where a='$motcle' "; $result = mysql_db_query($db,$query,$link); echo " <table> "; while ($array = mysql_fetch_object($result)) { echo " <tr> <td> $array->a </td> <td> $array->b </td> </tr> "; } echo " </table> "; } ?>

correction

Posté : 11 sept. 2006, 17:17
par idy
$motcle dans le fichier PHP correspond en fait à $keyword

Posté : 11 sept. 2006, 17:39
par zeus
Est-ce que tu as essayé de faire un alert(fichier_externe); dans la fonction JS search ? Dès que tu récupéres cette url, vérifie bien que le mot clé est bien passé dans l'url, qu'il est correctement encodé.

Si tout ça est bon, essaye de repasser cette url directement dans ton navigateur et, surtout, regarde si tu as du code généré, même juste <table>. Il me semble que ta requete est très restrictive puisqu'il faut tapper le mot-clé exact pour que la requete retourne quelque chose.

Posté : 11 sept. 2006, 17:54
par Invité
alert => le mot-clé est bien passé dans l'URL

En repassant l'URL directement dans le browser, j'ai bien les résultats de la requête qui sont générés (le code PHP est en effet OK).

La requête est en effet très restrictive, mais ce n'est qu'à titre de test pour le moment, pour déjà essayer de faire fonctionner l'ensemble, ce qui n'est donc toujours pas le cas. Même problème que ce soit IE ou Firefox d'ailleurs.

Merci pour votre aide.

Posté : 11 sept. 2006, 17:58
par Invité
Mon idée derrière ces bouts de code :

J'ai par exemple une table avec une colonne type (fruit ou légume) et une colonne produit (pomme/orange/etc.).

L'utilisateur effectue par exemple une recherche "fruit" : une requête est lancée, tous les fruits sont affichés.

Si l'utilisateur décoche un checkbox "pomme" par exemple, je souhaite que la liste de fruits se rafraîchisse sans relancer une requête SQL et sans rafraîchir la page, bref utiliser l'ajax.

Posté : 11 sept. 2006, 18:00
par zeus
Le probleme doit donc venir de l'affichage de la réponse dans la fonction JS

Essaye de mettre des alert() régulièrement pour voir où passe et où ne passe pas la fonction

Code : Tout sélectionner

XMLHttpRequestObject.onreadystatechange = function() { alert('entrée dans la fonction'); if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) { alert('readyState = 4'); var affichage = XMLHttpRequestObject.responseText; document.getElementById('target').innerHTML = affichage; alert('affichage réalisé'); delete XMLHttpRequestObject; XMLHttpRequestObject = null; } }

Posté : 11 sept. 2006, 18:07
par Invité
Mise en place de multiples alert à travers la fonction JS : je n'atteins jamais readystate.

Déjà merci pour cette idée d'utiliser les alert pour déterminer le point de blocage.

D'autre part, la console JS de firefox me renvoit :
Error: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: FICHIER.HTML :: anonymous :: line 35" data: no]
Source File: FICHIER.HTML
Line: 35
La ligne 35 correspond exactement à la ligne "if... readystate == 4". N'ai pas trouvé d'aide pertinente à ce sujet pour le moment.

Posté : 11 sept. 2006, 18:58
par zeus
Essaye de respecter l'ordre des tests pour l'AJAX, comme dans cet exemple :

Code : Tout sélectionner

req.onreadystatechange = function() { if(req.readyState == 4) { if(req.status == 200) document.ajax.dyn="Received:" + req.responseText; else document.ajax.dyn="Error code " + req.status; };
Je ne suis pas sûr que ça change grand chose mais essaye ...