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 :

Formulaire "illimité" mais ID différent


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut Formulaire "illimité" mais ID différent
    Bonjour à tous,
    J'aimerais créer une sorte de formulaire avec un boutton "Ajouter" pour avoir + de cases (et un bouton "X" pour la supprimer, mais il doit y avoir au minimum 1 ligne).
    J'ai déjà commencé en m'aidant de ceci: champ dynamique mais bouton ajout dessous
    Il fonctionne très bien sauf que, pour plus de facilité j'aimerais que chaque nouvel input est son propre Id (brute_1, brute_2, brute_3, etc...) mais je ne sais pas comment faire

    Voici où j'en suis :

    Code JavaScript : 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
    function ajouter() {
     
        	var nom_fieldset = document.getElementById('choix');
     
    	var calque = document.createElement('div');
     
    	var champ_utilisation = document.createElement('input');
    	champ_utilisation.type = 'text';
    	champ_utilisation.className = 'monInput';
    	champ_utilisation.name = "brute";
     
    	var supprimer = document.createElement('input');
    	supprimer.type = 'button';
    	supprimer.value = 'X';
     
    	supprimer.onclick = function() {
    		le_calque_a_supprimer = this.parentNode;
    		lefieldset = le_calque_a_supprimer.parentNode;
    		lefieldset.removeChild(le_calque_a_supprimer);
     
    	}
     
    	calque.appendChild(champ_utilisation);
    	calque.appendChild(document.createElement('br'));
    	calque.appendChild(supprimer);
    	calque.appendChild(document.createElement('br'));
    	calque.appendChild(document.createElement('br'));
     
    	nom_fieldset.appendChild(calque);
    }

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <form action='./viewer.php' method='get'>
    	<fieldset id='choix'>
    		<legend>VOS BRUTES</legend><br />
    		<input type='button' value='Ajouter' onclick='ajouter()' /><br /><br />
    		<input type="text" id="brute_1" class="monInput" name="brute_1" value="Brute"/><br /><br />
    	</fieldset>
    <button class="go" type="submit"></button></form>

    Je pense qu'il faut donc que le script fasse:

    Récupérer le dernier ID (le plus bas) qui commence par "brute_", ajouter 1 au chiffre trouvé ( var i2 = i + 1; ) et créer une nouvel ligne avec cet ID.

    Merci d'avance !

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonsoir,
    comme est constituer ton document, il te suffit de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      var Nbr = nom_fieldset.getElementsByTagName('input').length;
      alert("brute_" +Nbr/2);
    juste en dessous de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var nom_fieldset = document.getElementById('choix');
    de ta fonction pour récupérer la dernière ID utilisé, mais comme tu as le droit de supprimer une ligne, cela ne fonctionnera que si il y a des ajouts. Il est peut donc être souhaitable de gérer un tableau d'ID/NAME.

    La question à se poser est as tu besoin d'une ID pour chaque contrôle, un name du type brute[] te permettrais de récupérer coté serveur un tableau.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    C'est un faux formulaire, les infos vont etre utilise par du PHP qui affichera (ou pas) le code source de la page des brutes, donc je sais pas se qui est le mieux tu me conseilles quoi ?

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    si les ID ne te servent à rien, à prendre au sens HTML bien sûr, autant ne pas les mettre et attribuer un NAME brute[] à chaque nouveau contrôle.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    champ_utilisation.name = "brute[]";

    Coté PHP, par exemple, tu récupères
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    echo 'Liste des brutes !<ul>';
    foreach($_POST['brute'] as $brute){
      echo '<li>'.$brute.'</li>';
    }
    echo '</ul>';
    ?>
    Autre chose comme tu as la référence à la DIV ajoutée, tu peux simplifier la fonction de suppression comme suit,
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    supprimer.onclick = function() {
      calque.parentNode.removeChild( calque);
    }

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Merci pour les codes, ca fonctionne bien ! Mais serait-t-il possible de les avoirs dans le lien pour que l'utilisateur n'est pas besoin de retaper les noms à chaque fois ?
    J'ai essayé de modifier ton POST en GET mais sa ne fonctionne pas

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    1/ erreur dans le code il faut lire
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($_POST['brute'] as $brute){
    2/ pas compris
    Mais serait-t-il possible de les avoirs dans le lien pour que l'utilisateur n'est pas besoin de retaper les noms à chaque fois ?

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    J'avais vu l'erreur dans ton code mais je l'ai corrigée

    Pour ton 2), j'aimerais peut-être:

    .../viewer.php?brute1=Brute&brute2=Brute&brute3=Brute&....

    C'est donc pour sa que au départ, je voulais des ID différents (sauf que c'est le Name qui doit avoir le chiffre différent ). Donc le Name avec des chiffres différent pour l'identifier dans le lien.

  8. #8
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Citation Envoyé par AirOne70 Voir le message
    J'avais vu l'erreur dans ton code mais je l'ai corrigée

    Pour ton 2), j'aimerais peut-être:

    .../viewer.php?brute1=Brute&brute2=Brute&brute3=Brute&....
    GET au lieu de POST ?

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Citation Envoyé par Willpower Voir le message
    GET au lieu de POST ?
    Avec des GET, foreach ne fonctionne plus

    Warning: Invalid argument supplied for foreach() in ....

  10. #10
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    si tu ne veux as passer par un tableau en récupération, qui me semble le plus pratique, dans ce cas à chaque création/suppression il te faut re NAME r les contrôles dans l'ordre chrono, mais pas sûr dans voir la réelle utilité.

  11. #11
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    si tu ne veux as passer par un tableau en récupération, qui me semble le plus pratique, dans ce cas à chaque création/suppression il te faut re NAME r les contrôles dans l'ordre chrono, mais pas sûr dans voir la réelle utilité.
    L'utilité si j'ai bien compris, c'est qu'il veut pouvoir réutiliser/partager son url pour ses view de ses brutes. Donc sans "POST".

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Je veut bien un tableau mais je vois pas comment sa fonctionne...
    C'est un peu flou dans ma tête....

    Willpower, oui c'est sa...

  13. #13
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Perso je reglerai ton problème des names non pas au moment des ajouts mais au moment du submit.

    Du genre :

    Mon_form.onsubmit = function() { var inputs = this.getElementsByTagNames("input"); var i=1; for(var j=0;j<inputs.length;j++) if(inputs[j].name == "brute_" ) inputs[j].name += i++; };

    On ayant initialement nommé toutes tes brutes "brute_".


    ( je n ai pas testé le.code proposé, donc méfie toi des erreurs éventuelles.)

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Je veut bien essayer mais foreach ne fonctionne pas avec GET !

    Warning: Invalid argument supplied for foreach()

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    echo 'Liste des brutes !<ul>';
    foreach($_GET['brute'] AS $brute){
      echo '<li>'.$brute.'</li>';
    }
    echo '</ul>';
    ?>

    Et même avec GET, les "brute_" ne changent pas, il n'y a aucun chiffre au bout Faut que je trouve le problème...

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	var submit = document.getElementById('submit');
    	submit.onsubmit = function() { 
    	var inputs = this.getElementsByTagNames("input");
    	var i=1;
    	for(var j=0;j<inputs.length;j++) if(inputs[j].name == "brute_" ) inputs[j].name += i++;
    	};

    Bien sûr, j'ai ajouté a mon bouton d'ajout, l'ID = submit.

  15. #15
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    C'est sur le form qu il faut faire le onsubmit.
    Sinon pour le coter serveur / php je ne m'y connais pas assez pour te proposer une solution. (mais de toutes façons je pense que tu peux oublier le foreach du POST

    $i =1;
    while(isset($_GET["brute_"+$i]))
    echo $_GET["brute_"+$i++]+"<br/>";

  16. #16
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    que cela soit avec une method POST ou GET,
    avec un envoi, pour le GET, de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?brute[]=Brute+%230&brute[]=Brute+%231&brute[]=Brute+%232
    tu devrais obtenir le résultat suivant
    Liste des brutes !
    • Brute #0
    • Brute #1
    • Brute #2

  17. #17
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Sinon pour ma fonction il n y à pas de "s" au bout de getElementsByTagName. Désolé.


    Édit. Avec tout ce que je t'ai donné, je suis quasi sur que cette fois il y à moyen de faire un truc qui fonctionne.

  18. #18
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    C'est cool, le lien a bien les brute_1 brute_2, etc...
    Mais ton code PHP ne m'affiche rien

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    echo '<br /><br />Liste de brutes.';
    $i =1;
    while(isset($_GET["brute_"+$i]))
    echo $_GET["brute_"+$i++]+"<br />";
    echo '<br /><br />Fin de la liste...';
    ?>

    Pourtant, le lien a ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?brute_1=Brute&brute_2=Tara&brute_3=Dnz

  19. #19
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Citation Envoyé par AirOne70 Voir le message
    C'est cool, le lien a bien les brute_1 brute_2, etc...
    Mais ton code PHP ne m'affiche rien

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    echo '<br /><br />Liste de brutes.';
    $i =1;
    while(isset($_GET["brute_"+$i]))
    echo $_GET["brute_"+$i++]+"<br />";
    echo '<br /><br />Fin de la liste...';
    ?>

    Pourtant, le lien a ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?brute_1=Brute&brute_2=Tara&brute_3=Dnz
    en php c'est des . au lieu des + pour lier les string ( désolé )
    while(isset($_GET["brute_".$i]))
    echo $_GET["brute_".$i++]."<br />";

    Autrement si ça va tjs pas. Je ne sais pas. Je ne suis pas très calé côté php.

  20. #20
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Ah oui sa fonctionne ! Merci beaucoup à vous deux !
    J'avais bien remplacé un + par un ., mais je ne l'avais pas fait partout ^^

    Sinon pendant que vous êtes là, j'ai une autre page qui a du mal à fonctionner
    Cette page supprime les doublons présents dans la liste que l'utilisateur envoie. J'ai réussi à faire un Batch qui fonctionne mais en ligne il ne fonctionne pas pareil...

    C'est du PHP, je rouvre un sujet ou je tente ici ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [débutant] les quotes " et ' pour 3 codes différents
    Par Christophe93250 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/03/2007, 21h11
  2. [MySQL] formulaire et double quotes
    Par matio dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/03/2007, 17h34

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