Rechercher : dans
Par :

[javascript/PHP] aide à la saisie

Dernière réponse le 26 sep 2006 à 22:08:57 redwire, le 24 sep 2006 à 10:57:51 
 Signaler ce message aux modérateurs

Bonjour,

je souhaite faire un formulaire avec un champ où il y aura de l'aide à la saisie comme celui là:
http://javatwist.imingo.net/saisieauto4.php

seulement mais pays à moi, ils proviennent d'une table de ma base de données, comment faire ça?

Merci...

Meilleures réponses pour « [javascript/PHP] aide à la saisie » dans :
Formulaires en ligne - Les champs de saisie VoirQuelles données saisir ? Comment dois-je saisir l'information L'organisation des champs de saisie Séparer les champs de saisie L'organisation des champs et des titres La longueur des champs Quelles données saisir ? Sur la plupart des...
[Webmaster] Faire une redirection VoirLes différentes solutions sont présentées de la meilleure (.htaccess) à la moins bonne (JavaScript). Un .htaccess Le .htaccess est à placer dans le répertoire qui doit être redirigé. On applique une redirection de cette façon : RedirectPermanent...
Télécharger PSPad VoirPSPad est un excellent éditeur de texte. Il est utile pour travailler sur du simple texte, mais aussi sur du HTML, CSS, Javascript, php ou autres langages de programmation (C++, Java, Python...). Les fonctionnalités sont impressionnantes: ...
Javascript - l'objet Array VoirLes particularités de l'objet Array L'objet Array est un objet du noyau Javascript permettant de créer et de manipuler des tableaux. Voici la syntaxe à utiliser pour créer une variable tableau : var x = new Array(element1[, element2, ...]); Si...
Javascript - Implantation du code VoirA quel emplacement insérer le Javascript dans votre page HTML Il existe plusieurs façons d'inclure du JavaScript dans une page HTML : Grâce à la balise En mettant le code dans un fichier Grâce aux événements Dans la balise...
Javascript - les boîtes de dialogue VoirQu'est-ce qu'une boîte de dialogue? Une boîte de dialogue est une fenêtre qui s'affiche au premier plan suite à un événement, et qui permet Soit d'avertir l'utilisateur Soit le confronter à un choix Soit lui demander de compléter un champ pour...

1

_ArKhAoN_, le 24 sep 2006 à 17:56:59

Moi j'opterai plutot pour un code dans ce genre, change option par ce que tu veut en fonction de ta table. (j'ai récupéré le code source de la page pour modèle).

Et en supposant également que ton hébergeur supporte php (ce qui me parrait clair puisque tout se trouves dans mysql) mais bon des fois ...


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>saisie automatique modérée ^_^</title> 

<link rel="StyleSheet" type="text/css" href="index.css" />

<style type="text/css">
ul {display:none;background-color:white;padding:0px;margin:0px;width:150px;list-style:none}
li {width:150px}
label {font-weight:bold;color:white}
</style> 

<script type="text/javascript"> 

var tab=new Array(
<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('ma_base');
$rep1 = mysql_query('SELECT option FROM ma_table');
while($rep = mysql_fetch_array($rep1))
{
echo '\'' . $rep['option'] . '\',';
}
echo "'_'";
?>
); 


function go(alpha){ 
var aff=document.getElementById('liste');
var affiche=aff.getElementsByTagName('li');


// à chaque caractère tapé, on vide la liste de résultats précédente
while(aff.lastChild)aff.removeChild(aff.lastChild);

// on supprime les accents pour comparaison
for(i=0;i != tab.length;i++){  
tab2=tab[i].replace(/[àâä]/gi,'a'); 
tab2=tab2.replace(/[éèêë]/gi,'e'); 
tab2=tab2.replace(/[ïî]/gi,'i'); 
tab2=tab2.replace(/[ôö]/gi,'o'); 
tab2=tab2.replace(/[ùüû]/gi,'u'); 
alpha=alpha.replace(/[àâä]/gi,'a'); 
alpha=alpha.replace(/[éèêë]/gi,'e'); 
alpha=alpha.replace(/[ïî]/gi,'i'); 
alpha=alpha.replace(/[ôö]/gi,'o'); 
alpha=alpha.replace(/[ùüû]/gi,'u'); 


// on supprime les majuscules et on cherche une correspondance
if(tab2.toLowerCase().indexOf(alpha.toLowerCase())==0){ 
if(alpha){
// pour chaque correspondance, on crée un nouvel item dans la liste
var el=document.createElement("li"); 
var tx=document.createTextNode(tab[i]); 
// en cliquant sur l'item, on donne sa valeur à la zone de texte et on efface la liste de sélection
el.onclick=function(){document.getElementById('t').value=this.firstChild.data;aff.style.display='none'};
el.appendChild(tx);
aff.appendChild(el)};};
};


var total=affiche.length;// nombre de résultats trouvés

if((total==0) || (total>=4)){// Si résultats = 0 ou > 3
// création d'un item vide (conformité xhtml: pas de liste vide)
var el=document.createElement("li"); 
var tx=document.createTextNode(" "); 
el.appendChild(tx);
aff.style.display='none';// liste invisible
aff.appendChild(el);}
// sinon, on affiche les correspondances trouvées.
else aff.style.display='block';


}

</script>
 
</head> 

<body> 
<div id="menu">

<div id="site1">
<a class="menusite1" title="Accueil de JavaTwist, le site des scripts" href="javatwist.imingo.net/index.php">JavaTwist</a>
</div>
<div id="site2">
<a class="menusite2" title="Les scripts pour jouer" href="javatwist.imingo.net/index.php?menu=ludiques">Ludiques</a> -
<a class="menusite2" title="Les scripts pour rire" href="javatwist.imingo.net/index.php?menu=comiques">Comiques</a> -
<a class="menusite2" title="Des scripts pour savoir faire..." href="javatwist.imingo.net/index.php?menu=pratiques">Pratiques</a>
</div>
<div id="site3">
<a class="menusite3" title="Un annuaire de liens en libre service..." href="javatwist.imingo.net/index.php?menu=liens2">Liens</a> -

<a class="menusite3" title="Le chat historique de JavaTwist" href="javatwist.imingo.net/zetchat.php">Zetchat</a> -
<a class="menusite3" title="Le forum de JavaTwist" href="javatwist.imingo.net/forum/">Twisty Forum</a> -
<a class="menusite3" title="Un nouveau chat révolutionnaire à découvrir" href="javatwist.imingo.net/twistnchat/">Twist'n'Chat</a> -
<a class="menusite3" title="Les commentaires sur le site... Accès libre!" href="javatwist.imingo.net/avis.php">No Comment</a>
</div>
<div style="margin-right:20px;text-align:right">
<a href="javatwist.imingo.net/forum/sujets.php?ind=91" title="Les dernières créations locales" class="new">Nouveautés</a>
</div>
</div>

<hr />
<hr />

<div class="topo" style="margin:50px">
Une aide à la saisie qui reproduit le fameux attribut IE pour zones de texte <span>"autocomplete"</span>.<br />
Les données à rechercher (ici, tableau javascript, mais a priori, elle sont plutôt générées par un langage serveur avant) sont
les nombres de 1 à 20, écrits en toutes lettres.<br />
Si au maximum 3 résultats correspondent à la saisie, ils apparaissent sous la zone.<br />
Un clic sur une des options proposées copie la valeur dans le champ texte et efface la liste.
</div>


<form id="f" action=""> 

<div style="text-align:left;margin:100px">
<input class="texte" type="text" style="width:150px" id="t" onkeyup="go(this.value)" /> 
<label for="t">Saisissez votre requête</label>
<ul id="liste" style="display:none">
<li> </li> 
</ul> 
</div>
</form> 

<p style="margin-top:50px;color:white;clear:left">
<a class="liensite" href="javatwist.imingo.net">© Javatwist </a> - JavaTwisting people
</p>
</body> 
</html>

Répondre à _ArKhAoN_

3

redwire, le 24 sep 2006 à 20:59:56

Pourquoi, après la boucle du while qui finit la création du tableau, tu finis par un echo "'_'"; ?

Répondre à redwire

4

_ArKhAoN_, le 25 sep 2006 à 16:40:14

Je l'attendais cette question :p ,

en fait ça c'était la solution la plus rapide pour moi pour ne pas à avoir faire de conditions si la boucle arrivait à la fin, on ne mets pas de virgule..

D'ailleurs est ce que quelqu'un pourrait dire comment on peut tester la dernière entrée?

merci

Répondre à _ArKhAoN_

5

redwire, le 25 sep 2006 à 18:05:15

J'ai essayé ça aussi:

<script type="text/javascript"> 
<?php
echo "var tab=new Array(\n" ;
if ($rep_chanson = mysql_fetch_array($chanson))
	echo "\'$rep_chanson['titre']\'" ;
while($rep_chanson = mysql_fetch_array($chanson)) 
	echo ",\n\'$rep_chanson['titre']\'" ;
echo "\n);" ;
}
?>

etc...



marche pas because " ou ' ?

Répondre à redwire

6

redwire, le 26 sep 2006 à 21:05:49

Je n'ai pas de message d'erreur avec ça:

<script type="text/javascript">
<?php
echo "var tab=new Array(\n" ;
if ($rep_chanson = mysql_fetch_array($chanson) )
	{echo "'"; echo $rep_chanson['titre']; echo "'" ; }
while($rep_chanson = mysql_fetch_array($chanson)) 
	{echo ",'"; echo $rep_chanson['titre']; echo "'" ; }
echo ",);" ;

?>


mais malheureusement, l'aide à la saisie ne fonctionne toujours pas... :-(

Répondre à redwire

7

 redwire, le 26 sep 2006 à 22:08:57

Erreur, ça marche, j'avais juste une occurence où il y avaut une apostrophe qui mettait le bazar... utiliser addslashes...

par contre, ça me plait pas trop d'avoir 2 mysql_fetch_array sur la même requête...

Répondre à redwire
Collection CommentÇaMarche.net