Saisie automatique des champs
Posté : 15 févr. 2012, 16:57
Bonjour à tous,
j'ai une petite difficulté dans la saisie automatique des champs d'un formulaire. Je m'explique :
je dispose de 3 champs de formulaire. En se mettant à la place de l'utilisateur, je souhaiterai que si celui-ci saisi des données dans un de ces champs et que ces données ont déjà été saisies dans le passé, alors ça récupère également les autres données des champs qui sont en lien avec le champ dans lequel il saisit le texte, dans le cas contraire, les valeurs rentrées viennent compléter une BD et la prochaine fois que l'utilisateur rentrera ces mêmes données, ca aille les chercher.
Exemple : Ici, la référénce de champ est "nom de la société".
1/ l'utilisateur n'a jamais encore jamais rentré dans le champ "nom de la société" la valeur "PHP FRANCE". Il remplir donc les 3 champs "à la main".
région de la société : Ile de France
nom de la société : PHP FRANCE
adresse de la société : 1, rue PHP
L'utilisateur valide et termine ...
2/ Quelques temps plus tard, il est amené à re-remplir les champs. Il s'avère qu'il souhaite également rentrer les références de la société "PHP FRANCE".
alors :
Il rentre les premières lettres dans le champ "nom de la société" ... " PHP " et là une liste déroulante s'affiche et lui offre des possibilité d'entreprise comprenant la valeur "PHP". Alors l'utilisateur clique sur celle qui l'intéresse, et ainsi les champs "région de la société, nom de la société et adresse de la société" sont automatiquement complétés.
Dans le code que j'ai fait, j'arrive pour le moment à créer cette liste déroulante. Mais lorsque je clique sur un des choix qui m'est offert, rien n'est modifié. J'aimerai donc savoir ce qui cloche dans mon code pour que cela ne fonctionne pas ..
Voici tout d'abord le code de création de mon formulaire :
j'ai une petite difficulté dans la saisie automatique des champs d'un formulaire. Je m'explique :
je dispose de 3 champs de formulaire. En se mettant à la place de l'utilisateur, je souhaiterai que si celui-ci saisi des données dans un de ces champs et que ces données ont déjà été saisies dans le passé, alors ça récupère également les autres données des champs qui sont en lien avec le champ dans lequel il saisit le texte, dans le cas contraire, les valeurs rentrées viennent compléter une BD et la prochaine fois que l'utilisateur rentrera ces mêmes données, ca aille les chercher.
Exemple : Ici, la référénce de champ est "nom de la société".
1/ l'utilisateur n'a jamais encore jamais rentré dans le champ "nom de la société" la valeur "PHP FRANCE". Il remplir donc les 3 champs "à la main".
région de la société : Ile de France
nom de la société : PHP FRANCE
adresse de la société : 1, rue PHP
L'utilisateur valide et termine ...
2/ Quelques temps plus tard, il est amené à re-remplir les champs. Il s'avère qu'il souhaite également rentrer les références de la société "PHP FRANCE".
alors :
Il rentre les premières lettres dans le champ "nom de la société" ... " PHP " et là une liste déroulante s'affiche et lui offre des possibilité d'entreprise comprenant la valeur "PHP". Alors l'utilisateur clique sur celle qui l'intéresse, et ainsi les champs "région de la société, nom de la société et adresse de la société" sont automatiquement complétés.
Dans le code que j'ai fait, j'arrive pour le moment à créer cette liste déroulante. Mais lorsque je clique sur un des choix qui m'est offert, rien n'est modifié. J'aimerai donc savoir ce qui cloche dans mon code pour que cela ne fonctionne pas ..
Voici tout d'abord le code de création de mon formulaire :
<table>
<tr>
<td>
<label for="region_client">Région de la société</label>
</td>
<td>
<?php
if(isset($_SESSION['session_region_client']))
addSelectRegion("region_client", $_SESSION['session_region_client'],false, false, "", 300,1);
else{
if($rowAuteur['nom_region'] == "National"){
if($_SESSION['session_region_etude']){
$varregioncli = $_SESSION['session_region_etude'];
}
else{
$varregioncli = 1;
}
}
else $varregioncli = $rowAuteur['id_region'];
addSelectRegion("region_client", $varregioncli,false, false, "", 300,1);
}
?>
</td>
</tr>
<tr>
<td><label for="client_ste">Nom de la société</label></td>
<td><input type="text" name="client_ste" id="client_ste" size=50 onKeyUp="javascript:couleur(this);" <?php if(isset($_SESSION['session_client_ste'])){echo ' value="' . $_SESSION['session_client_ste'] . '" ';} ?> /><span class="champ_obligatoire">*</span></td>
</tr>
<tr>
<td><label for="client_adresse">Adresse du site</label></td>
<td><textarea id="client_adresse" name="client_adresse" cols=60 rows=5><?php if(isset($_SESSION['session_client_adresse'])){echo $_SESSION['session_client_adresse'];} ?></textarea></td>
</tr>
</table>
Ensuite, voici la fonction en JavaScript qui va appeler l'autocomplétion des champs
$(function() {
$( "#client_ste" ).autocomplete({
source: "search.php?search=soc",
minLength: 2,
select: function( event, ui ) {
loadSociete(ui);
selectInter = $( "#client_nom" ).autocomplete({
source: "search.php?search=inter&id="+ui.item.id_societe,
minLength: 2,
select: function( event, ui ) {
loadInterlocuteur(ui);
}
});
}
});
});
Enfin, voici la fonction qui remplit les champs :
if(isset($resultat))
unset($resultat);
$resultat = array();
if($search == 'soc'){
$req = "SELECT id_societe, nom_societe, adresse_societe, soc.id_region AS region, nom_region, compteur AS adr FROM societe soc
LEFT OUTER JOIN region reg ON (soc.id_region = reg.id_region) WHERE lower(soc.nom_societe) LIKE '%".$q."%' ORDER BY compteur DESC";
$resultreq = mysql_query($req) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $req);
while ($row = mysql_fetch_array($resultreq, MYSQL_ASSOC)) {
$id = $row['nom_societe'];
$key = $row['nom_societe'].' - '.$row['nom_region'].' ('.str_replace("\r\n", ' - ', $row['adresse_societe']).')';
$value = $row['nom_societe'];
array_push($resultat, array(
"id"=>$id,
"label"=>$key,
"value" => $value,
"id_region" => $row['region'],
"nom_societe" => $row['nom_societe'],
"adresse_societe" => str_replace($arraychar, $arrayreplace, $row['adresse_societe']),
"adresse_region" => $row['adr'],
"id_societe" => $row['id_societe']
));
if(count($resultat)>9)
break;
}
}
J'espère avoir été suffisamment clair dans ma demande. Merci d'avance pour votre aide.