Page 1 sur 1

Liste déroulante qui incrémente une Textbox ??

Posté : 07 mai 2007, 15:51
par arkilon
Bonjour à tous,

Je travail actuellement sur un petit site de gestion de médicaments et je bloque depuis plusieurs jours sur un petit problème et c'est donc pour cela que je viens solliciter votre aide.

Je récupére dynamiquement les données d'une table Mysql dans une liste déroulante. En faite la liste contiens tous les noms des médicaments (nom_medic).

Le but serait que lorsqu'on séléctionne un médicament, un champ texte renvoi "oui" ou "non" données qui proviennent de la même table (frigo).

A priori selon mes recherches, la solution ce situe dans le JavaScript que je ne connais pas.

Auriez vous une petite piste à me soumettre, j'ai essayé plusieurs tutos mais sans résultats.

Merci par avance pour les pistes que vous allez pouvoir me donner.

Posté : 09 mai 2007, 13:20
par Ryle
Regarde dans la FAQ le topic concernant les listes dynamiques liées. Au lieu de mettre à jour une 2nd liste, il te suffit de mettre à jour ton champ texte :)

Posté : 11 mai 2007, 16:04
par arkilon
Merci Ryle pour ta réponse !

J'avais lu cette FAQ en effet donc je vais la relire et tenter de produire un résultat.

Je repasse vous voir si j'ai un soucis mais cela vous vous en doutiez !

Posté : 14 mai 2007, 09:55
par Invité
Bonjour à tous !

Ma requête est solutionné, je vous met içi ma solution.
<?php require_once('Connections/connec1_pharma.php'); ?>
<?php
mysql_select_db($database_connec1_pharma, $connec1_pharma);
$query_recup_mediclistder = "SELECT * FROM medicament";
$recup_mediclistder = mysql_query($query_recup_mediclistder, $connec1_pharma) or die(mysql_error());
$row_recup_mediclistder = mysql_fetch_assoc($recup_mediclistder);
$totalRows_recup_mediclistder = mysql_num_rows($recup_mediclistder);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans titre</title>
</head>

<body>
<form id="rcfrigo">
<select name="Pays" onchange="this.form.elements['frigo'].value=this.options[this.selectedIndex].value">
<?php
do {  
?>

<option value="<?php echo $row_recup_mediclistder['frigo']?>"><?php echo $row_recup_mediclistder['nommedic']?></option>
<?php
} while ($row_recup_mediclistder = mysql_fetch_assoc($recup_mediclistder));
  $rows = mysql_num_rows($recup_mediclistder);
  if($rows > 0) {
      mysql_data_seek($recup_mediclistder, 0);
	  $row_recup_mediclistder = mysql_fetch_assoc($recup_mediclistder);
  }
?>
</select>
<input type="textarea" id="frigo"></input>
</form>
</body>
</html>
<?php
mysql_free_result($recup_mediclistder);
?>
[/code]

Posté : 14 mai 2007, 10:41
par lem
Sympa d'y avoir pensé. :)

Posté : 14 mai 2007, 11:51
par arkilon
Re-bonjour j'ai clos le sujet un peu tôt, mon code fonctionne bien pour quelqu'un qui souhaite recopier la selection choisi par la liste dans une textbox ou autres.

Dans mon cas cela ne peux fonctionner car je travail à partir de table MySql/php et lors d'une requête d'incrémentation des données, le nom de médicament est remplacé par la valeur de la textbox.

Exemple :

Liste déroulante --> elle contient tous les nom de medicament (nummedic) issue de la table medicament.
Ma textbox --> doit faire apparaître Oui ou Non en fonction de si le médicament va au frigo ou non.

Avec le code que j'ai precedement donné mon champ nummedic prend comme valeur oui ou non ce qui est logique, je tente depuis quelques heures maintenant de trouver une solution mais en vain.

Voici mon dernier code :(je vous remets que la partie formulaire)
<form method="post" name="formuprescrire" action="<?php echo $editFormAction; ?>">
  <table align="center">
    <tr valign="baseline">
	  <td>ID Patient :</td>
	   <td><input readonly="" type="text" name="numpat" value="<?php echo $_GET['idpat']; ?>" size="10"></td>
      <td nowrap align="left"><span class="Style3">N° d'ordonnance :</span></td>
	  <td><input type="text" name="ordo_num" value="" size="5"></td>
	</tr>
	<tr>
	  <td>Choix médicament</td>
	  <td><select name="selectmedic" onchange="this.form.elements['ordo_frigo'].value=ordofrigo.options[selectedIndex].value">
	    <?php
do {  
?>
	    <option value="<?php echo $row_req_recupnommedicliste['nommedic']?>"><?php echo $row_req_recupnommedicliste['nommedic']?></option>
		<option id="testfrigo" value="<?php echo $row_req_recupnommedicliste['frigo']?>"></option>
	    <?php
} while ($row_req_recupnommedicliste = mysql_fetch_assoc($req_recupnommedicliste));
  $rows = mysql_num_rows($req_recupnommedicliste);
  if($rows > 0) {
      mysql_data_seek($req_recupnommedicliste, 0);
	  $row_req_recupnommedicliste = mysql_fetch_assoc($req_recupnommedicliste);
  }
?>
	  </select></td>
	  <td>Quantité :</td>
	  <td><td><input type="text" name="quantite" value="" size="4"></td></td>
    </tr>
	<tr valign="baseline">
	<td>Médicaments Frigo :</td>
	<td><input type="text" name="ordo_frigo" value="<?php echo $row_req_recupnommedicliste['frigo']?>" size="4"></td>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input type="submit" value="Valider la préscription"></td>
    </tr>
  </table>
  <input type="hidden" name="MM_insert" value="formuprescrire">
</form>
Alors j'ai essayé en rajoutant :
<option id="testfrigo" value="<?php echo $row_req_recupnommedicliste['frigo']?>"></option>
En me disant que je pourrais comme ca ne pas modifier le nom de mon médicament mais ca ne fonctionne pas.

VOila j'éspére trouver réponse à mes questions et merci d'avance.

Posté : 14 mai 2007, 12:16
par Ryle
Tu as plusieurs solution... tu peux par exemple concaténer dans le champ value de ton option les valeurs dont tu as besoin "nomMedoc|isFrigo" et aussi bien en javascript qu'en php spliter la chaine sur le séparateur (ici "|") pour connaitre le nom ou le fait de devoir le mettre au frigo.

Une autre solution plus propre serait peut être de définir ton propre attribut dans les options pour savoir s'il faut le mettre au congel ou pas :)
Quelque chose dans ce genre là :
<select name="..." onChange="alert(this.options[this.selectedIndex].getAttribute('frigo'));">
  <option value="xx" frigo="oui">xx</option>
  <option value="yy" frigo="non">yy</option>
</select>

Posté : 14 mai 2007, 12:33
par arkilon
Merci pour ta réponse.

Donc pour la deuxiéme solution je pense que ce n'est pas possible dans mon cas (je me trompe peut être).

Pourquoi ? Le but c'est que lorsque la personne saisie sa prescription elle choisisse son médicament dans la liste et que le champ de texte (non modifiable) prenne la valeur lié frigo (qui est dans la m^me table), de cette façon l'utilisateur n' à pas à vérifier si le medicament va bien au frigo ou non il le fera une et une seule fois à la création du médicament.

Concernant la premiére solution je dois être trop bête mais j ai presque rien compris ;(

Posté : 14 mai 2007, 13:42
par Cyrano
Attention avec les attributs persos dans les balises : le XHTML2 qui permet(tra) ceci n'est pas encore en vigueur et ce code est pour l'instant non conforme.

Piste de solution : mettre un champ caché avec le nom de ton produit alimenté avec un JavaScript sur l'évènement onchange de la liste <select>.

Posté : 14 mai 2007, 15:08
par arkilon
Re-bonjour.

Merci pour ta réponse donc je pense ne pas tarder à me pendre !

En effet j'avai pensé à faire un champ caché qui me récup le nom du médicament choisi dans la liste et j'ai donc fait ce code sur mon select :
<select name="selectmedic" onchange="this.form.elements['ordo_frigo'].value=this.options[this.selectedIndex].value" onChange="document.getElementById('testfrigo').selectedIndex">
Testfrigo =
<input type="text" id="testfrigo" value="<?php echo $row_req_recupnommedicliste['nommedic']?>"></input>

Donc évidement je me doute bien qu'on ne peux pas mettre 2 onchange dans le même select mais alors comment faire, faire un deuxiéme select mais caché qui prend la valeur du premier ? Mais dans ce cas forcement je retombe dans le même probléme et je peux en faire milliards comme ca :)

Comment faire pour qu il me recupére la valeur de la liste déroulante dans une textbox caché tout en concervant l'incrémentation de oui/non??

<Arkilon, part chercher une corde et un tabouret>

[/php]

Posté : 14 mai 2007, 16:28
par arkilon
J'ai tenté autre chose :

Code : Tout sélectionner

<script> function testfrigo() { i = document.formuprescrire.listmedic.selectedIndex; if (i == 0) return; nommedic = document.formuprescrire.listmedic.options[i].value; } </script>
Mais je sait pas comment intégrer ma fonction dans le code HTML pour que cela renseigne mon champ texte !

Code : Tout sélectionner

<input type="text" id="testfrigo" value="testfrigo()">

(Je sait que c'est une annerie mais je met tout de même)

Au secours je commence à vraiment sécher !

Posté : 14 mai 2007, 17:59
par Cyrano
Laisse de coté le tabouret et la corde (au moins pour un moment :gla:)

J'ai mentionné "gestionnaire d'évènement" et "balise <select>" : en clair, ça voudrait dire que dans ta balise <select>, tu pourrais avoir un évènement onchange="ma_fonction(un_paramètre)"
Le paramètre, c'est l'option sélectionnée. La fonction récupère ce paramètre et va alimenter la valeur du champ caché.

Voilà, je te mets pas de code, d'abord faute de temps et ensuite pour te laisser le découvrir en fait toi-même, ce sera plus formateur pour toi ;)

Posté : 15 mai 2007, 10:20
par arkilon
Merci pour cet eclaircissemnt !

Je comprend en effet un petit peu mieux, je vais allé manger du javascript et tenter de décortiquer tout cela.
Voilà, je te mets pas de code, d'abord faute de temps et ensuite pour te laisser le découvrir en fait toi-même, ce sera plus formateur pour toi
En effet, c'est à moi de proposer du code et non l'inverse !

Merci encore.

<Arkilon, plie soigneusement la corde, la range dans le tiroir son bureau et s'assoie sur le tabouret>

Posté : 29 mai 2007, 12:26
par arkilon
Bonjour à tous !

Je viens enfin de me remettre dans le codage et j'ai finalement réussi à résoudre ma demande. Et je dois bien l'avouer c'était vraiment tout simple !

Fonction Javascript :
<script language="javascript">
function frigouinon()
{
document.formuprescrire.ordo_frigo.value = document.formuprescrire.selectmedic.options[document.formuprescrire.selectmedic.selectedIndex].value
document.formuprescrire.recupmedic.value = document.formuprescrire.selectmedic.options[document.formuprescrire.selectmedic.selectedIndex].text
}
</script>
J'aurai pu alléger ma fonction en utilisant des "this.form" mais étant débutant ca me permet de garder plus de visibilité.

La partie PHP / Html :

Je ne met içi que le formulaire.
<form method="post" name="formuprescrire" action="<?php echo $editFormAction; ?>">
<p align="center">La prescription ce fait à la date du jour soit : <input type="text" name="dateprescri" value="<?php echo date("d/m/Y"); ?>" size="10"> vous pouvez toutefois modifier cette date !</p>
  <table align="center">
    <tr valign="baseline">
	  <td>ID Patient :</td>
	   <td><input readonly="" type="text" name="numpat" value="<?php echo $_GET['idpat']; ?>" size="10"></td>
      <td nowrap align="left"><span class="Style3">N° d'ordonnance :</span></td>
	  <td><input type="text" name="ordo_num" value="" size="5"></td>
	</tr>
	<tr>
	  <td>Choix médicament</td>
	  <td><select id="selectmedic" onchange="frigouinon()">
	    <?php
do {  
?>
	    <option value="<?php echo $row_req_recupnommedicliste['frigo']?>"><?php echo $row_req_recupnommedicliste['nommedic']?></option>
	    <?php
} while ($row_req_recupnommedicliste = mysql_fetch_assoc($req_recupnommedicliste));
  $rows = mysql_num_rows($req_recupnommedicliste);
  if($rows > 0) {
      mysql_data_seek($req_recupnommedicliste, 0);
	  $row_req_recupnommedicliste = mysql_fetch_assoc($req_recupnommedicliste);
  }
?>
	  </select></td>
	  <td>Quantité :</td>
	  <td><input type="text" name="quantite" value="" size="4"></td>
    </tr>
	<td><input type="hidden" name="recupmedic" value="<?php echo $row_req_recupnommedicliste['nommedic']?>" ></td>
	<tr valign="baseline">
	<td>Médicaments Frigo :</td>
	<td><input readonly="" type="text" name="ordo_frigo" value="<?php echo $row_req_recupnommedicliste['frigo']?>" size="4"></td>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input type="submit" value="Valider la préscription"></td>
    </tr>
  </table>
  <input type="hidden" name="MM_insert" value="formuprescrire">
</form>
Si vous avez des remarques/suggestions n'hésitez pas !

Et merci encore pour les pistes que j'ai pu avoir içi.