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

Eléphanteau du PHP | 37 Messages

07 mai 2007, 15:51

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 mai 2007, 13:20

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 37 Messages

11 mai 2007, 16:04

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 !

Invité
Invité n'ayant pas de compte PHPfrance

14 mai 2007, 09:55

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]

lem
Eléphant du PHP | 108 Messages

14 mai 2007, 10:41

Sympa d'y avoir pensé. :)
Lem.

Eléphanteau du PHP | 37 Messages

14 mai 2007, 11:51

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 mai 2007, 12:16

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>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 37 Messages

14 mai 2007, 12:33

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 ;(

Mammouth du PHP | 19672 Messages

14 mai 2007, 13:42

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>.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 37 Messages

14 mai 2007, 15:08

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]

Eléphanteau du PHP | 37 Messages

14 mai 2007, 16:28

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 !

Mammouth du PHP | 19672 Messages

14 mai 2007, 17:59

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 ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 37 Messages

15 mai 2007, 10:20

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>

Eléphanteau du PHP | 37 Messages

29 mai 2007, 12:26

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.