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
lezonard - 4 nov. 2008 à 11:40
A voir également:
- Remplir des champs à partir dune liste déroulante
- Liste déroulante excel - Guide
- Recherche a partir dune photo - Guide
- Liste déroulante en cascade - Guide
- Organigramme a remplir word - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
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
24 juin 2008 à 11:37
Bonjour,
Tu as quelques erreurs:
- au lieu de <? echo $liste_tiers?> prend l'habitude de mettre
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:
et je ne vois pas les balises <form </form>
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>
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
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
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
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
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
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
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
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
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
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
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!
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!
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
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
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
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
28 juin 2008 à 17:16
allez tiens je te donnes une partie de la solution, 3 fichiers:
un fichier page_saisie.html:
un petit fichier config.php:
et un fichier rep_PhpAjax.php:
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
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
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
4 nov. 2008 à 11:40
Genial! vraiment super, je cherchais, j'ai trouvé encore merci!
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
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
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
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
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 ^^
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 ^^
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
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!
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!
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
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
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
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
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:
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);
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);
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
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
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
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
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
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
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
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
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
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
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
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="+....
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
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
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
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
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
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
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
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!!!!
Merci d avance!!!!
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
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.
?
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.
?