Remplir des champs à partir dune liste déroulante

Fermé
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 - 24 juin 2008 à 10:47
 lezonard - 4 nov. 2008 à 11:40
Bonjour tout le monde!

J'ai un problème qui m'embète! Alors en fait j'ai une page d'ajout de commande dans laquelle le nom de l'expéditeur peut se choisir a partir d'une liste déroulante ou être tapé. Je veux qu'en sélectionnant un nom dans ma liste déroulante, ca remplisse automatiquement les champs adresses, ville, code postal, pays.. Et je n'y arrive pas!

Voila mes bouts de code :

//Construction de ma liste déroulante


$liste_tiers = "<select name='liste_tiers' onChange=\"verif_tiers();\" >";
$liste_tiers .= "<option value='vide'></option>";
$liste_tiers .= "<option value='autre'>Autre_choix</option>";
$i=0;

//on récupère toutes les infos des tiers

while ($lignetbl=odbc_fetch_array($result)){
$liste_tiers .= "<option value='" .$i. "'>" .$lignetbl["RSTI"]. "</option>";
$no_tiers[$i] = $lignebl['NOTI']; //on stoque les numéros de tiers
$ad_1[$i] = $lignebl['ADTI1'];//adresse ligne 1
$ad_2[$i] = $lignebl['ADTI2'];//adresse ligne 2
$code_postal[$i] = $lignebl['COPOST'];//code postal
$ville[$i] = $lignebl['LBVI'];//ville
$code_pays[$i] = $lignebl['COPY'];//code pays
$code_ville[$i] = $lignebl['COVI'];//code ville
$i = $i+1;
}
$liste_tiers .= "</select>";



Code : HTML

//Affichage

<tr><td> Nom <font color="#FF0000" size="4"><strong>*</strong></font> </td><td>
<? echo $liste_tiers?>
<input type='button' name='valid_exp' value='OK !' onclick='remplir_champ_exp('$indice')'> //mon $indice serait le numéro du tiers, mais je ne sais pas comment faire..
<input type='text' size=40 name='autre_expe' value="<?=$nom_exp?>" onFocus="if (this.value=='nom_exp') {this.value=''}" disabled>
</td></tr>
<tr><td> Adresse 1</td><td>
<input type='text' size=40 name='adresse1_exp' value="<?=$adresse1_exp?>">
</td></tr>
<tr><td> Adresse 2</td><td>
<input type='text' size=40 name='adresse2_exp' value="<?=$adresse2_exp?>">
</td></tr>
<tr><td> Ville <font color="#FF0000" size="4"><strong>*</strong></font></td><td>
<input type='text' size=40 name='ville_exp' value="<?=$ville_exp?>">
</td></tr>
<tr><td> Pays <font color="#FF0000" size="4"><strong>*</strong></font></td><td>
<?=$pays_expa?> </td></tr>




//la fonction remplir_champ_exp ressemble a ca!

function remplir_champ_exp($pos){
//document.forms['form_ajout'].elements['adresse1_exp'].value = $ad_1[$pos];
$adresse2_exp = $ad_2[$j];
$ville_exp = $ville[$j];
$pays_expa = $code_pays[$j];
}

La ligne commentée fais bugué. En fait mon problème c'est que je ne sais pas trop comment récupérer le numéro du tiers et donc récupérer toutes ses infos grace a ce numéro. Il faudrait que chaque fois que je clique sur OK a coté de ma liste, ca change toutes les infos affichées, c'est pourquoi je commencais a me lancer dans le JS ! Mais là je vois pas!

Merci d avance!

Laeticha
A voir également:

13 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 juin 2008 à 11:37
Bonjour,

Tu as quelques erreurs:

- au lieu de <? echo $liste_tiers?> prend l'habitude de mettre
<?php echo $liste_tiers?>


et évites les <?= mets <?php echo

c'est mon avis perso et ça évite bien des déconvenues quand on tranfere sur un serveur qui n'est pas configuré pour accepter ça

ensuite:

onclick='remplir_champ_exp('$indice')' tu mets des ' dans une chaine qui commence et finit par '

il faut:

onclick="remplir_champ_exp('$indice')"


et je ne vois pas les balises <form </form>
4
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 5
24 juin 2008 à 15:45
bonjour,

oui voila c'est ca. Sur ma page ajout.php j ai le code qui me permet de créer le select et au passage de stocker dans des tableaux toutes les infos qui correspondent (adresse, ville, code postal ..). Sur ma page ajout.html j ai tout mon formulaire. Et voila j aimerai qu en cliquant sur OK ca remplisse les champs correspondant au nom sélectionné. Je n'arrive pas a récupérer le numéro du tiers et a retrouvé ses infos en ne rechargeant pas la page complètement. Donc j aimerai que mon bouton ok lance une fonction javascript capable de remplir les champs. mais je me perd dans les paramètres et je sais pas comment récupérer ce que je veux!

J espère que je suis assez claire :/

Merki
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 juin 2008 à 18:28
Oui je vois, mais le PHP est executé coté serveur, c'est à dire avant que ta page ne soit envoyée au navigateur, donc toutes tes variables tableau $a etc.. ne sont pas stockées dans ta page dans le navigateur et donc pas exploitables en javascript.

2 solutions:

1- si tu n'as pas beaucoup de lignes <options et pas trop de valeurs pour chaque ligne
dans le script php tu cree des array Javascript à partir de tes array php, donc memo dans la page envoyée au navigateur
par une fonction Javascript (qui s'éxécute dans le navigateur) tu ecris dans tes input en fonction de l'element selectionné dans la liste les valeurs memo dans les array javascript

2- par une fonctionalité de javascript qui est Ajax,
dans le script php tu cree seulement la liste avec $i et le nom pour chaque option (sans les autres valeurs)
dès la sélection d'un élement de la liste, Ajax appele un autre script php en lui passant quel est l'element selectionné
ce script va lire dans la BDD les valeurs correspondantes et les renvoie (sans rechargement de page)
la fonction Ajax les ecrit dans la page
0
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 5
25 juin 2008 à 08:59
bonjour,

merci pour ton explication. Je connais pas du tout le fonctionnement de Ajax et a priori il n'y aura jamais beaucoup d entrées dans ma liste déroulante. Je vais donc opter pour la premiere solution que tu as proposer.
Je viens d aller jeter un petit coup d oeil sur le net sur les array Javascript, mais j avoue que je ne sais pas trop comment il va falloir que je fasse.
Il va falloir que je modifie ici en fait dans ma boucle :

$liste_tiers = "<select name='liste_tiers' onChange=\"verif_tiers();\" >";
$liste_tiers .= "<option value='vide'></option>";
$liste_tiers .= "<option value='autre'>Autre_choix</option>";
$i=0;

//on récupère toutes les infos des tiers

while ($lignetbl=odbc_fetch_array($result)){
$liste_tiers .= "<option value='" .$i. "'>" .$lignetbl["RSTI"]. "</option>";
$no_tiers[$i] = $lignebl['NOTI']; //on stoque les numéros de tiers
$ad_1[$i] = $lignebl['ADTI1'];//adresse ligne 1
$ad_2[$i] = $lignebl['ADTI2'];//adresse ligne 2
$code_postal[$i] = $lignebl['COPOST'];//code postal
$ville[$i] = $lignebl['LBVI'];//ville
$code_pays[$i] = $lignebl['COPY'];//code pays
$code_ville[$i] = $lignebl['COVI'];//code ville
$i = $i+1;
}
$liste_tiers .= "</select>";

là sont crées des tableaux(du php), et il faut que je crée des tableaux javascript alors, des especes de copies non ?
j ai vu que pour déclarer un array apparemment c'est mon_tab = new array() et pour ajouter il y la méthode push

peut tu me donner un coup de main sur la syntaxe, je vois pas comment faire pour copier le contenu de mes tableaux php dans mes tableaux JS, et je ne pense pas que je puisse le faire dans ma boucle, c'est a dire ajouter la variable dans le tableau php et dans le tableau javascript

Merci de ton aide en tout cas c'est cool
0
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 5
25 juin 2008 à 10:34
re,

En fait je viens il y a un petit contre ordre. Il y aura normalement beaucoup de nom dans la liste déroulante, et il sera inutile pour l utilisateur de disposer d une liste les contenant tous, étant donné qu il sait de qui il veut un produit ou a qui il veut l envoyer. Il faut donc que pour le nom je propose une zone de texte ou on peut entrer le début du nom recherché et un bouton rechercher. je voudrais que sur un onclick ca effectue la requete de recherche et que ca propose les résultat sous forme d une liste apparaissant dans une fenetre (un pop up!)
c'est surtout la fonction sur le onclick qui me pose probleme. ca sera forcément une fonction javascript, mais il faut récupérer le contenu de la zone de texte et faire la requete sql, stocker les données pour tout les résultats de la liste et afficher dans les champs adresses etc les donnees correspondant au nom sélectionné (quand on clique dessus).

Sinon j ai aussi la possibilité de faire cette requete par l intermédiaire d une page valide.php qui s executera a la validation du formlulaire par le bouton submit...mais c'est moins bien!

Qu en pensez vous ?!

Voili voilou

a plus tard!
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
27 juin 2008 à 23:09
Bon c'est Ajax qu'il te faut

Dans ta page tu mets ton <input id='id_input' ..... dans lequel la partie du nom serra saisie

un petit bouton OK à côté et qd ce bouton est clické ça lance une fonction javascript/ajax

cette fonction fait:
- elle lit ce qui a été saisi dans l'input par document.getElementById('id_input').value
- elle cree une requette Ajax qui appelle un script php sur le serveur en lui pasant la valeur lue


le script php reçoit cette info et fait la requette SQL pour aller chercher les composants de ta liste
il répond en générant la liste:

<select...
<option ..
</select>


lorsque la fonction reçoit ça elle va l'écrire à l'endroit de ta page ou tu auras mis un <div id='liste_a_ecrire'></div>

par document.getElementById('liste_a_ecrire').innerHTML=texte recu du script

Ca c'est le principe en gros,

Vas voir sur Google Request AJAX
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 juin 2008 à 17:16
allez tiens je te donnes une partie de la solution, 3 fichiers:

un fichier page_saisie.html:

<html>
<head>
<!--  Script de liste deroulante  avec appel  par AJAX, (evite le rechargement de la page) -->
<script language="Javascript"type="text/JavaScript">
// Requette AJAX
function makeRequest(url,id_lire,id_ecrire){
	var http_request = false;
		//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Abandon :( Impossible de créer une instance XMLHTTP');
            return false;
        }
        http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse
		// lancement de la requete
		http_request.open('POST', url, true);
		//changer le type MIME de la requête pour envoyer des données avec la méthode POST ,  !!!! cette ligne doit etre absolument apres http_request.open('POST'....
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
               // lecture valeur saisie
		obj=document.getElementById(id_lire);
		data="val_saisie="+obj.value;
                //envoie de la valeur au script php
        http_request.send(data);
}

function traitementReponse(http_request,id_ecrire) {
	var affich="";
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
					// cas avec reponse de PHP en mode texte:
			//chargement des elements reçus dans la liste
			var affich_list=http_request.responseText;
				obj = document.getElementById(id_ecrire); 
				//on ecrit la liste dans le div correspondant
                obj.innerHTML = affich_list;
		} 
		else {
                alert('Un problème est survenu avec la requête.');
        }
    }
}
</script>
</head>

<body>
<form name="test1" method="post" action="la_suite.php"  >
	<div id="id_recherche">Rechercher:<br>
	<input type="texte" name="saisie_recherche" id="saisie_recherche" value="" />
	<input type="button" name="rechercher" value="Rechercher" onClick="makeRequest('rep_PhpAjax.php','saisie_recherche','id_liste')"/>
	<!-- on appelle la fonction Ajax en lui passant les arguments: script a appeler, où lire, où ecrire -->
		
	</div>
	<br><br>
	
	<div id="id_liste">
	<!-- ici sera charge la reponse mode texte de PHP à la request AJAX -->
	</div>
</form>
</body>
</html>


un petit fichier config.php:

<?php
$host=
$Login=

etc...
?>


et un fichier rep_PhpAjax.php:

<?php
// script PHP interrogation Base de donnees pour reponse a la requette AJAX
include ("config.php");//donnees de connexion host, login, password, nom de la table ($Table), nom du champ concerné ($champ)
//recup de la valeur passée lors de l'appel de ce script par Ajax:
$valeur_saisie=$_POST['val_saisie'];
// Connexion a la base de donnees  
	$AccesBase = mysql_connect($host,$Login,$Pass);
	mysql_select_db($DB,$AccesBase);
	//requette
	$QuestionBase = "SELECT * FROM $Table  WHERE ".$champ." = '".$valeur_saisie."' " ;
	//si tu veux les noms qui commencent par la valeur saisie tu fais la requette:
		//$QuestionBase = "SELECT * FROM $Table  WHERE ".$champ." LIKE '".$valeur_saisie."%' " ;

	$result_recherche=mysql_db_query($DB, $QuestionBase) or die (mysql_error());
// construction de la liste deroulante
$aff=="";
$aff=$aff."Resultat de la recherche:<br>
		<select name='niv1' id='cont_liste' >
		<option>-- Choisissez --</option>";
		while ($row=mysql_fetch_assoc($result_recherche)){
			$aff.="<option value=\"$row[ton champ]\">$row[ton champ]</option>"; //a adapter
		}
	$aff=$aff."</select><br><br>";
// envoi reponse Php a Ajax	
	echo $aff;
?>


Attention les erreurs éventuelles de ce dernier script ne s'affichent pas ! à cause de Ajax
pour le debugger, il te faut mettre une valeur provisoire pour $valeur_saisie à la place de $_POST....
et lancer le script directement dans ton navigateur
0
lezonard > Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017
4 nov. 2008 à 11:40
Genial! vraiment super, je cherchais, j'ai trouvé encore merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 5
30 juin 2008 à 08:48
bonjour,

je viens de revenir au boulot donc j ai pas regarder du week end!
merci pour tes précisions c'est vraiment sympa. Je vais tester ca et je reviendrai te dire comment ca se passe. Ajax ca fait peur ^^ (en tout cas came fait peur j ai jamais fait ^^ )

Bonne journée, a plus tard
laetitia
0
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 5
30 juin 2008 à 12:10
Re bonjour,

merci beaucoup pour ton code !
J'ai un probleme en fait voila ce que j ai dans mon code :

AJOUT.HTML

<html>
<head>
<!-- script de liste déroulante avec appele par AJAX pour éviter le rechergament de la page) -->
<script language="Javascript" type="text/JavaScript">
<!-- requete AJAX -->
function makeRequest(url,id_lire,id_ecrire){
var http_request = false;
if (window.XMLHttpRequest){ //Mozilla, Safari....
http_request = new XMLHttpRequest();
if(http_request.overrideMimeType){
http_request.overrideMimeType('text/xml');
}
}
else if(window.ActiveXObject){ // Internet explorer
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if(!http_request){
alert('Abandon :( Impossible de créer une instanceXMLHTTP');
return false;
}
http_request.onreadystatechange = function() {
traitementReponse(http_request, id_ecrire); // Affectation de la fonction appelée quand on recevra la réponse
}
//lancement de la requete
http_request.open('POST', url, true);
http_request.setRequestHeader('content-Type', 'application/x-www-form-urlencoded');
//lecture de la valeur saisie
obj = document.getElementById(id_lire);
data = "val_saisie="+obj.value;
//envoi de la valeur au script php
http_request.send(data);
}
function traitementReponse(http_request, id_ecrire){
var affich = "";
alert('http request ready state' + http_request.readyState);
if(http_request.readyState == 4){
alert('status ' + http_request.status);
if(http_request.status == 200) {
alert('le status est 200');
var affich_list = http_request.responseText;
obj = document.getElementById(id_ecrire);
// on écrit la l iste dans le DIV correspondant
obj.innerHTML = affich_list;
}
else {
alert('un problème est survenu avec la requete');
}
}
}
</script>
</head>

<body>
<center><table width=90%>
<form method='POST' name='form_ajout' action='/php/valide.php' action="javascript:alert('commande ajoutée')" onSubmit="return verifform(this.form)" >


<td><table></td>
<div id="id_recherche_expe">EXPEDITEUR :<br>
Nom <font color="#FF0000" size="4"><strong>*</strong></font> </td><td>
<input type='text' size='40' name='nom_exp' id='nom_exp' value="<?=$nom_exp?>" onkeypress="compter(this.form,'nom_exp',35)" onfocus="focusRecherche(this)">
<input type='button' name='rech_exp' value="Rechercher" onClick="makeRequest('http://172.30.14.5:82/php/valid_tiers.php','nom_exp', 'id_liste_exp')">
<!-- on appelle la fonction Ajax en lui passant comme p arametres : script à appeler, où lire, où écrire -->
</div>
<br><br>
<div id="id_liste_exp">
<!-- ici sera chargée la réponse mode texte de php à la requete AJAX -->
</div><br>

<tr><td> Adresse 1</td><td>
<input type='text' size=40 name='adresse1_exp' value="<?=$adresse1_exp?>" >
</td></tr>
<tr><td> Adresse 2</td><td>
<input type='text' size=40 name='adresse2_exp' value="<?=$adresse2_exp?>">
</td></tr>
<tr><td> Ville <font color="#FF0000" size="4"><strong>*</strong></font></td><td>
<input type='text' size=40 name='ville_exp' value="<?=$ville_exp?>">
</td></tr>
<tr><td> Pays <font color="#FF0000" size="4"><strong>*</strong></font></td><td>
<?=$pays_expa?> </td></tr>


</form>
</table>
</body>
</html>


Verif tiers. php

<?php
include_once("lib/authentification.php");
session_start();
include_once("lib/config.php");
include_once("lib/functions.php");
?>

<script src="lib/libJS.php" type="text/javascript"></script>

<?
$nopo = $_POST['nopo'];
if (empty($nopo)) {
$nopo = 0;
}
$nocl = $_POST['CLNOCL'];
// on récupère la valeur passée lors de l appel de ce script par AJAX
$valeur_saisie = $_POST['nom_exp'];

//Requete
$cmd1 = "SELECT RF.NOCL, RF.NOTI, TI.MORH, TI.RSTI, TI.ADTI1, TI.ADTI2, TI.COPOST, TI.LBVI, TI.COPY, TI.COVI
FROM TESTCOM.TI as TI INNER JOIN TESTCOM.CLRFTI as RF
ON RF.NOTI=TI.NOTI
WHERE RF.NOCL='".$nocl."' AND TI.MORH LIKE '".$valeur_saisie."%' ORDER BY 1, 3, 2";

$result = odbc_exec($db,$cmd1) or die("<br>" . $cmd1 . "<br>Erreur ".odbc_error()." : ".odbc_errormsg())

//construction de la liste déroulante
$aff = "";
$aff = $aff . "<select name='liste_tiers' id='liste_tiers' >
<option> -- Choisissez -- </option>";
while($row = odbc_fetch_array($result)){
$aff .= "<option value=\"$row['RSTI']\">$row['RSTI']</option>";
}
$aff .= "</select><br><br>";

//envoi de la réponse php à Ajax
echo $aff;

et en fait mon http_requet.status est égal a 500 donc ca me met toujours le message 'un problème est survenu avec la requete'

J ai lu sur un forum que ca ne fonctionnait pas en local. Je ne suis pas en local en fait le serveur tourne sur le réseau de la boite.. ma page se lance comme ca : http://adresse_ip/php/ajout.php

Je ne sais pas trop de quoi ce peut venir.. un petit conseil ou une petite explication ? ^^

Merci d avance!!
et bon appétit ^^
0
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 5
1 juil. 2008 à 09:29
bonjour tout le monde...
pas d'ame charitable aujourd hui ???!
Je suis en galère!! je dirais même que je pédale dans la semoule !
je comprend pas pourquoi mon status passe pas a 200...de même je pige pas bien ce que fait http_request.responseText ?

Merci d avance!
0
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 5
2 juil. 2008 à 14:07
bonjour,

s'il vous plait personne aurait une petite idée! ?
Je viens d'essayer de referaire ca avec jquery mais je n'y arrive pas vraiment... je suis sur qu avec le http_request je ne suis pas loin, mais ca ne fonctionne pas..

Merci d'avance pour ceux qui répondront!

Laetitia
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
3 juil. 2008 à 16:57
Bonjour,

Dans l'appel de Ajax tu mets:

onClick="makeRequest('http://172.30.14.5:82/php/valid_tiers.php',.....

déja tu devrais mettre une adresse relative pour ton url (relative au dossier qui contient le script en cours) par exemple:

onClick="makeRequest('php/valid_tiers.php',.....


ensuite quel est le nom exact du script php appelé par Ajax, car ci dessus tu mets valid_tiers.php et tu nous donnes le code de Verif tiers.php ????

ensuite dans ce scrip tu mets:
<?
$nopo = $_POST['nopo'];
if (empty($nopo)) {
$nopo = 0;
}
$nocl = $_POST['CLNOCL'];
// on récupère la valeur passée lors de l appel de ce script par AJAX
$valeur_saisie = $_POST['nom_exp'];


à quoi cela correspond ?

Ajax n'envoie à ce script que 'val_saisie'

cf:

//lecture de la valeur saisie
obj = document.getElementById(id_lire);
data = "val_saisie="+obj.value;
//envoi de la valeur au script php
http_request.send(data);
0
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 5
4 juil. 2008 à 09:15
Bonjour!

Merci de répondre a toutes mes questions et de pas me laisser dans la galère ^^

je crois que je me mélange un peu les pinceaux en ce qui concerne ce que je dois passer en paramètres!


Mon fichier ajout.html (du dossier html) contient toute la partie Ajax (makeRequest et traitement réponse)ainsi que mon formulaire.
Le bouton submit du formulaire pointe vers valide.php (qui n'est donc pas dans le dossier html, cette page va effectuer l'ajout dans la base de données).
Le bouton ok pour valider le nom dans mon formulaire doit donc avoir ce onClick=makeRequest( '/php/valid_tiers.php', 'nom_exp', 'id_liste_exp') ?? (désolée pour l'erreur dans mon message précédent, il s'agit bien de valid_tiers.php, c'était juste dans mon code je me suis trompée en écrivant mon message!)

nom_exp est l'id de mon input text
id_liste_exp est l'id du div où je veut qu'apparaisse ma liste de résultat



dans valid_tiers.php j'ai ma requete qui construit ma liste déroulante:
$nocl = $_POST['CLNOCL']; // récupère le numéro du client connecté, j'en ai besoin pour la requete, il est passé en type='hidden' dans mon formulaire, je ne l'avais pas précisé c'est vrai ^^

$valeur_saisie = $_POST['nom_exp']; // cette ligne est normale non ? l'id du text ou j'écris le nom a recherché est nom_exp


J'ai peur de pas avoir bien compris comment ca fonctionne, où tout du moins où je dois passer tel ou tel paramètres :/ t'en penses quoi ?

Merci d'avance,

Laetitia
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 juil. 2008 à 14:09
Salut,

oui tu n'as pas saisi le principe de Ajax

la fonction Make Request Ajax appele le script valid_tiers.php de façon totalement indépendante d'un appel fait par le bouton Submit du formulaire, donc les champs cachés et le champ input n'est pas posté

seules les valeurs "data" sont envoyées au script php

tu as deux choses distinctes:
- le bouton ok qui lance la requette Ajax qui appele le script valid_tiers.php en arrière plan (sans rechargement de la page) et lui envoie les valeurs précisées dans data=........ de la fonction
- le bouton Submit qui envoie le formulaire et tous ses éléments input au script précisé dans action="....." et la il y a rechargement de la page

donc si tu as besoin de $nocl il faut que tu l'ai a qq part dans le formulaire la fonction viendra le lire

et $valeur_saisie = $_POST['nom_exp']; // cette ligne est normale non ? l'id du text ou j'écris le nom a recherché est nom_exp


compte tenu des précisions plus haut ce n'est pas l'input 'nom_exp' qui est envoyé mais le 'val_saisie'

donc il faut:

$valeur_saisie = $_POST['val_saisie'];

Ajax est un peut compliqué a comprendre mais c'est très puisant

Donc essaye de compléter le fichier .html pour $nocl

Tu peux m'envoyer par mail en MP si tu veux ce sera plus pratique.

@lain
0
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 5
4 juil. 2008 à 14:59
Re,

Effectivement j'étais un peu à la ramasse ^^
Merci beaucoup pour tes explications je vais m'y mettre et essayer de voir ca! Je t'écris pour te tenir au courant.
encore merci.

juste une question : le $valeur_saisie = $_POST['val_saisie'];

le val_saisie du post vient de là : data = "val_saisie="+obj.value; ??? je crois que je n'avais pas compris ca non plus !

Laetitia
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 juil. 2008 à 15:07
Oui c'est ça

et si besoin on peut passer d'autres valeurs par cette ligne en metant & un peu comme qd on passe des valeurs par l'URL

data = "val_saisie="+obj.value+"&val2="+....
0
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 5
9 juil. 2008 à 09:56
salut!

Je t'ai envoyé un MP alain_42 ;)

Sinon j'ai juste une petite question ! Je n'arrive pas à faire afficher le résultat de mon script php (une liste déroulante stockée dans la variable $aff) dans mon div. Jen 'ai pas trop compris comment mon $aff arrive jusqu a mon div..avec le innerHTML a priori mais bon je nage un peu. vous pouvez retrouver mon code plus haut...

Merci d'avance,

Laetitia
0
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 5
24 juin 2008 à 11:41
re bonjour,

Je vais corriger ce genre de petites erreurs. Tu ne vois pas les balises form car je n'ai mis qu une partie du code (sinon tu n'aurais pas eu le courage de le regarder!) car c'est long. ce que j'ai a modifier est ce que j'ai mis comme code.
Je galère a fond !!! il faut que j arrive a faire fonctionner ca ^^
Mais merci quand même je vais faire attention a la syntaxe!

a plus, laet
-1
laetlastar Messages postés 58 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 15 mai 2011 5
24 juin 2008 à 13:37
j'ai toujours mon probleme de récupération de données...quelqu un sait comment il faut s y prendre pour faire ca proprement?

Merci d avance!!!!
-1
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 juin 2008 à 15:29
Il te reste à régler des problème de principe maintenant

Je suppose que ta page va s'afficher une première fois avec la liste déroulante et tu veux que si une des option est sélectionnée, et un bouton OK cliqué la page se recharge avec les champs <input remplis d'après la base de donnée.

?
0