Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Petit problème le listes...

9 réponses
Avatar
MP
Bonjour,


Je crée un tableau dynamiquement en deux parties.
Première partie: le tableau est crée en php a coup de
echo "<tr><td><select name=formatione[]> <option
...blablabla...</td><td><input type=text name=cout[]>.... </tr>";

Deuxième partie du tableau, ajoutée dynamiquement en javascript par
l'utilisateur
function ajouter(table)
{
ligne=document.getElementById(table).insertRow(-1);
cell1=ligne.insertCell(-1);
<?...?>
cell1.innerHTML="<? echo $ret; ?>";
cell2=ligne.insertCell(-1);
...
}

$ret étant <select name=formatione[]> <option ...blablabla... construit en
php pour faire ma liste depuis
ma base mysql.

Jusque là, tout va bien, tout marche, pas de soucis, le formulaire m'envois
sur une autre page
ou je fais mes traitements, tout est ok.

Problème (hé oui, vous l'aurez deviné, j'ai un problème.):
Je veux que mon prix soit dynamique, cad que si je change de formatione, le
"cout" se complète automatiquement.
Idée: sur mon select, je place un onchange qui appelle une fonction fcout();
javascrip qui va faire mon changement.
Comment identifier sur quelle ligne je suis pour pouvoir modifier le bon
cout ?

Autant en PHP, je pense pas mal me débrouiller, autant en javascrip, je dois
avouer que je galère là...

Merci pour toute aide par avance !

9 réponses

Avatar
SAM
MP a écrit :

Problème (hé oui, vous l'aurez deviné, j'ai un problème.):
Je veux que mon prix soit dynamique, cad que si je change de formatione, le
"cout" se complète automatiquement.
Idée: sur mon select, je place un onchange qui appelle une fonction fcout();
javascrip qui va faire mon changement.



<select onchange="cout=this.options[this.selectedIndex].value">
<option value="190">à la matinée
<option value="72">à l'heure
<option value="300">à la journée
</select>

Comment identifier sur quelle ligne je suis pour pouvoir modifier le bon
cout ?



que patafioles-tu ? tu parles des options ? (cf ci-avant, non ?)

Autant en PHP, je pense pas mal me débrouiller, autant en javascrip, je dois
avouer que je galère là...



<p>Coût des cours :
<select onchange="cout.value=this.options[this.selectedIndex].value">
<option value="190">à la matinée
<option value="72">à l'heure
<option value="300">à la journée
</select>
<input type=text name="cout" disabled size=5> euros HT.</p>

--
sm
Avatar
Laurent vilday
SAM a écrit :
MP a écrit :

Problème (hé oui, vous l'aurez deviné, j'ai un problème.):
Je veux que mon prix soit dynamique, cad que si je change de
formatione, le "cout" se complète automatiquement.



<p>Coût des cours :
<select onchange="cout.value=this.options[this.selectedIndex].value">
<option value="190">à la matinée
<option value="72">à l'heure
<option value="300">à la journée
</select>
<input type=text name="cout" disabled size=5> euros HT.</p>



Rohhh, vilain pas propre qui utilise des raccourcis IE.

"this.form.elements.cout.value" à la place de "cout.value"

<form ....>
...
<select onchange="
this.form.elements.cout.value this.options[this.selectedIndex].value">
...
</form>

--
laurent
Avatar
MP
Bonjour et merci pour la réponse.

<select onchange="cout=this.options[this.selectedIndex].value">
<option value="190">à la matinée
<option value="72">à l'heure
<option value="300">à la journée
</select>



Et oui mais non ! Je me suis sans doutes mal exprimé et j'ai peut être trop
élagué.

Comment identifier sur quelle ligne je suis pour pouvoir modifier le bon
cout ?



que patafioles-tu ? tu parles des options ? (cf ci-avant, non ?)



Oui mais. Des options sauf que des options, on va dire qu'il y en a 100.
On peut en choisir entre 0 et 100. Chaque option est représentée par une
ligne dans un tableau, un peu comme sur une facture.
Le tableau est constitué sur la page de deux parties:
- Liste des options déjà dans la base de donnée, ligne a ligne.
- Liste des options qu'on ajoute dynamiquement en javascript.

Dans le contexte du bout de code du premier message, sur ma page
d'enregistrement,
je fais un
$combienoption=sizeof($_GET["formatione"]);
et avec une petite boucle foreach je rebalance ce qu'il faut en base.

<p>Coût des cours :
<select onchange="cout.value=this.options[this.selectedIndex].value">
<option value="190">à la matinée
<option value="72">à l'heure
<option value="300">à la journée
</select>
<input type=text name="cout" disabled size=5> euros HT.</p>



Dans le principe c'est ça, sauf que c'est démultiplié:

<p>ligne1
<select onchange="cout.value=this.options[this.selectedIndex].value">
<option value="190">à la matinée
<option value="72">à l'heure
<option value="300">à la journée
</select>
<input type=text name="cout" disabled size=5> euros HT.</p>


...
<p>lignen
<select onchange="cout.value=this.options[this.selectedIndex].value">
<option value="190">à la matinée
<option value="72">à l'heure
<option value="300">à la journée
</select>
<input type=text name="cout" disabled size=5> euros HT.</p>



D'autre part, donner la valeur a l'option ne me convient pas non plus. Je
suis obligé de laisser mon ID interne unique a l'option.
Un ptit coup d'ajax (ou pire une table javascript des couts construite en
php) et je m'arrangerais pour définir le cout ou il le faut.

Le problème est donc de savoir comment identifier quel cout[] aller toucher
!
Avatar
SAM
Laurent vilday a écrit :
SAM a écrit :

<p>Coût des cours :
<select onchange="cout.value=this.options[this.selectedIndex].value">
<option value="190">à la matinée
<option value="72">à l'heure
<option value="300">à la journée
</select>
<input type=text name="cout" disabled size=5> euros HT.</p>



Rohhh, vilain pas propre qui utilise des raccourcis IE.



???? c'est NC3 qui m'a appris ça ! ! !

je l'ai touj vu fonctionner partout (même si ...)

"this.form.elements.cout.value" à la place de "cout.value"



j'avais pas la place :-)

--
sm
Avatar
SAM
MP a écrit :
Bonjour et merci pour la réponse.

<select onchange="cout=this.options[this.selectedIndex].value">
<option value="190">à la matinée
<option value="72">à l'heure
<option value="300">à la journée
</select>



Et oui mais non ! Je me suis sans doutes mal exprimé et j'ai peut être trop
élagué.

Comment identifier sur quelle ligne je suis pour pouvoir modifier le bon
cout ?


que patafioles-tu ? tu parles des options ? (cf ci-avant, non ?)



Oui mais. Des options sauf que des options, on va dire qu'il y en a 100.
On peut en choisir entre 0 et 100. Chaque option est représentée par une



Si je parle d'option au sens de balise 'option' d'une balise 'select'
et si tu me parles d'option au sens 'choix d'une option'
on va pas y arriver ;-)

ligne dans un tableau, un peu comme sur une facture.
Le tableau est constitué sur la page de deux parties:
- Liste des options déjà dans la base de donnée, ligne a ligne.
- Liste des options qu'on ajoute dynamiquement en javascript.

Dans le contexte du bout de code du premier message, sur ma page
d'enregistrement,
je fais un



Tu fais bien ce que tu veux avec ton PHP, j'y comprends rien et c'est
hors charte
Puisque tu es content de ton PHP donne plutôt le code reçu par le navigateur
(et une url serait mieux que de se farcir tout le code ici et mal mis
t'en forme par les newsreaders)


Dans le principe c'est ça, sauf que c'est démultiplié:



Alorsse dans le select kivabien (je souis perdou et ne sais lequel
c'est) la fonction cout() :

function cout(quoi) { // 'quoi' c'est le select
var r = quoi.parentNode; // on attrape son parent
// et on continue tant qu'on n'a pas la rangée
while(quoi.tagName != 'TR') r = r.parentNode;
// alors on attrape les balises 'input' de cette rangée
r = r.getElementsByTagName('INPUT');
// si y en a (et qu'un) on attrape l'input désiré
if(r && r.length==1) r = r[0];
// et chtack! on lui colle la douloureuse
r.value = quoi.options[quoi.selectedIndex).value;
}

<select onchange="cout(this)">

Nota : ça ne fonctionnera pas avec NC4
(IE, personne ne s'en servant, n'est pas à considérer)

D'autre part, donner la valeur a l'option ne me convient pas non plus. Je
suis obligé de laisser mon ID interne unique a l'option.



Moi pas compris ... tous les options de tous les selects on même value ?
Et à quoi sert que le html se décarcasse avec des attributs 'value' si
c'est pour les détourner ?


Un ptit coup d'ajax (ou pire une table javascript des couts construite en
php) et je m'arrangerais pour définir le cout ou il le faut.



Ha? et comment ?

Tout ça m'a l'air de faire double ou triple emploi.
Le php devrait produire un code propre et exploitable sans
circonvolutions via JS.
Juste le truc dynamique (sans retour au serveur donc sans Ajax) pour
indiquer le coût choisi.

Le problème est donc de savoir comment identifier quel cout[] aller toucher



asperge que tu sais comment maintenant .


On peut aussi se passer de l'input et avoir qque chose nourri t'a bon et
sciant par le PHP (les bon couts en clair).

<td>
<ul class="cout">
<li><?= $montant[] ?></li>
<li><?= $montant[] ?></li>
<li><?= $montant[] ?></li>
<li><?= $montant[] ?></li>
</ul>
</td></tr>


function ucout(quoi) {
var r = quoi.parentNode;
while(r.tagName != 'TR') r = r.parentNode;
r = r.getElementsByTagName('LI'); // la collection des LIs de la rangée
// on en supprime les éventuelles class en CSS
for(var i=0: i<r.length; i++) r[i]•className = '';
// Hop ! on montre le LI de même index que l'option sélectionnée
r[quoi.selectedIndex].className = 'vu';
}

CSS :
==== .cout { list-style = none; }
.cout li { display: none }
.cout li.vu { display: inline }


--
sm
Avatar
SAM
SAM a écrit :

Alorsse dans le select kivabien (je souis perdou et ne sais lequel
c'est) la fonction cout() :

function cout(quoi) { // 'quoi' c'est le select
var r = quoi.parentNode; // on attrape son parent
// et on continue tant qu'on n'a pas la rangée
while(quoi.tagName != 'TR') r = r.parentNode;



Coquille ! il faut lire :

while(r.tagName != 'TR') r = r.parentNode;

(ça a été corrigé dans fonction ucout(x) )

// alors on attrape les balises 'input' de cette rangée
r = r.getElementsByTagName('INPUT');
// si y en a (et qu'un) on attrape l'input désiré
if(r && r.length==1) r = r[0];
// et chtack! on lui colle la douloureuse
r.value = quoi.options[quoi.selectedIndex).value;
}

<select onchange="cout(this)">



--
sm
Avatar
MP
> SAM a écrit :
Coquille ! il faut lire :

while(r.tagName != 'TR') r = r.parentNode;


..
r.value = quoi.options[quoi.selectedIndex).value;





Et ] a la place de )

Merci beaucoup. Je suis complètement débloqué.

Au final, j'utilise

function cout(quoi) {
// 'quoi' c'est le select
var r = quoi.parentNode; // on attrape son parent
// et on continue tant qu'on n'a pas la rangée
while(r.tagName != 'TR') r = r.parentNode;
// alors on attrape les balises 'input' de cette rangée
r = r.getElementsByTagName('INPUT');
// si y en a (et qu'un) on attrape l'input désiré
if(r && r.length==1) r = r[0];
// et chtack! on lui colle la douloureuse
r.value = lecout[(quoi.options[quoi.selectedIndex].value)];
}

Le tableau lecout étant construit en début de page en php.
Cela me permet de conserver mon id et non les valeurs (en €) dans mes option
value.
Pourquoi j'insiste tant dans cette direction ? ben après, il faut bien
traiter le formulaire.
comment je fais pour savoir quelle option a été choisie si deux options ont
le même cout ?
D'autre part, le cout préremplis n'est qu'une facilité pour préremplir le
cout mais l'opérateur
a toute liberté de modifier celui ci si il le souhaites et là encore, aucune
chance de remonter a l'option en ayant que le cout !

En tout cas, merci encore tout marche nikel maintenant :-)
Avatar
SAM
MP a écrit :
SAM a écrit :
Coquille ! il faut lire :





et re-coquille :-(
bon ! ouf! tu les as vues.

Pourquoi j'insiste tant dans cette direction ? ben après, il faut bien
traiter le formulaire.
comment je fais pour savoir quelle option a été choisie si deux options ont
le même cout ?



puisqu'elles ont le même cout elles ont le même cout
où est le problème ?

Le select,
- par son mon, indique quelle formation dont au sujet de laquelle
- par sa value indique quelle option est traitée
L'input indique le cout (soit déjà connu, soit nouveau)
Le PHP n'a qu'à en faire l'analo

Sinon, pour individualiser yaka changer le nom de l'input en fonction de
l'option sélectionnée bien que je ne vois pas trop comment s'en servir
du côté PHP.

function cout(quoi) {
// 'quoi' c'est le select
var r = quoi.parentNode; // on attrape son parent
// et on continue tant qu'on n'a pas la rangée
while(r.tagName != 'TR') r = r.parentNode;
// alors on attrape les balises 'input' de cette rangée
r = r.getElementsByTagName('INPUT');
// si y en a (et qu'un) on attrape l'input désiré
if(r && r.length==1) r = r[0];
// et chtack! on lui colle la douloureuse
r.value = lecout[(quoi.options[quoi.selectedIndex].value)];
// et re-tchack ! modif du nom de l'input pour traitement MySql
r.name = 'montant['+quoi.selectedIndex+']';
}

D'autre part, le cout préremplis n'est qu'une facilité pour préremplir le
cout mais l'opérateur a toute liberté de modifier celui ci si il le souhaite



Ha? quel "opérateur" ?
Et où modifie t-il ce cout ?
et d'abord pourquoi qu'il peut modifier le cout ?

Ou bien c'est un formulaire de gestion de la base ?
(et non pas un truc de commande en ligne)

et là encore, aucune chance de remonter a l'option en ayant que le cout !



??? Le formulaire est certainement envoyé en entier, ça m'étonnerait que
ne soient postés que les champ-textes finaux ? !

Ce doit sans doute donner qque chose du genre :

formations[] choix[] cout[]

foreach( $formations as $formation)
{
if( $choix[$formation] != $cout[$formation] )
corrigeBase( $formation, $cout[$formation]);
}

En tout cas, merci encore tout marche nikel maintenant :-)



J'aimais bien le coup des LI
Mais c'est sûr que si ce qui importe est le champ-texte final et qu'il
doit pouvoir être modifié manuellement, les LI ne font pas l'affaire.


--
sm
Avatar
MP
> Sinon, pour individualiser yaka changer le nom de l'input en fonction de
l'option sélectionnée bien que je ne vois pas trop comment s'en servir du
côté PHP.


Ca, j'y arriverais mais ça serait bien moins élégant que la solution que
vous m'avez donné, que j'ai adapté et qui fonctionne exactement comme je le
souhaite.

Ha? quel "opérateur" ?
Et où modifie t-il ce cout ?
et d'abord pourquoi qu'il peut modifier le cout ?



Dans le cas présent, l'opérateur = DG de la société.
Il a le droit par exemple de faire une remise sur ce qu'il souhaite ;-)

Ou bien c'est un formulaire de gestion de la base ?
(et non pas un truc de commande en ligne)



Exactement. C'est une refonte de la fiche financière de clients qui était en
100%
PHP et que je dynamise un peu au passage. Le tout faisant parti d'un SI
comportant pas loin d'un millier de scripts.

Merci encore.