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

form onsubmit et javascript

8 réponses
Avatar
JKB
Bonjour à tous,

Je suis confronté à un petit problème qui me semble bizarre mais qui
doit être assez trivial. Je n'ai rien trouvé dans les tutoriaux
courants.

Un script php me génère une liste en tirant des données d'une base
de données PostgreSQL. Ça fonctionne bien. J'ai créé un formulaire
affichant simplement les noms et prénoms et un bouton "modifier". Je
souhaite passer au serveur le numéro de fiche à ouvrir au travers
de $_POST['fiche']. J'utilise (enfin, je tente d'utiliser...) un bout de
javascript pour affecter la bonne valeur à la variable php $fiche.

Mon script php me génère donc ce qui suit :

<table style="width: 100%; text-align: left;" border="0">
<tbody>
<input type="hidden" name="fiche" value=""/>
<form action="modification_membre.php" method="post"
onsubmit="affectation_fiche(1, this.fiche);">
<tr>
<td style="width: 40%;">Nom 1</td>
<td style="width: 40%;">Prenom 1</td>
<td style="width: 20%">
<input type="submit" value="Modification" style="width:100%"/>
</td>
</tr>
<form action="modification_membre.php" method="post"
onsubmit="affectation_fiche(2, this.fiche);">
<tr>
<td style="width: 40%;">Nom 2</td>
<td style="width: 40%;">Prenom 2</td>
<td style="width: 20%">
<input type="submit" value="Modification" style="width:100%"/>
</td>
</tr>
</tbody>
</table>

Le bout de javascript est trivial :

function affectation_fiche(input, output)
{
alert(input);
output = input;
return true;
}

Ce que je ne comprends pas. Quel que soit le bouton sur lequel
j'appuie, le script javascript affiche '1' !? Accessoirement, je ne
récupère rien dans le script appelé. J'avoue ne plus savoir où
chercher...

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.

8 réponses

Avatar
Pascal PONCET
JKB a écrit :
Ce que je ne comprends pas. Quel que soit le bouton sur lequel
j'appuie, le script javascript affiche '1' !? Accessoirement, je ne
récupère rien dans le script appelé. J'avoue ne plus savoir où
chercher...



Bonjour,

Il y aurait du ménage à faire !

On peut utiliser plusieurs formulaires dans la même page, mais il faut
savoir qu'un seul sera sollicité, lors de la soumission, pour envoyer
ses données au serveur.

Pour savoir lequel, il est nécessaire de délimiter son rayon d'action,
ce que prévoit le HTML avec la fermeture de la balise "form".
Or, je ne vois aucune fermeture "</form>" dans la page exemple.

De plus, le premier "input", de type "hidden", est en dehors de tout
formulaire.
Sa valeur ne sera donc jamais envoyée.

Voilà pour la partie HTML (hors sujet, mais primordiale).

En ce qui concerne le script, le "this.fiche" ne correspond à rien dans
l'appel à l'évènement "onsubmit".
Ce problème sera néanmoins résolu quand le champ "input" correspondant
sera réintégré dans le formulaire (voir plus haut).

Mais, plus pratiquement, je ne vois pas à quoi sert un script dans ce cas.
Il suffit d'avoir un champ caché "name=fiche" dans chaque formulaire,
avec des valeurs différentes dans "value=...".
Ou encore, de passer la variable en GET dans l'attribut "action" des
formulaires (ex: <form action="modification_membre.php?fiche=1"...>).

Cordialement,
Pascal
Avatar
SAM
Le 2/23/09 4:34 PM, JKB a écrit :
Bonjour à tous,

Je suis confronté à un petit problème qui me semble bizarre mais qui
doit être assez trivial. Je n'ai rien trouvé dans les tutoriaux
courants.



Merci de me mettre les tags dans les bons autres tags
(respecter les imbrications de balises autorisées, svp)

- le table dans le form
- les inputs aussi, en td là ici

Que fout un tag 'form' entre un 'tbody' et un 'tr' ?

Ne vois-je pas un form dans un autre ?
C'est interdit et ... ça ne peut pas fonctionner.

Dès que le code html est correct, on pensera à regarder le javascript.


Le bout de javascript est trivial :

function affectation_fiche(input, output)
{
alert(input);
output = input;
return true;
}

Ce que je ne comprends pas. Quel que soit le bouton sur lequel
j'appuie, le script javascript affiche '1' !? Accessoirement, je ne
récupère rien dans le script appelé. J'avoue ne plus savoir où
chercher...



Ben ... sans doute que le javascript non plus.

Moi, avec un gros effort je pourrais, mais à quoi ça servirait ?

Range ton code html et retente
(teste d'abord sur un truc sans aucun table et en séparant tes forms
(balise de fermeture) )
tu verras alors que ça fonctionne.

Le truc continuera à t'envoyer '1'
Puisque c'est ce que tu demandes :
function affectation_fiche(input, output) { alert(input);
et :
onsubmit="affectation_fiche(1, this.fiche);"
où input = 1

En fait, que veux-tu récolter ou faire ?

--
sm

--
sm
Avatar
JKB
Le 23-02-2009, ? propos de
Re: form onsubmit et javascript,
Pascal PONCET ?crivait dans fr.comp.lang.javascript :
JKB a écrit :
Ce que je ne comprends pas. Quel que soit le bouton sur lequel
j'appuie, le script javascript affiche '1' !? Accessoirement, je ne
récupère rien dans le script appelé. J'avoue ne plus savoir où
chercher...



Bonjour,

Il y aurait du ménage à faire !

On peut utiliser plusieurs formulaires dans la même page, mais il faut
savoir qu'un seul sera sollicité, lors de la soumission, pour envoyer
ses données au serveur.

Pour savoir lequel, il est nécessaire de délimiter son rayon d'action,
ce que prévoit le HTML avec la fermeture de la balise "form".
Or, je ne vois aucune fermeture "</form>" dans la page exemple.

De plus, le premier "input", de type "hidden", est en dehors de tout
formulaire.
Sa valeur ne sera donc jamais envoyée.

Voilà pour la partie HTML (hors sujet, mais primordiale).

En ce qui concerne le script, le "this.fiche" ne correspond à rien dans
l'appel à l'évènement "onsubmit".
Ce problème sera néanmoins résolu quand le champ "input" correspondant
sera réintégré dans le formulaire (voir plus haut).

Mais, plus pratiquement, je ne vois pas à quoi sert un script dans ce cas.
Il suffit d'avoir un champ caché "name=fiche" dans chaque formulaire,
avec des valeurs différentes dans "value=...".
Ou encore, de passer la variable en GET dans l'attribut "action" des
formulaires (ex: <form action="modification_membre.php?fiche=1"...>).



Effectivement, ça, je sais faire, mais la configuration de PHP me
l'interdit...

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
JKB
Le 23-02-2009, ? propos de
Re: form onsubmit et javascript,
SAM ?crivait dans fr.comp.lang.javascript :
Le 2/23/09 4:34 PM, JKB a écrit :
Bonjour à tous,

Je suis confronté à un petit problème qui me semble bizarre mais qui
doit être assez trivial. Je n'ai rien trouvé dans les tutoriaux
courants.



Merci de me mettre les tags dans les bons autres tags
(respecter les imbrications de balises autorisées, svp)

- le table dans le form
- les inputs aussi, en td là ici

Que fout un tag 'form' entre un 'tbody' et un 'tr' ?

Ne vois-je pas un form dans un autre ?
C'est interdit et ... ça ne peut pas fonctionner.

Dès que le code html est correct, on pensera à regarder le javascript.



Ouaips, j'ai vu avant de lire les réponses ici... J'ai honte... Mais
merci pour vous être penché sur mon problème idiot...

Le code généré par php est maintenant :

<table style="width: 100%; text-align: left;" border="0">
<tbody>
<tr>
<form action="modification_membre.php" method="post"
onsubmit="affectation_fiche(1, this.fiche);">
<input type="hidden" name="fiche" value=""/>
<td style="width: 40%;">Nom 1</td>
<td style="width: 40%;">Prenom 1</td>
<td style="width: 20%">
<input type="submit" value="Modification" style="width:100%"/>
</td>
</form>
</tr>
<tr>
<form action="modification_membre.php" method="post"
onsubmit="affectation_fiche(2, this.fiche);">
<input type="hidden" name="fiche" value=""/>
<td style="width: 40%;">Nom 2</td>
<td style="width: 40%;">Prenom 2</td>
<td style="width: 20%">
<input type="submit" value="Modification" style="width:100%"/>
</td>
</form>
</tr>
</tbody>
</table>

La fonction alert() de javascript me montre que la bonne valeur est
renvoyée par le script. Par contre, la page appelée ne récupère rien.
Cette page est simplement ceci :

<?php
session_start();

echo "Valeur :";
echo $_POST['fiche'];

if(!isset($_SESSION['id']))
{
return;
}

return;
?>

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
JKB
Le 23-02-2009, ? propos de
form onsubmit et javascript,
JKB ?crivait dans fr.comp.lang.javascript :
Bonjour à tous,

Je suis confronté à un petit problème qui me semble bizarre mais qui
doit être assez trivial. Je n'ai rien trouvé dans les tutoriaux
courants.

Un script php me génère une liste en tirant des données d'une base
de données PostgreSQL. Ça fonctionne bien. J'ai créé un formulaire
affichant simplement les noms et prénoms et un bouton "modifier". Je
souhaite passer au serveur le numéro de fiche à ouvrir au travers
de $_POST['fiche']. J'utilise (enfin, je tente d'utiliser...) un bout de
javascript pour affecter la bonne valeur à la variable php $fiche.

Mon script php me génère donc ce qui suit :

<table style="width: 100%; text-align: left;" border="0">
<tbody>
<input type="hidden" name="fiche" value=""/>
<form action="modification_membre.php" method="post"
onsubmit="affectation_fiche(1, this.fiche);">
<tr>
<td style="width: 40%;">Nom 1</td>
<td style="width: 40%;">Prenom 1</td>
<td style="width: 20%">
<input type="submit" value="Modification" style="width:100%"/>
</td>
</tr>
<form action="modification_membre.php" method="post"
onsubmit="affectation_fiche(2, this.fiche);">
<tr>
<td style="width: 40%;">Nom 2</td>
<td style="width: 40%;">Prenom 2</td>
<td style="width: 20%">
<input type="submit" value="Modification" style="width:100%"/>
</td>
</tr>
</tbody>
</table>

Le bout de javascript est trivial :

function affectation_fiche(input, output)
{
alert(input);
output = input;
return true;
}

Ce que je ne comprends pas. Quel que soit le bouton sur lequel
j'appuie, le script javascript affiche '1' !? Accessoirement, je ne
récupère rien dans le script appelé. J'avoue ne plus savoir où
chercher...

Cordialement,



Trouvé...

function affectation_fiche(input, output)
{
output.value = input;
return true;
}

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
Pascal PONCET
JKB a écrit :
Trouvé...

function affectation_fiche(input, output)
{
output.value = input;
return true;
}



Je comprends quand même pas à quoi sert le script !
Ne suffirait-il pas de fournir directement la valeur au champ caché ?

exemple:

<form action="modification_membre.php" method="post">
<input type="hidden" name="fiche" value="1" />
... Fiche 1 ...
</form>

<form action="modification_membre.php" method="post">
<input type="hidden" name="fiche" value="2" />
... Fiche 2 ...
</form>

etc.
Avatar
JKB
Le 23-02-2009, ? propos de
Re: form onsubmit et javascript,
Pascal PONCET ?crivait dans fr.comp.lang.javascript :
JKB a écrit :
Trouvé...

function affectation_fiche(input, output)
{
output.value = input;
return true;
}



Je comprends quand même pas à quoi sert le script !
Ne suffirait-il pas de fournir directement la valeur au champ caché ?

exemple:

<form action="modification_membre.php" method="post">
<input type="hidden" name="fiche" value="1" />
... Fiche 1 ...
</form>

<form action="modification_membre.php" method="post">
<input type="hidden" name="fiche" value="2" />
... Fiche 2 ...
</form>



C'est ce que j'avais fait dans un premier temps, mais ça ne
fonctionne pas.

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
SAM
Le 2/23/09 11:06 PM, JKB a écrit :
Le 23-02-2009, ? propos de
Re: form onsubmit et javascript,
Pascal PONCET ?crivait dans fr.comp.lang.javascript :
Ne suffirait-il pas de fournir directement la valeur au champ caché ?

exemple:

<form action="modification_membre.php" method="post">
<input type="hidden" name="fiche" value="1" />
... Fiche 1 ...
</form>

<form action="modification_membre.php" method="post">
<input type="hidden" name="fiche" value="2" />
... Fiche 2 ...
</form>



C'est ce que j'avais fait dans un premier temps, mais ça ne
fonctionne pas.



ben si ça fonctionne !
c'est le but, la fonction, des formulaires.

Mais, bien sûr, pour ça il faut que le code html soit du code html et
pas n'importe quoi.


Variante :

<form action="modification_membre.php" method="post">
<p>
Nom : <input name="nom"><br>
Prénom : <input name="prenom"><br>
Validez un choix de fiche :
<input name="fiche" type=submit value="1">
<input name="fiche" type=submit value="2">
<input name="fiche" type=submit value="3">
<input name="fiche" type=submit value="4">
</p>
</form>


--
sm