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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : saisie "semi automatique" d'un pseudo depuis la BD

par sebaaas » 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.

par Sékiltoyai » 22 mai 2007, 22:33

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

par sebaaas » 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

par lem » 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 ?

par sebaaas » 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 )

par sebaaas » 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.

par Sékiltoyai » 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");

par sebaaas » 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

par Sékiltoyai » 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...

par sebaaas » 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

par Sékiltoyai » 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.

par Sékiltoyai » 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...

par sebaaas » 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.

par lem » 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.]

par Truc » 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: