Page 1 sur 1

Saisie automatique des champs

Posté : 15 févr. 2012, 16:57
par ladinho58
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 :
<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.

Re: Saisie automatique des champs

Posté : 15 févr. 2012, 17:35
par moogli
Salut,

Utilise json_encode + echo pour fournir une donnée exploitable avec js qui va décoder le tout pour que tu ai un tableau en js et ainsi générer ton près remplissage.

@+

Re: Saisie automatique des champs

Posté : 16 févr. 2012, 15:02
par ladinho58
J'utilise bien json mais le résultat est le même :

Création de ma fonction array_to_json($array)
$conn = mysql_connect(BDD_HOST,BDD_USER,BDD_PASSWD) or die('Impossible de se connecter à la base de données : ' . mysql_error());
mysql_select_db(BDD_NAME,$conn) or die('Impossible de sélectionner la base mydbname : ' . mysql_error());
mysql_query("SET NAMES 'utf8'");

$q = strtolower($_GET["term"]);
if (!$q) return;

if(isset($_GET['search']))
	$search = $_GET['search'];
else $search ="";
if(isset($_GET['id'])){
	$id_soc = $_GET['id'];
	$searchSoc = " id_societe = '".$id_soc."' AND ";
}
else {
	$id_soc ="";
	$searchSoc = "";
}


function array_to_json( $array ){

    if( !is_array( $array ) ){
        return false;
    }

    $associative = count( array_diff( array_keys($array), array_keys( array_keys( $array )) ));
    if( $associative ){

        $construct = array();
        foreach( $array as $key => $value ){

            // We first copy each key/value pair into a staging array,
            // formatting each key and value properly as we go.

            // Format the key:
            if( is_numeric($key) ){
                $key = "key_$key";
            }
            $key = "\"".addslashes($key)."\"";

            // Format the value:
            if( is_array( $value )){
                $value = array_to_json( $value );
            } else if( !is_numeric( $value ) || is_string( $value ) ){
                $value = "\"".addslashes($value)."\"";
            }

            // Add to staging array:
            $construct[] = "$key: $value";
        }

        // Then we collapse the staging array into the JSON form:
        $result = "{ " . implode( ", ", $construct ) . " }";

    } else { // If the array is a vector (not associative):

        $construct = array();
        foreach( $array as $value ){

            // Format the value:
            if( is_array( $value )){
                $value = array_to_json( $value );
            } else if( !is_numeric( $value ) || is_string( $value ) ){
                $value = "'".addslashes($value)."'";
            }

            // Add to staging array:
            $construct[] = $value;
        }

        // Then we collapse the staging array into the JSON form:
        $result = "[ " . implode( ", ", $construct ) . " ]";
    }

    return $result;
}
Création de ma requête + affectation dans un tableau
$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;
	}

echo de mes résultats :
echo array_to_json($resultat);
Rien de concluant, j'ai une liste qui se déroule quand je tape les premières lettres, mais quand je clique sur une des choses listée, rien ne se passe..