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

sebaaas
Invité n'ayant pas de compte PHPfrance

18 mai 2007, 12:06

Merci beaucoup pour ce code !!!!

J'ai apporté quelques modification pour coller avec ma page

Index1.php

Code : Tout sélectionner

<html><head></head> <body> <script type="text/javascript"> function xxx(newtext) { document.getElementById('destinataire').value = newtext; } function writediv(texte) { document.getElementById('nompbox').innerHTML = texte; } function verifPseudo(nomp) { if(nomp != '') { if(nomp.length<3) writediv('<span style="color:#cc0000"><b>'+nomp+' :</b> ce pseudo est trop court</span>'); else if(nomp.length>30) writediv('<span style="color:#cc0000"><b>'+nomp+' :</b> ce pseudo est trop long</span>'); else writediv(file('ajax.php?destinataire='+escape(nomp))) } } 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="get" action="bd.php"> Produit testé = <input type="text" id="destinataire" name="destinataire1" onkeyup="verifPseudo(this.value)" /><div id="nompbox"></div> <input type="submit" name="submit" value="Envoyer la valeur" /> </form> </html>
ajax.php

Code : Tout sélectionner

<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> </head> <body> <?php $connect = mysql_connect('localhost','root','') or die ("erreur de connexion"); mysql_select_db('bdtest',$connect) or die ("erreur de connexion base"); $sql = "SELECT nomp FROM test WHERE nomp LIKE '%".$_GET['destinataire']."%'"; $result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $i = 0; $nomp = ""; echo '<ul>'; while ($row = mysql_fetch_array($result)) { $i++; if($nomp == $row['nomp']){ } else { echo '<li><a href="#" onclick="xxx(\''.$row['nomp'].'\')">'.$row['nomp'].'</a></li>'; $nomp = $row['nomp']; } } if($i==0) echo '<li>Il n\'y a pas aucun membre pseudo</li>'; echo '</ul>'; mysql_close(); ?> </body> </html>

J'ai une petit question pour le faire un tout petit peu évoluer.
Je voudrais mettre plusieurs (100 par exemple) champs avec cette saisie automatique.

j'ai donc modifier ma page ajax.php comme ceci:

Code : Tout sélectionner

<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> </head> <body> <?php for($i=0; $i < 100 ; $i++) { $connect = mysql_connect('localhost','root','') or die ("erreur de connexion"); mysql_select_db('bdtest',$connect) or die ("erreur de connexion base"); $sql = "SELECT nomp FROM tout WHERE nomp LIKE '%".$_GET['destinataire'."$i"]."%'"; $result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $i = 0; $nomp = ""; echo '<ul>'; while ($row = mysql_fetch_array($result)) { $i++; if($nomp == $row['nomp']){ } else { echo '<li><a href="#" onclick="xxx(\''.$row['nomp'].'\')">'.$row['nomp'].'</a></li>'; $nomp = $row['nomp']; } } if($i==0) echo '<li>Il n\'y a pas aucun membre pseudo</li>'; echo '</ul>'; mysql_close(); } ?> </body> </html>
Pour le code html de la page index1.php il suffit de copier 100 fois
Produit testé = <input type="text" id="destinataire0" name="destinataire0" onkeyup="verifPseudo(this.value)" /><div id="nompbox0"></div>

Produit testé = <input type="text" id="destinataire1" name="destinataire1" onkeyup="verifPseudo(this.value)" /><div id="nompbox1"></div>

Produit testé = <input type="text" id="destinataire2" name="destinataire2" onkeyup="verifPseudo(this.value)" /><div id="nompbox2"></div>

....

Mais pour le code Javascripte je ne sais pas si je dois utiliser la même méthode que pour le html ou s'il existe une méthode plus rapide.

Merci de votre aide.

ViPHP
ViPHP | 5924 Messages

18 mai 2007, 12:15

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

ViPHP
ViPHP | 5924 Messages

18 mai 2007, 12:18

Mais pour le code Javascripte je ne sais pas si je dois utiliser la même méthode que pour le html ou s'il existe une méthode plus rapide.
Tu modifies ta fonction verifPseudo pour y ajouter un nouvel argument :

Code : Tout sélectionner

function verifPseudo(name, value) { ... }
Que tu passes comme ceci :
<input type="text" id="destinataire0" name="destinataire0" onkeyup="verifPseudo(this.name,this.value)" />
Et tu n'as plus qu'à utiliser le nouvel argument, à savoir name, dans ta fonction js.

sebaaas
Invité n'ayant pas de compte PHPfrance

19 mai 2007, 01:06

J'ai suivis ton conseil ... mais ca a pas marché (ou alors j'ai fait des erreurs dans la mise en application dans ce que tu m'as dis).

Mais je suis un peu persévérant ... j'ai donc essayé. J'ai remis mon fichier ajax.php comme il était au départ. et voici comment j'ai modifier mon index1.php

Code : Tout sélectionner

<html><head></head> <body> <script type="text/javascript"> function xxx(newtext1) { document.getElementById('destinataire1').value = newtext; } function xxx(newtext) { document.getElementById('destinataire2').value = newtext; } function writediv(texte) { document.getElementById('nompbox1').innerHTML = texte; } function writediv(texte) { document.getElementById('nompbox2').innerHTML = texte; } function verifPseudo(nomp) { if(nomp != '') { if(nomp.length<3) writediv('<span style="color:#cc0000"><b>'+nomp+' :</b> ce pseudo est trop court</span>'); else if(nomp.length>30) writediv('<span style="color:#cc0000"><b>'+nomp+' :</b> ce pseudo est trop long</span>'); else writediv(file('ajax.php?destinataire='+escape(nomp))) } } 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="get" action="bd.php"> Produit testé = <input type="text" id="destinataire1" name="destinataire" onkeyup="verifPseudo(this.value)" /><div id="nompbox1"></div> Produit testé = <input type="text" id="destinataire2" name="destinataire" onkeyup="verifPseudo(this.value)" /><div id="nompbox2"></div> <input type="submit" name="submit" value="Envoyer la valeur" /> </form> </html>
La recherche se fait très bien pour chacun des INPUT, mais malheureusement, dès que je clique sur une des propositions il me la met dans le 2ieme champs (celui nommé destinataire2)

Que faire ... ?

D'avance Merci

ViPHP
ViPHP | 5924 Messages

19 mai 2007, 01:56

Tu t'y es mal pris. Tu n'as pas appliqué les modifications aux champs et à la fonction verifPseudo, et créer 2 fonctions writediv est incorrect.

Il faut que tu crées chaque champ de cette manière :
<input type="text" name="destinataire1" onkeyup="verifPseudo(1, this.value)" /><div id="nompbox1"></div>
Et ensuite que tu modifies ta fonction writediv pour écrire dedans sans avoir à créer 56 fonctions pour le faire :

Code : Tout sélectionner

function writediv(id, texte) { document.getElementById('nompbox'+id).innerHTML = texte; }
Et enfin la fonction verifPseudo :

Code : Tout sélectionner

function verifPseudo(id, nomp) { if(nomp != '') { if(nomp.length<3) writediv(id, '<span style="color:#cc0000"><b>'+nomp+' :</b> ce pseudo est trop court</span>'); else if(nomp.length>30) writediv(id, '<span style="color:#cc0000"><b>'+nomp+' :</b> ce pseudo est trop long</span>'); else writediv(id, file('ajax.php?destinataire='+escape(nomp))); } }
Je ne devrais pas donner le code comme cela, mais je te laisse le comprendre, si tu veux des éclaircissements, n'hésite pas...

sebaaas
Invité n'ayant pas de compte PHPfrance

19 mai 2007, 13:05

Voila, ca avance grace à votre aide.

Bon j'ai mis en ligne les travaux (attention il faut parfois insiter car le serveur de lycos est rebelle, il arrive qu'il ne trouve pas la page)

Voici la version de base
http://membres.lycos.fr/tados0000/index1.php
La version modifiée par mes soins (pas bon)
http://membres.lycos.fr/tados0000/index2.php
La version modifiée par Sékiltoyai (persque parfaite mais lorsque je clique sur les propositions du 2eme champs il le met dans le 1er champ
http://membres.lycos.fr/tados0000/index3.php
La version que j'ai encore modifier comme ce ci

Code : Tout sélectionner

function xxx(newtext) { document.getElementById('destinataire'+id).value = newtext; }
et

Code : Tout sélectionner

Produit testé = <input type="text" id="destinataire1" name="destinataire1" onkeyup="verifPseudo(1,this.value)" /><div id="nompbox1"></div> Produit testé = <input type="text" id="destinataire2" name="destinataire2" onkeyup="verifPseudo(2,this.value)" /><div id="nompbox2"></div>
http://membres.lycos.fr/tados0000/index4.php

Et à ce moment dans la console d'erreurs il m'indique
" id is note defined" à la ligne 5

Merci à tous

ViPHP
ViPHP | 5924 Messages

19 mai 2007, 15:08

Dans ta fonction :

Code : Tout sélectionner

function xxx(newtext) { document.getElementById('destinataire'+id).value = newtext; }
Il faut que tu mettes l'id dans les arguments :
function xxx(id, newtext)
et que tu l'appelles en lui donnant l'id : xxx(1, "machin");

sebaaas
Invité n'ayant pas de compte PHPfrance

20 mai 2007, 01:10

Merci beaucoup pour ton aide, je viens d'essayer ... ca ne fonctionne pas encore mais je sens que j'arrive (surtout grace à vous ) au bout de la 1er bataille.

sebaaas
Invité n'ayant pas de compte PHPfrance

20 mai 2007, 12:07

Plus qu'un "document.getElemetById("destinataire"+id) has no properties"
dans http://membres.lycos.fr/tados0000/index4.php
... à corriger


Je cherche,
Je cherche,
Je cherche,


Et je vous tiendrais au courant ( à moins que vous soyez plus rapide que moi )

lem
Eléphant du PHP | 108 Messages

21 mai 2007, 08:58

Dès le chargement de la page j'ai une erreur javascript:
Objet attendu ligne 112 car 2

Pour l'autre erreur, tu peux peut-être faire un alert de id dans ta fonction pour essayer de trouver ce qui pose problème ?
Lem.

sebaaas
Invité n'ayant pas de compte PHPfrance

22 mai 2007, 19:52

j'ai trouvéééééééééééé youhouuuuuuuuuuuuuu

index4.php

Code : Tout sélectionner

<html><head></head> <body> <script type="text/javascript"> function xxx(id2, newtext) { document.getElementById('destinataire'+id2).value = newtext; } function writediv(id, texte) { document.getElementById('nompbox'+id).innerHTML = texte; } function verifPseudo(id, nomp) { if(nomp != '') { if(nomp.length<3) writediv(id, '<span style="color:#cc0000"><b>'+nomp+' :</b> ce pseudo est trop court</span>'); else if(nomp.length>30) writediv(id, '<span style="color:#cc0000"><b>'+nomp+' :</b> ce pseudo est trop long</span>'); else writediv(id, file('ajax.php?destinataire='+escape(nomp)+'&id='+(id))) } } 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> <br><br> Mots dans la Base de données : "Pomme" , "Poire", "Ananas" , "Prune", "Pommes" (le serveur de lycos étant un peu lent des fois, il faut insister)<br> Même s'il indique que l'acces est interdit, taper qq lettre de plus <br> <br> <form method="get" action="bd.php"> Produit testé = <input type="text" id="destinataire1" name="destinataire1" onkeyup="verifPseudo(1,this.value)" /><div id="nompbox1"></div> Produit testé = <input type="text" id="destinataire2" name="destinataire2" onkeyup="verifPseudo(2,this.value)" /><div id="nompbox2"></div> <input type="submit" name="submit" value="Envoyer la valeur" /> </form> </html>
et ajax.php

Code : Tout sélectionner

<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> </head> <body> <?php $connect = mysql_connect('localhost','tados0000','') or die ("erreur de connexion"); mysql_select_db('tados0000_db',$connect) or die ("erreur de connexion base"); $sql = "SELECT * FROM tout WHERE nomp LIKE '%".$_GET['destinataire']."%'"; $result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $i = 0; $nomp = ""; echo '<ul>'; while ($row = mysql_fetch_array($result)) { $i++; $id2=$_GET['id']; if($nomp == $row['nomp']){ } else { echo '<li><a href="#" onclick="xxx('.$id2.' ,\''.$row['nomp'].'\')">'.$row['nomp'].'</a></li>'; $nomp = $row['nomp']; } } if($i==0) echo '<li>Il n\'y a pas aucun membre pseudo</li>'; echo '</ul>'; mysql_close(); ?> </body> </html>
Je tiens à tous vous remercier mais surtout un énorme merci à :o Sékiltoyai :o

ViPHP
ViPHP | 5924 Messages

22 mai 2007, 22:33

De rien, content que ca marche :)
(tu peux mettre un tag résolu)

sebaaas
Invité n'ayant pas de compte PHPfrance

16 déc. 2007, 23:03

Voila, grace à votre aide, j'ai pu mettre en ligne mon site. Vous aller dire que cela fait assez longtemps que la discussion à débutée ... mais j'ai mis du temps à faire mon site car je suis un simple amateur.

J'ai créé un annuaire de comparatifs et d'essais de matériel informatique que j'ai baptisé : Tesmat . J'avais pas mal posé de questions sur la technologie Ajax. J'ai utilisé vos réponses sur une page qui se nomme : Proposer un test (le lien ce trouve en plein milieu de la 1er page sur mon site). Ce la démontre que cela fonctionne pas mal choix moi et que la technologie Ajax est utilisé de façon constructive.

Si vous avez des avis sur mon site, n'hésitez pas à me donner des conseils : je suis preneur.