IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Plusieurs submit (javascript / php)


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut Plusieurs submit (javascript / php)
    Bonjour,
    j'ai plusieurs submit sur la même page qui font appel à la même fonction javascript mais je n'arrive pas à les gérer. j'ai regardé sur le net mais je n'ai pas trouvé de solutions qui fonctionne.

    C'est un cas un peu spécial, voici le code:

    le javascript de la page "news_info":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script language=Javascript>
    function bouton()
    {
        document.envoi.submit();
    }
    </script>

    la page en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // debut article 24
    <form action="/pages/news/news_unique.php" method="post" name="envoi">
    <a onclick="javascript:bouton();">mon lien 1</a>
    <input type="hidden" name="title" value="titre de l'article" />
              			<input type="hidden" value="news24.html" name="number" />
    </form>    
     
    BLA BLA BLA
    // fin article 24
     
    // debut article 25
    <form action="/pages/news/news_unique.php" method="post" name="envoi">
    <a onclick="javascript:bouton();">mon lien 2</a>
    <input type="hidden" name="title" value="titre de l'article" />
              			<input type="hidden" value="news25.html" name="number" />
    </form>    
     
    BLA BLA BLA
    // fin article 25


    je récupère ensuite la valeur "number" qui me sert à afficher l'article voulu grâce à un include dans la page news_unique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $number=$_POST["number"];
    $title=$_POST["title"];
    ?>
     
    <?php
    include($number)
    ?>


    si je n'ai qu'un formulaire dans la 1ère page cela fonction, mais si j'en ai plus ça ne marche plus...
    je ne peux pas (a mon avis, et j'ai essayé) nommé les autres formulaires différemment car ma fonction javascript s'appelle "function bouton()" ...
    je ne sais pas comment faire, auriez vous une astuce?

    merci beaucoup!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Il faudrait au minimum que tes forms aient des noms uniques ou des IDs que tu passes en paramètre

    Sinon, tu passes 'this' en paramètre à ta fonction, et dans ta fonction tu remontes au FORM parent que tu submit(). (En supposant qu'on ait un node)

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,
    <a onclick="javascript:bouton();">mon lien 2</a>
    onclick attend déjà des instructions javascript donc vires le motif "javascript:"

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Bonjour,

    onclick attend déjà des instructions javascript donc vires le motif "javascript:"
    c'est fait merci

    Citation Envoyé par kernelfailure Voir le message
    Il faudrait au minimum que tes forms aient des noms uniques ou des IDs que tu passes en paramètre
    est-il possible de mettre quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script language=Javascript>
    function bouton()
    {
        document.nom_du_form_qui_change.submit();
    }
    </script>
    avec nom_du_form_qui_change qui serai le nom ou l'ID du formulaire? si oui, comment le lui indiquer?


    Citation Envoyé par kernelfailure Voir le message
    Sinon, tu passes 'this' en paramètre à ta fonction, et dans ta fonction tu remontes au FORM parent que tu submit(). (En supposant qu'on ait un node)
    Après m'être renseigner sur les node, this ... j'avoue ne pas vraiment comprendre comment faire et cela me semble un peu complexe

  5. #5
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Bonjour,

    Citation Envoyé par remrem13 Voir le message
    est-il possible de mettre quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script language=Javascript>
    function bouton()
    {
        document.nom_du_form_qui_change.submit();
    }
    </script>
    avec nom_du_form_qui_change qui serai le nom ou l'ID du formulaire? si oui, comment le lui indiquer?
    Ca ne marchera pas ainsi. Il faudra utiliser une autre syntaxe pour jouer avec le nom de variable. Ou bien faire une série de if, un par formulaire et d'encoder l'instruction avec le nom du formulaire en dur.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    //Passage en paramètre de maVar
    document.forms[maVar].submit();
    
    
    //Série de if
    if(maVar == "form1")
       document.form1.submit();
    if(maVar == "form2")
       document.form2.submit();

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Citation Envoyé par vermine Voir le message

    //Série de if
    if(maVar == "form1")
    document.form1.submit();
    if(maVar == "form2")
    document.form2.submit();
    [/code]
    Mais aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document[formName].submit();
    Citation Envoyé par remrem13 Voir le message
    Après m'être renseigner sur les node, this ... j'avoue ne pas vraiment comprendre comment faire et cela me semble un peu complexe
    Pas du tout. C'est très simple, voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <html>
    <head>
    <script>
    function getTopForm (obj) {
    	/* ... */
    	alert(obj.parentNode.name);
    	obj.parentNode.submit();
    } 
    </script>
    </head>
    <body>
    <form method=post name="myTopForm">
    <input name="rien" />
    <a href="" onclick="getTopForm(this)">click me</a>
    </form>
    </body>
    </html>

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Le this est implicite dans le onclick :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <html>
    <head>
    <script>
    function getTopForm () {
    	/* ... */
    	alert(this.parentNode.name);
    	this.parentNode.submit();
    } 
    </script>
    </head>
    <body>
    <form method=post name="myTopForm">
    <input name="rien" />
    <a href="" onclick="getTopForm()">click me</a>
    </form>
    </body>
    </html>
    L'idéal dans le cas d'un formulaire étant ensuite de passer par un input type button plutôt qu'un faux lien, car ainsi, tu peux accéder directement au formulaire qui le contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <html>
    <head>
    <script>
    function getTopForm () {
    	/* ... */
    	alert(this.form);
    	this.form.submit();
    } 
    </script>
    </head>
    <body>
    <form method=post name="myTopForm">
    <input name="rien" />
    <input type="button" onclick="getTopForm()" value="click me" />
    </form>
    </body>
    </html>

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Le this est implicite dans le onclick
    L'ajout d'un onclick produit une "ré-écriture"(*) de méthode. Du coup, à travers une fonction, le mot this renvoie à l'objet dont la propriété à été ré-écrite (Elle devient méthode de cet objet).
    Mais il en va tout autrement si on utilise une méthode d'instance plutôt qu'une fonction.

    Personnellement, je préfère stipuler this à l'appel, car bien souvent j'utilise une méthode d'instance.

    (*) En quelque sorte...

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    merci pour vos réponses, mais cela ne fonctionne pas encore.

    J'ai utilisé le code de Bovino (car la série de if est un peu lourde vu que c'est une page de news, j'aurais donc des dizaines de form sur la page)

    page news_info.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    <script language=Javascript>
    function getTopForm(obj)
    {
        alert(obj.parentNode.name);
    	obj.parentNode.submit();
    }
    </script>
     
    //news 24
    <form action="/pages/news/news_unique.php" method="post" name="myTopForm24">
    <table class="texte_general">
           <tr class="Titres_Articles">
             <td>
             	<span class="Zone_comments">
                	<a href="" onclick="getTopForm()">#24</a>
                    	</span> Le titre ici</td>
                        <input type="hidden" name="title" value=" Le titre ici" />
              			<input type="hidden" value="news24.html" name="number" />
    </form> 
     
    // news 23
     <form action="/pages/news/news_unique.php" method="post" name="myTopForm23">
    <table class="texte_general">
           <tr class="Titres_Articles">
             <td>
             	<span class="Zone_comments">
                	<a href="" onclick="getTopForm()">#23</a></span>titre23...</td>
                    <input type="hidden" name="title" value=" titre23..." />
              			<input type="hidden" value="news23.html" name="number" />
    </form>
    lorsque je clic sur #24 ou #23 (mon lien qui est censé m'envoyer sur news_unique.php qui fera un <?php include($number) ?> ) il recharge la page news_info.php


    edit : et si je met onclick="getTopForm(THIS) j'ai un message d'erreur "undefined" et la page news_info se recharge aussi

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    si tu utilises un <a href> au lieu d'un input type="button" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="getTopForm();return false;"
    Ça évite de faire appel au href (qui recharge ta page) à la suite du onclick

    A+

  11. #11
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    ça me recharge la page de la même façon en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="" onclick="getTopForm();return false;">#24</a>
    je souhaite utiliser href car mon lien doit être un texte et non un bouton

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par remrem13 Voir le message
    lorsque je clic sur #24 ou #23 (mon lien qui est censé m'envoyer sur news_unique.php qui fera un <?php include($number) ?> ) il recharge la page news_info.php
    Tu veux qu'il t'envoie dans une nouvelle fenêtre ?
    Si c'est le cas, il manque un attribut target à ton form ...

    Sinon, avec un submit(), c'est normal que ta page se recharge

    A+

  13. #13
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    en fait j'ai une page news_info.php qui contient autant de <php include newsX.html> que de news et je voudrais que quand on clic sur le lien (#numero_de_la_news) cela m'envoie vers la page news_unique qui fait seulement un include newsX.html grâce à l'argument "number" qu'elle reçoit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" value="news24.html" name="number" />
    actuellement le lien #numero_de_la_news envoyait vers une page NewsX.php qui fesait l'include...

    j'avais donc autant de pages .php que de .html ....
    cela me permettrait de réduire considérablement le nombre de page...

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Plusieurs remarques :

    - C'est pas "THIS" mais "this" ;

    - Ferme tes balises convenablement. Excuses moi, mais, ton code HTML est particulièrement mal fichus : Des TABLE qui ne ferment pas, des choses en dehors de TD et des TR sans fermeture...

    - Si tu utilises (parentNode), tu n'es pas au bout de tes peines : Entre ton Anchor et le FORM, il y a un grand nombre de parent et un previousSibling.
    Pour gagner en simplicité, soit tu remplaces ton Anchor par un INPUT et tu travailles avec "this.form" dans ta fonction ; soit tu opère autrement : Vu que tu est en mesure de placer des noms de FORM dissociés et des numéros qui laissent penser au calcul d'une séquence, tu devrais passer en paramètre le nom du FORM et récupérer ce nom dans ta fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="getTopForm('myTopForm24')"

  15. #15
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Pour le THIS je l'ai juste mis en majuscule ici pour montrer la différence.
    Pour les tables, les BR et les TD qui ne se ferment pas c'est normal, je n'ai mis qu'un morceaux de code, sinon tout se ferme correctement un peu plus loin...

    finalement j'ai trouvé, en simplifiant la chose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="javascript:unique('news24.html','Le titre ici');">#24</a>
    et en fonction javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <script type="text/javascript">
    function unique(numero,title) 
    {window.open('/pages/news/news_unique.php?number='+number+'&title='+title); }
    </script>
    si je pouvais le faire afficher dans la même page, sans ouvrir une nouvelle fenêtre ca serai parfait (avec un _self en paramètre ça ne change rien)

    merci à tous de votre aide!

  16. #16
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Cela doit le faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <script type="text/javascript">
    function unique(number,title) {
      document.getElementById("id24").href='/pages/news/nws_unique.php?number='+ number + '&title=' + title, 'commentaires'); 
    }
    </script>
    <a id="id24" href="" onclick="unique('news24.html','Le titre ici');">#24</a>
    ou:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <script type="text/javascript">
    </script>
    <a href="" onclick="this.href='/pages/news/nws_unique.php?number=news24.html&title=Le titre ici';">#24</a>
    ERE

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Citation Envoyé par remrem13 Voir le message
    Pour le THIS je l'ai juste mis en majuscule ici pour montrer la différence.
    Pour les tables, les BR et les TD qui ne se ferment pas c'est normal, je n'ai mis qu'un morceaux de code, sinon tout se ferme correctement un peu plus loin...
    Ah bah, si en plus tu nous induis en erreur...

    Citation Envoyé par remrem13 Voir le message
    si je pouvais le faire afficher dans la même page, sans ouvrir une nouvelle fenêtre ca serai parfait (avec un _self en paramètre ça ne change rien)
    Comme en utilisant location ?

  18. #18
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par kernelfailure Voir le message
    Comme en utilisant location ?
    oui par exemple, mais cela ne marche pas, j'ai essayé windows.location.open et return false;mais je ne sais pas trop quoi mettre où
    pour rappel voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script type="text/javascript">function news_unique(number,title)
    {window.open('/pages/news/news_unique.php?number='+number+'&title='+title); }
    </script>
     
    <a href="javascript:news_unique('news.html','titre');">#num</a>

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    window.location.href

    ou, la FAQ :

    http://javascript.developpez.com/faq...avig#accesPage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Submit, javascript et php
    Par jvpic dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/10/2013, 09h31
  2. [PHP-JS] Gérer plusieurs submit
    Par Franckintosh dans le forum Langage
    Réponses: 4
    Dernier message: 16/11/2006, 15h18
  3. [Javascript / PHP] Tooltip sur une ligne php
    Par tchoukapi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/10/2005, 17h12
  4. Equivalent de submit javascript en ASP
    Par ahage4x4 dans le forum ASP
    Réponses: 4
    Dernier message: 17/06/2005, 16h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo