Champ auto-complété

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 : Champ auto-complété

par auclairp » 06 déc. 2005, 17:36

Pour ceux ques ca pourrais intéresser, c'Est assez simple en fin de compte...

Voici le code
<? 
require("connec.php");
$liste = "SELECT code FROM description ORDER BY code";
$resultat = mysql_query($liste);	
?>
<SCRIPT LANGUAGE="JavaScript">

var Liste=new CreerListe("Pays", 5, 200)
<?
while ($rows=mysql_fetch_array($resultat))
		{
		echo "Liste.Add('".$rows["code"]."');";
		}
?>

function CreerListe(nom, hauteur, largeur) {
	this.nom=nom; this.hauteur=hauteur; this.largeur=largeur;
	this.search="";
	this.nb=0; 
	this.Add=AjouterItem;
	this.Afficher=AfficherListe;
	this.MAJ=MAJListe;
}

function AjouterItem(item) {
	this[this.nb]=item
	this.nb++;
}

function AfficherListe() {
	if (document.layers) {
		var Z="<SELECT name="+this.nom+" size="+this.hauteur+">";
	} else {
		var Z="<SELECT name="+this.nom+" size="+this.hauteur+" style='width:"+this.largeur+"'>";
	}
	for (var i=0; i<this.nb; i++) {
		Z+="<OPTION value=\""+this[i]+"\">"+this[i]+"</OPTION>"		
	}
	Z+="</SELECT>"
	document.write(Z);
}

function MAJListe(txt,f) {
	if (txt!=this.search) {
		this.search=txt
		f.elements[this.nom].options.length=0; 
		for (var i=0; i<this.nb; i++) {
			if ( this[i].substring(0,txt.length).toUpperCase()==txt.toUpperCase() ) {
				var o=new Option(this[i], this[i]);
				f.elements[this.nom].options[f.elements[this.nom].options.length]=o;
			}
		}
		if (f.elements[this.nom].options.length==1) {
			f.elements[this.nom].selectedIndex=0;
		}
	}
}

function ListeCheck() {
	Liste.MAJ(document.forms["monform"].search.value,document.forms["monform"])
	if (document.layers) {
		setTimeout("ListeCheck()", 1001)
	} else {
		setTimeout("ListeCheck()", 100)
	}
}

</SCRIPT>
</HEAD>

<BODY bgcolor="#FFFFFF" text="#FAFAFF" alink="#000066" link="#000066" vlink="#000066" >

<FORM name=monform>
<INPUT type=text name=search><BR>
<SCRIPT language=javascript>
	Liste.Afficher();
	ListeCheck();
</SCRIPT>
</FORM>
</BODY></HTML>

par auclairp » 05 déc. 2005, 22:31

On va la refaire... ;)
éditer ton message initial pour donner un titre valide à ton sujet ?
Un " ne soit pas parresseux et regarde la FAQ " ou juste
http://www.phpfrance.com/forums/faq.php#15
aurait suffit, mais bon le résultat est le même,

par albat » 05 déc. 2005, 22:28

On va la refaire... ;)
éditer ton message initial pour donner un titre valide à ton sujet ?

par auclairp » 05 déc. 2005, 22:24

Avertissement :
auclairp, je vais écrire en rouge, mais cela ne doit pas te traumatiser.
Ce n'est pas pour te chicaner ni te faire subir les affres de quelconques supplices.
Juste pour indiquer que le message qui suit, je l'énonce en tant que modérateur.

Modération :
À présent que tu as reçu quelques éléments de réponse,
que dirais-tu d'éditer ton message initial pour donner un titre valide à ton sujet ?
Que dirais-tu, par exemple, de "Champ auto-complété" ? ;)

À part ça, tu es dans le bon forum. :pouce:


Tu sais, je fais parfois les gros yeux et j'ai une grosse voix, mais je n'ai jamais mangé personne. :lol:
Certainement mais ???? comment, car je suis bien en accord, le titre en place ne dit par grand choses..... mais si tu partage tout ton savoir avec moi, ca me fera plaisir de me conformer au désir d'un Modo....

par albat » 05 déc. 2005, 22:21

Avertissement :
auclairp, je vais écrire en rouge, mais cela ne doit pas te traumatiser.
Ce n'est pas pour te chicaner ni te faire subir les affres de quelconques supplices.
Juste pour indiquer que le message qui suit, je l'énonce en tant que modérateur.

Modération :
À présent que tu as reçu quelques éléments de réponse,
que dirais-tu d'éditer ton message initial pour donner un titre valide à ton sujet ?
Que dirais-tu, par exemple, de "Champ auto-complété" ? ;)

À part ça, tu es dans le bon forum. :pouce:


Tu sais, je fais parfois les gros yeux et j'ai une grosse voix, mais je n'ai jamais mangé personne. :lol:

par auclairp » 05 déc. 2005, 21:37

ok je me suis essayer de juste remplacer par
<?
$reponse = mysql_query("SELECT * FROM description");
while ($donnees = mysql_fetch_array($reponse) )
{

Liste.Add("$donnees['code']");
}
?>
Bien sure comme je pensait ca ne fonctionne pas, mais je devais essayer

par auclairp » 05 déc. 2005, 21:31

J'ai trouvé......

Voici le script, oui je sais c'est du javaScript, mais je veux inclure du php alors c'est ici, et le post est déja ouvert

Code : Tout sélectionner

<SCRIPT LANGUAGE="JavaScript"> var Liste=new CreerListe("Pays", 5, 200) Liste.Add("Afghanistan"); Liste.Add("Afrique du sud"); Liste.Add("Albanie"); Liste.Add("Algérie"); Liste.Add("Allemagne"); Liste.Add("Andorre"); Liste.Add("Angola"); Liste.Add("Antigua-et-Barbuda"); Liste.Add("Arabie"); Liste.Add("Argentine"); Liste.Add("Arménie"); Liste.Add("Australie"); Liste.Add("Autriche"); Liste.Add("Azerbaïdjan"); Liste.Add("Bahamas"); function CreerListe(nom, hauteur, largeur) { this.nom=nom; this.hauteur=hauteur; this.largeur=largeur; this.search=""; this.nb=0; this.Add=AjouterItem; this.Afficher=AfficherListe; this.MAJ=MAJListe; } function AjouterItem(item) { this[this.nb]=item this.nb++; } function AfficherListe() { if (document.layers) { var Z="<SELECT name="+this.nom+" size="+this.hauteur+">"; } else { var Z="<SELECT name="+this.nom+" size="+this.hauteur+" style='width:"+this.largeur+"'>"; } for (var i=0; i<this.nb; i++) { Z+="<OPTION value=\""+this[i]+"\">"+this[i]+"</OPTION>" } Z+="</SELECT>" document.write(Z); } function MAJListe(txt,f) { if (txt!=this.search) { this.search=txt f.elements[this.nom].options.length=0; for (var i=0; i<this.nb; i++) { if ( this[i].substring(0,txt.length).toUpperCase()==txt.toUpperCase() ) { var o=new Option(this[i], this[i]); f.elements[this.nom].options[f.elements[this.nom].options.length]=o; } } if (f.elements[this.nom].options.length==1) { f.elements[this.nom].selectedIndex=0; } } } function ListeCheck() { Liste.MAJ(document.forms["monform"].search.value,document.forms["monform"]) if (document.layers) { setTimeout("ListeCheck()", 1001) } else { setTimeout("ListeCheck()", 100) } } </SCRIPT> </HEAD> <BODY bgcolor="#FFFFFF" text="#FAFAFF" alink="#000066" link="#000066" vlink="#000066" > <FONT FACE="Arial" SIZE='-1' COLOR="navy"> <FORM name=monform> <INPUT type=text name=search><BR> <SCRIPT language=javascript> Liste.Afficher(); ListeCheck(); </SCRIPT> </FORM>
Je voudrais remplacer

Code : Tout sélectionner

Liste.Add("Afghanistan"); Liste.Add("Afrique du sud"); Liste.Add("Albanie"); Liste.Add("Algérie"); Liste.Add("Allemagne"); Liste.Add("Andorre"); Liste.Add("Angola"); Liste.Add("Antigua-et-Barbuda"); Liste.Add("Arabie"); Liste.Add("Argentine"); Liste.Add("Arménie"); Liste.Add("Australie"); Liste.Add("Autriche"); Liste.Add("Azerbaïdjan"); Liste.Add("Bahamas");
Par une commande MySQL
<?
$reponse = mysql_query("SELECT code FROM description"); // Requête SQL 
// On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_array($reponse) )
{
Liste.add("$donnees['code'];")
}
?>
Ok je sais que cela a probablement pas de sens... mais j'aimerais introduire ce genre de requête dans mon script... avez vous une idée

par mario » 05 déc. 2005, 21:16

C'est exactement cela....., et je peux appeler ca comment pour en fire ue recherche
Champ autocomplété.

par auclairp » 05 déc. 2005, 21:03

De façon claire:

Tu as une base de données avec deux champs : code et nom

Tu veux un formulaire avec un <input> pour saisir le code du champs voulu. Sachant qu'au fur et a mesure qu'on rentre le code: une liste du formulaire se met à jour automatiquement et élimine les noms qui ne vont pas.Il ne reste alors que les nom dont le code commence par les chiffres tapés. :lol:

Réponse : seulement en javascript/vbscript

Essaye sur www.toutjavascript.com ça doit exister tout fait.

Le_Bébert
C'est exactement cela....., et je peux appeler ca comment pour en fire ue recherche

Merci

par Le_Bébert » 05 déc. 2005, 18:06

De façon claire:

Tu as une base de données avec deux champs : code et nom

Tu veux un formulaire avec un <input> pour saisir le code du champs voulu. Sachant qu'au fur et a mesure qu'on rentre le code: une liste du formulaire se met à jour automatiquement et élimine les noms qui ne vont pas.Il ne reste alors que les nom dont le code commence par les chiffres tapés. :lol:

Réponse : seulement en javascript/vbscript

Essaye sur www.toutjavascript.com ça doit exister tout fait.

Le_Bébert

par matt_m » 05 déc. 2005, 10:24

bonjour auclairp
regarde du coté de la technologie Ajax pour faire ce que tu souhaite faire

par jobherzt » 05 déc. 2005, 09:00

si j'ai bien compris ce que tu veux ( rien n'est moins sur, alors suit quand meme les conseils de cyrano :-) ), ca me semble impossible a partir du PHP. peut etre en javascript, mais a mon avis tu t'embetera beaucoup pour un truc pas forcement indispensable...

par Cyrano » 05 déc. 2005, 08:11

:shock: J'ai pas compris grand chose.

Première règle du bon développeur pour résoudre un problème : correctement le formuler. Si tu arrives à formuler clairement la question, dis-toi bien que tu auras résolu les 3/4 du problème, le 1/4 restant n'étant que de la technique et un choix de fonction appropriée.

Pour expliquer ce que tu veux faire, détaille avec clarté ce que tu as (éventuellement avec un exemple), explique ce que tu veux obtenir (avec un exemple basé sur l'exemple précédent) et décris ce que tu as déjà essayé de faire pour ça et les erreurs que tu as rencontré.

Champ auto-complété

par auclairp » 05 déc. 2005, 06:23

Désolé je ne sais pas comment nommer le sujet de monpost, mais voici ma question, je ne suis même pas certain d'ètre dans le bon forum, mais sinon, SVP les modo, ne pas me chicaner, mais jjuste déplacer....

J'ai ma table avec disons une colone de code et de nom.

J'aimerais avoir une page ou j'ai un "text box" et toute la liste des champs de ma table.

Pour la liste y a pas de problème, mais ce que j'aimerais est que dans le box, j'entre le # du code et au fur et à mesure que j'entre les chiffres, bien il y a des champs qui s'élimine dans la liste pour à la fin n'avoir que celui que j'ai entré le code complet.

Me comprenez vous, et cela est-il possible