Additionner les valeurs d'une liste déroulante multiple

Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 22 août 2019 à 22:19
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 26 août 2019 à 23:15
Bonjour,
Ce que j'ai actuellement.
J'ai un formulaire dynamique pour la saisie d'une adhésion avec une liste déroulante à choix multiple issue de ma BDD. Cette liste déroulante il y a 5 items, lorsque je sélectionne un item cela me retourne dans un input la somme correspondante, son montant est alors enregistré dans ma BDD.
Ce que je souhaiterai.
Pouvoir sélectionner plusieurs choix et de ce fait les sommes correspondantes s’additionneraient dans l'input en question et le montant total sera alors enregistré en BDD.
Merci sincèrement pour votre aide.
<script language="javascript" type="text/javascript">
$LDpaie->onchange = "payer()";
$instr = "var cotis = new Array('0'";
$requete  = "SELECT montant FROM cdc_paiements ORDER BY idpaie";
$resultat = executeQuery($requete,$bdd);
while ($donnees = $resultat->fetch()) { $instr .= ", '".$donnees->montant."'"; }
$instr .= ")";
echo $instr;

function payer() {
	var idpaie;
	idpaie = document.adh.idpaie.options[document.adh.idpaie.options.selectedIndex].value;
	document.adh.montant.value = cotis[idpaie];
}
</script>

Voici ma table des enregistrements, reste encore une question en suspense l'enregistrement des IDs des paiements.
A voir également:

7 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
22 août 2019 à 22:38
Bonjour,

Ton code semble mélanger du php et du JS en même temps....
Ce n'est pas possible.
Soit tu ne nous a pas tout montré.... soit il manque des balises de code...

Il faudrait également que tu nous précises si tu veux que cette "addition" se fasse dans le code PHP (avant de faire l'insertion en base) .. ou bien que le calcul se fasse lors du "click" sur les différents montants (donc côté javascript )

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
22 août 2019 à 23:36
Bonjour,
Oui effectivement il manque les balises <?php
Le calcul il faudrait qu'il se fasse lors du click sur les différents items côté javascript.
Par exemple je sélectionne un premier item qui a pour montant 10
Alors le montant affiché sera 10
Je sélectionne un deuxième item qui a pour montant 100
Alors le montant affiché sera 110.
Je vous remercie, malheureusement je n'arrive pas à trouver la solution.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
23 août 2019 à 07:07
Donc...
Tu nous postes le code avec les balises
Tu nous montres le code html qui va avec
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
23 août 2019 à 11:07
Bonjour,
Voici le code complet.
<script language="javascript" type="text/javascript">
<?php
require("libs/class.liste.php");
$LDpaie = new liste("libs/paiements","","oblig"); //classe qui gère les listes déroulantes
$LDpaie->onchange = "payer()";
$instr = "var cotis = new Array('0'"; 

$requete  = "SELECT montant FROM cdc_paiements ORDER BY idpaie";
$resultat = executeQuery($requete,$bdd);

	while ($donnees = $resultat->fetch()) { $instr .= ", '".$donnees->montant."'"; }
	$instr .= ")";
	echo $instr; 
?>
</script>

<script language="javascript" type="text/javascript">
function payer() {
	var idpaie;
	idpaie = document.adh.idpaie.options[document.adh.idpaie.options.selectedIndex].value;
	document.adh.montant.value = cotis[idpaie];
}
</script>

Voici le formulaire. Je pense avoir tout poster en ce qui concerne mon problème. Merci.
echo '<form method="post" name="adh" action="'.$_SERVER["PHP_SELF"].'" onsubmit="return verif()">';
	echo '<h1>'.$title.'</h1>';

	echo '<table>';
	echo '<tr>';
	echo '<td class="libel">Adhérent</td>';
	echo '<td class="data">'; echo $LDpers->write($idpers).'<input type="button" name="plus" value="+" onclick="javascript:document.location=\'sais_personnes.php?a=add\'" /></td>';
	echo '</tr><tr>';
	echo '<td class="libel">Cotisation</td>';
	echo '<td class="data">'; echo $LDpaie->write($idpaie).'</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Classe de musicien</td>';
	echo '<td class="data">'; echo $LDclas->write($idclas).'</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Instrument du musicien</td>';
	echo '<td class="data">'; echo $LDpup->write($idpup).'</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Au titre de l\'année</td>';
	echo '<td class="data"><input type="text" name="annee" size="3" value="'.$aadh.'" class="oblig" /></td>';
	echo '</tr><tr>';
	echo '<td class="libel">Date de début</td>';
	echo '<td class="data"><input type="text" name="ddebut" size="8" value="'.$ddebut.'" /></td>';
	echo '</tr><tr>';
	echo '<td class="libel">Date de fin</td>';
	echo '<td class="data"><input type="text" name="dfin" size="8" value="'.$dfin.'" /></td>';
	echo '</tr><tr>';
	echo '<td class="libel">Montant payé</td>';
	echo '<td class="data"><input type="text" name="montant" size="5" style="text-align:right" value="'.$montant.'" /> €</td>';
	echo '</tr><tr>';
	echo '<td>';
		echo '<input type="hidden" name="haction" value="'.$action.'" />';
		echo '<input type="hidden" name="oldid" value="'.$oldid.'" />';
	echo '</td>';
	echo '<td class="data"><input type="submit" name="submit" value="'.$btsub.'" /></td>';
	echo '</tr>';
	echo '</table>';

echo '</form>';
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
23 août 2019 à 12:15
C'est moi.....ou il manque la liste déroulante ??
Je ne la trouve pas dans le code que tu nous montres...

Une fois de plus.. on galère a comprendre ton code et à obtenir toutes les infos....
Merci de bien vouloir faire de gros efforts pour nous communiquer TOUT ce qui peut nous servir à te répondre !
C'est fatiguant de toujours devoir te répéter les même choses.... :-(
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
23 août 2019 à 14:43
En fait j'ai hésité à mettre ma class mais je me suis dit qu'elle ne servirai pas à résoudre mon soucis. Comme une fois on m'a reproché de mettre du code qui n'a aucun intérêt avec le problème concerné, alors voilà.
voici ma page 'paiements.def'
<?php
$table  = "cdc_paiements";
$champs = "idpaie,libelle";
$ordre  = "libelle";
$lignes = "5";
$texte  = "-- Type de paiement --";
?>

'class.liste.php'
class liste {
     var $champs    = "";
     var $texte     = "";
     var $requete   = "";
     var $ctrlname  = "";
     var $tronque   = 0;
     var $option    = "";
     var $style     = "";
     var $onchange  = "";
     var $slimit    = "";
     var $limit     = "";

     var $nbrecs    = 0;

     function liste($objet, $ctrlname="", $style="", $limit=0) {
          if($objet != "null") {
               $slimit          = $limit; // sauvegarde du paramètre / fichier .def
               require("$objet.def.php");
               $this->texte     = $texte;
               $this->ctrlname  = $ctrlname;
               $this->style     = $style;
               $this->onchange  = $onchange;
               $this->champs    = $this->getfieldnames($champs);
               if($limit) {
                    $this->limit  = $limit;
               }
               if($lignes) {
                    $this->texte = "";
                    $this->option = " multiple size=\"$lignes\"";
               }
               if($where)  { $insWHERE = "WHERE $where";    } else { $insWHERE = ""; }
               if($group)  { $insGROUP = "GROUP BY $group"; } else { $insGROUP = ""; }
               if($ordre)  { $insORDER = "ORDER BY $ordre"; } else { $insORDER = ""; }
               if($limit)  { $insLIMIT = "LIMIT 0,$limit";  } else { $insLIMIT = ""; }
               if($slimit) { $insLIMIT = "LIMIT 0,$slimit"; } else { $insLIMIT = ""; }

               $this->sql = "SELECT $champs FROM $table $insWHERE $insGROUP $insORDER $insLIMIT;";
               $datas = NULL;
               //$cnx = $GLOBALS["connexion"];
               $result = executeQuery($this->sql,$datas);
               $this->nbrecs = $result->rowCount(); unset($resultat);
          }
     }

     function write($indice="",$text=0) {
          $champs = explode(",",$this->champs); $idctrl = $champs[0];
          if($this->ctrlname) { $idctrl = $this->ctrlname; }
          if($this->style) { $style = " class=\"$this->style\""; }
          if($this->onchange) { $onchange = " onchange=\"javascript:$this->onchange\""; }
          
          $datas = NULL;
          $result = executeQuery($this->sql,$datas);
          $this->nbrecs = $result->rowCount();
          if($text && $indice) { $textonly = 1; } else { $textonly = 0; }
          if(!$textonly) {
               echo "<select name=\"".$idctrl."\"$this->option".$style.$onchange.">";
               if(!$this->option) {
                    if($this->texte) { echo "<option value=\"null\">$this->texte"; }
               }
          }
          while ($donnees = $result->fetch()) {
               if($indice/1) { $idnum = 0; } else { $idnum = 1; }
               if($indice == $donnees->$champs[$idnum]) { $thisrec = 1; } else { $thisrec = 0; }
               if (count($champs) > 2) {
                    $texte = $donnees->$champs[1]; $n = 2;
                    if($textonly && $thisrec) { $buffer = $texte; }
                    while(count($champs) > $n) {
                         if($textonly && $thisrec) { $buffer .= " ".$donnees->$champs[$n]; $n++; }
                         else                      { $texte  .= " ".$donnees->$champs[$n]; $n++; }
                    }
               } else {
                    if($textonly && $thisrec) { $buffer = $donnees->$champs[1]; }
                    else                      { $texte  = $donnees->$champs[1]; }
               }
               if($this->tronque) {
                    $lg = $this->tronque-9;     // 9 = longueur de "... / ..."
                    if(($lg % 2) != 0) { $lg++; }
                    if(strlen($texte) > $lg) {
                         $texte = substr($texte,0,$lg/2) . "... / ..." . substr($texte,strlen($texte)-($lg/2),$lg/2);
                    }
                    if(strlen($buffer) > $lg) {
                         $buffer = substr($buffer,0,$lg/2) . "... / ..." . substr($buffer,strlen($buffer)-($lg/2),$lg/2);
                    }
               }
               if(!$textonly) {
                    echo "<option value=\"".$donnees->$champs[0]."\"";
                    if($thisrec) { echo " selected"; }
                    echo ">".$texte;
               }
          }
          if($textonly) { echo $buffer;        }
          else          { echo "</select>\n";  }
     }
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
23 août 2019 à 16:38
il nous faut le code HTML de ton select ... pas le code php qui le génère.
Pour cela :
- Affiche ta page dans ton navigateur,
- Affiche son code source ( via le raccourci CTRL + u par exemple )
- Trouve la partie qui concerne ta liste déroulante
- Colle nous son code.

Je vois, au passage, que tu ne fermes pas tes balises option ?? (il semble manquer les </option>
<option value="10" > texte </option>
0

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

Posez votre question
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
23 août 2019 à 18:20
Je suis actuellement dans la partie administration du site. Cette partie admin est un sous domaine alors en ce qui est du code source il y a uniquement cela.
hai hai hai
<link rel="stylesheet" href="css/menusscr.css" type="text/css" media="screen">
<link rel="stylesheet" href="css/menusprt.css" type="text/css" media="print">
   
<frameset rows="20,*" frameborder="0" border="0" marginheight="0" marginwidth="0">
   <frame name="menu" src="menu.php" scrolling="no" noresize class="np">
   <frame name="main" src="accueil.php" scrolling="auto">
</frameset>

Pour les balises options je regarde ça.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
23 août 2019 à 20:12
Ben reviens nous voir quand tu auras ta liste déroulante.... histoire qu'on puisse avancer....
Car je ne vois pas comment tu peux développer le côté interactif Javascript sans pouvoir le tester ...
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
23 août 2019 à 22:22
Est ce que c'est ça qu'il te faudrait pour essayer de m'aider?
<tr><td class="libel">Cotisation</td><td class="data"><select name="idpaie" multiple size="5" class="oblig" onchange="javascript:payer()"><option value="4">Adhésion gratuite<option value="1">Cotisation annuelle<option value="2">Cours collectif<option value="3">Cours individuel<option value="5">Paiement Dégressif</select>
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
26 août 2019 à 23:15
Bonjour,
Voilà trois jours que j'essaie à vouloir trouver une solution à mon problème, mais je pense que c'est un peu plus compliqué que je ne le pensais sans votre aide je vais devoir y renoncer. J'ai changé quelques petites choses déjà mais en vain. J'ai vraiment besoin de votre aide s'ils vous plait. Je vous remercie.
0