Page 1 sur 2

saisie "semi automatique" d'un pseudo depuis la BD

Posté : 12 mai 2007, 03:05
par fleau
Bonjour,
Je travaille sur la création d'un formulaire d'envois de messages privés sur mon site. Je suis en train d'essayer de créer une sorte de saisie semi automatique pour le pseudo afin qu'à partir des premières lettres tapées, des suggestions de pseudos soient faites à partir de la base de données. Je m'appuie pour cela sur le tuto : suivant.

J'ai deux problèmes. Déjà il arrive que le script fasse planter Firefox, et il ne fonctionne pas sous Internet Explorer (en tous cas, la partie où la base de données et interrogée ne renvoit pas de résultat). Je pense que l'erreur vient de l'imbrication des fonctions writediv et file dans le fichier index1.html.

Ensuite, je voudrais qu'en cliquant sur un élément de la liste contenue dans la page ajax.php, la valeur sélectionnée soit récupérée dans le champs <input name="destinataire" id="destinataire" />. C'est dans ce but que j'ai programmé la fonction javascript xxx() dans le fichier ajax.html, mais elle ne fonctionne pas.


Voici donc le code de la page principale (qui contient le formulaire) que l'on va appeller index1.php :

Code : Tout sélectionner

<html><head></head> <body> <script type="text/javascript"> function writediv(texte) { document.getElementById('pseudobox').innerHTML = texte; } function verifPseudo(pseudo) { if(pseudo != '') { if(pseudo.length<3) writediv('<span style="color:#cc0000"><b>'+pseudo+' :</b> ce pseudo est trop court</span>'); else if(pseudo.length>30) writediv('<span style="color:#cc0000"><b>'+pseudo+' :</b> ce pseudo est trop long</span>'); else writediv(file('ajax.php?destinataire='+escape(pseudo))) } } function file(fichier) { if(window.XMLHttpRequest) // FIREFOX xhr_object = new XMLHttpRequest(); else if(window.ActiveXObject) // IE xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); else return(false); xhr_object.open("GET", fichier, false); xhr_object.send(null); if(xhr_object.readyState == 4) return(xhr_object.responseText); else return(false); } </script> <form method="post" action="page2.php"> <input type="text" id="destinataire" name="destinataire" /><div id="pseudobox"></div> </form> </html>
Voici ensuite le code de la page ajax.php qui est appellée dans index1.php

Code : Tout sélectionner

<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> <script language="JavaScript" type="text/javascript"> function xxx(newtext) { opener.document.getElementById('destinataire').value = newtext; } </script> </head> <body> <?php include("config.php"); @mysql_connect($hostname,$user,$pass) or die("Impossible de se connecter"); @mysql_select_db("$database") or die("Impossible de se connecter"); $sql = "SELECT pseudo FROM table_membres WHERE pseudo LIKE '%".$_GET['destinataire']."%'"; $result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $i = 0; echo '<ul>'; while ($row = mysql_fetch_array($result)) { $i++; echo '<li><a href="#" onclick="xxx('.$row['pseudo'].')">'.$row['pseudo'].'</a></li>'; } if($i==0) echo '<li>Il n\'y a pas aucun membre pseudo</li>'; echo '</ul>'; mysql_close(); ?> </body> </html>
D'avance merci pour votre aide ;)

Posté : 12 mai 2007, 10:39
par Truc
Salut,

Le fichier ajax.php ne va que "renvoyer" du texte vers la page index1.php
et donc la fonction xxx() doit être placée dans le fichier index1.php.

Il est inutile d'avoir toutes les balises html dans le fichier ajax.php (pour la même raison).

Posté : 12 mai 2007, 12:54
par fleau
Je te remercie Truc, mais ça ne marche toujours pas :s

Posté : 12 mai 2007, 13:07
par Truc
il lui manque deux pieds (pour macher #-o )

regarde la fenetre d'erreurs javascript

Posté : 12 mai 2007, 13:32
par Invité
mdr, désolé pour cette erreur de langage ^^
il n'y a pas d'erreur javascript... mais j'ai mis en ligne un exemple : http://www.cityloisir.com/index1.php[/url]

Posté : 12 mai 2007, 13:48
par Truc
j'ai comme erreur :

Code : Tout sélectionner

Erreur : le_fleau is not defined Fichier source : http://www.cityloisir.com/index1.php Ligne : 1
avec comme pseudo de test "fleau" qui me propose donc "le_fleau".


il te manque des délimiteurs de chaine de caractères lors de l'appel a la fonction xxx()
echo '<li><a href="#" onclick="xxx(\''.$row['pseudo'].'\')">'.$row['pseudo'].'</a></li>'; 

Posté : 12 mai 2007, 14:10
par fleau
Merci. oui, effectivement, je les ai rajouté, mais cela ne fonctionne toujours pas.

Posté : 12 mai 2007, 14:50
par fleau
du coup, j'ai une autre erreur qui s'affiche : opener.document n'est pas un objet ou a une valeur "Null" ... que dois-je faire ?

Posté : 12 mai 2007, 16:51
par Truc
10 tours de ton quartier à reculons :D

et après enlever ce "opener" qui ne sert à rien.

Posté : 12 mai 2007, 17:05
par fleau
10 tours, c'est pas un peu beaucoup quand même ? bien évidement, je me suis executé :langue:
effectivement, c'était la solution ! Le opener ne servait à rien puisque le id="destinataire" est sur la même page ^^ merci beaucoup Truc ! :merci:

Posté : 12 mai 2007, 17:33
par orgerix
UNe petite question qui parait sans doute bête...

COmment faire pour avoir les erreurs de son code javascript ?

Car dans mon navigateur (IE), j'ai juste en bas à guauche une mention "erreur"

Posté : 12 mai 2007, 17:46
par fleau
il existe l'option "webdevelopper" sous Firefox, sinon en double cliquant sur "Erreur" dans IE je crois. Mais moi je n'ai plus d'erreur javascript sur cette page.

Posté : 12 mai 2007, 18:18
par fleau
En fait, si, il est impossible d'afficher sous forme de liste dans IE, c'est à dire avec <li> ... à cause de innerhtml ... Mais bon, je mettrais des <br /> à la place ...

Posté : 12 mai 2007, 22:25
par Truc
il existe l'option "webdevelopper" sous Firefox, sinon en double cliquant sur "Erreur" dans IE je crois.
Tout est dit .......... change de navigateur :wink:

Posté : 14 mai 2007, 10:36
par lem
sinon en double cliquant sur "Erreur" dans IE je crois.
En effet, dans IE double-clique sur le tirangle jaune dans la barre d'état. Le détail de l'erreur s'affichera.
[EDIT: En fait, il te suffit de double-cliquer n'importe où dans la barre d'état, semble-t-il.]