Selection fine dans une boite a liste

[Résolu]
Signaler
Messages postés
17
Date d'inscription
mercredi 2 juillet 2003
Statut
Membre
Dernière intervention
21 mars 2007
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
bonjour,
je souhaiterai que dans la boite a liste les données provienne d'un champ d'une base de donnée
 
j'ai fait :  
 

Code:


<table class="code" cellspacing="0" cellpadding="2">

----,

<form name=\"formulaire\" action=\"#\">
Entrez les premières lettres du pays, une sélection sera proposée.

<!-- Notez que sur l'événement onKeyUp (relâchement de la touche du clavier) on exécute la fonction maj() -->
<select name=\"liste\" size=3>
<?
//Requete pour remplir la liste déroulante
$SQL = \"SELECT * FROM MATIERE ORDER BY Desing_Mat\";
$res = mysql_query($SQL);
while($val=mysql_fetch_array($res)) {
   $valeur = $val[\"Desing_Mat\"];
   echo \"<option value>\".$valeur;
   }
//----------------------------------------
?>

</td>

</td>
</tr>
</tbody>
</table>

les donnée s'affichent bien dans la boite a liste mais des que je commence a tapper une lettre dans la zone de saisie, tout s'efface
 
merci de votre aide !
lien du script : http://www.java.scripts-fr.com/scripts.php?js=25  (jespere que cela ne pause aucun probleme vu que le script vien d'un autre site ? de toutes facon c'est du code libre ^^)
 
pi si c'est pas trop demandé (en bonus !) comment faire pour lorsque qu'on selection une donnée dans la boite a liste récupéré la ligne complete de la table ? avec l'action Onclick je suppose ? il faudrai que je recupere le champ Ref_Mat (dans une variable) situer dans cette table lors de ce click.

To be awe ... It's The Life ! ;)

To be awe ... It's The Life ! ;)

4 réponses

Messages postés
17
Date d'inscription
mercredi 2 juillet 2003
Statut
Membre
Dernière intervention
21 mars 2007

Bon ba jy suis arrivé a l'aide d'un autre script, beaucoup plus facile dutilisation !
si vous étiez dans le meme cas que moi et que vous y arrivé pas, un petit mp et je vous aidrai volontier.
:)

To be awe ... It's The Life ! ;)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
Bonjour,

   le même genre de script existe ici
   mais sur le lien donné ça fonctionne,
      et ton extrait ne semble pas en cause, quoique ? 
      l'erreur est probablement ailleurs.
      à propos, comment peut-on voir d'où vient le problème si
         on n'a pas la base de données déjà ???
      met nous ici un extrait de la page html générée, pas le php !
      ( un extrait, là où ça pêche, pas 598368 lignes )

<hr />
                              Cordialement             Bul       [mon Site]    [M'écrire]
<hr />
Messages postés
17
Date d'inscription
mercredi 2 juillet 2003
Statut
Membre
Dernière intervention
21 mars 2007

<html>
<head>
<title></title> 
<?
   include '../connexion.php'; //Ajout de la connexion à la base de données
 ?>
<script type="text/javascript">
<!-- Debut


function initialisation()
{
lettre = new NomObjets('formulaire','liste','entree');
lettre.bldInitial();
} 


/*
Dans cette fonction, on crée avec l'opérateur spécial new un objet lettre en lui définissant la fonction NomObjets . Cet objet contient le nom de notre formulaire (ici formulaire), le nom de notre liste déroulante (ici liste) et le nom du champ texte (ici entrée).
Une fois ceci fait on execute la fonction bldInitial() en lui concatenant l'objet créé
*/ 


function NomObjets(formname,selname,textname,str)
{
this.formname = formname;
this.selname = selname;
this.textname = textname;
this.select_str = str || '';
this.selectArr = new Array();
this.initialize = initialize;
this.bldInitial = bldInitial;
this.maj = maj;
} 


function initialize()
{
if (this.select_str =='')
// Si la variable select_str est vide, en gros si il n'y a rien de sélectionné




 {
 for(var i=0;i<document.forms[this.formname][this.selname].options.length;i++)
/*
On ouvre une boucle avec l'instruction for jusqu'à que i soit inférieur au nombre de valeur "<option>" restantes. Ceci est effectué en utilisant la propriété length associée à la propriété options de l'objet select (retourne un tableau correspondant aux options (élément <OPTION>)). Gardez bien en mémoire cette syntaxe car elle est réutilisée un peu partout plus bas.
*/


 


  {
  this.selectArr[i] = document.forms[this.formname][this.selname].options[i];
  this.select_str += document.forms[this.formname][this.selname].options[i].value+" : "+document.forms[this.formname][this.selname].options[i].text+",";
  }

 }


else
 {
 var tempArr = this.select_str.split(',');

 for(var i=0;i<tempArr.length;i++)
  {
  var prop = tempArr[i].split(':');
  this.selectArr[i] = new Option(prop[1],prop[0]);
  }
 }
return;
}
function bldInitial()
{
this.initialize();
/* Au commencement de cette fonction, on exécute la fonction initialize().*/
for(var i=0;i<this.selectArr.length;i++)
/* On ouvre une boucle jusqu'à que i soit inférieur au nombre d'éléments du tableau selectArr.*/
document.forms[this.formname][this.selname].options[i] = this.selectArr[i];
/* On réécrit nos "<option>" avec ce que contient le tableau selectArr.*/
document.forms[this.formname][this.selname].options.length = this.selectArr.length;
/* et on donne autant d'option que contient notre tableau selectArr.*/ 
return;
// puis on renvoie le tout
}


function maj()
{
var str = document.forms[this.formname][this.textname].value;
// On donne a la variable str la valeur du champ texte. 


if(str == '') { this.bldInitial();return; }
// si la variable str est vide, on execute la fonction bldInitial() 


this.initialize();
// on execute la fonction initialize() 


var j = 0;
// on ouvre une variable j et on y met 0 


pattern1 = new RegExp("^"+str,"i");

for(var i=0;i<this.selectArr.length;i++)

if(pattern1.test(this.selectArr[i].text)) 

document.forms[this.formname][this.selname].options[j++] = this.selectArr[i];

document.forms[this.formname][this.selname].options.length = j;
 {
 document.forms[this.formname][this.selname].options[0].selected = true;

 }
} 


// Fin -->
</script> 


</head>

<!-- au chargement de la page, détecté par l'événement OnLoad, on exécute la fonction initialisation(). --> 




<form name="formulaire" action="#">
Entrez les premières lettres de la matiere.


<select name="liste" size=3>
<?
//Requete pour remplir la liste déroulante
$SQL = "SELECT * FROM MATIERE ORDER BY Desing_Mat";
$res = mysql_query($SQL);
while($val=mysql_fetch_array($res)) {
   $valeur = $val["Desing_Mat"];
   echo "<option value>".$valeur;
   
}
//----------------------------------------
?>
    </option>
</select>
</form> 



</html>


base de donnée : table MATIERE
Ref_Mat:medint (PK)
TYPE_MAT_Nro_Type_Mat:Int (FK)
Desing_Mat:vachar
Pu_Mat:Decimal(6,2)
...

la connexion a la base de donnée se passe bien
To be awe ... It's The Life ! ;)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
>>jy suis arrivé a l'aide d'un autre script, beaucoup plus facile dutilisation !
   pas étonnant... j'avais commencé un peu décortiquer, mais il me fallait un peu plus de temps...
   tu as bien fait. celui que je te citais, par exemple, est simplissime. 
<hr />
                              Cordialement                Bul          [
mon Site
]    [
M'écrire
]
<hr />
pourquoi faire simple quand on peut faire compliqué ?