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

fleau
Invité n'ayant pas de compte PHPfrance

12 mai 2007, 03:05

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 mai 2007, 10:39

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).

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

fleau
Invité n'ayant pas de compte PHPfrance

12 mai 2007, 12:54

Je te remercie Truc, mais ça ne marche toujours pas :s

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 mai 2007, 13:07

il lui manque deux pieds (pour macher #-o )

regarde la fenetre d'erreurs javascript

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

12 mai 2007, 13:32

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]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 mai 2007, 13:48

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>'; 

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

fleau
Invité n'ayant pas de compte PHPfrance

12 mai 2007, 14:10

Merci. oui, effectivement, je les ai rajouté, mais cela ne fonctionne toujours pas.

fleau
Invité n'ayant pas de compte PHPfrance

12 mai 2007, 14:50

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 ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 mai 2007, 16:51

10 tours de ton quartier à reculons :D

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

fleau
Invité n'ayant pas de compte PHPfrance

12 mai 2007, 17:05

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:

Mammouth du PHP | 693 Messages

12 mai 2007, 17:33

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"

fleau
Invité n'ayant pas de compte PHPfrance

12 mai 2007, 17:46

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.

fleau
Invité n'ayant pas de compte PHPfrance

12 mai 2007, 18:18

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 mai 2007, 22:25

il existe l'option "webdevelopper" sous Firefox, sinon en double cliquant sur "Erreur" dans IE je crois.
Tout est dit .......... change de navigateur :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

lem
Eléphant du PHP | 108 Messages

14 mai 2007, 10:36

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.]
Lem.