Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/02/2011, 22h50   #1
Invité de passage
 
Homme Erwan Finot
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations personnelles :
Nom : Homme Erwan Finot
Localisation : France

Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 2
Points : 2
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 :
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 :
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 !
AirOne70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 23h14   #2
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 930
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 930
Points : 4 744
Points : 4 744
Bonsoir,
comme est constituer ton document, il te suffit de mettre
Code :
1
2
  var Nbr = nom_fieldset.getElementsByTagName('input').length;
  alert("brute_" +Nbr/2);
juste en dessous de la ligne
Code :
 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.
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 23h48   #3
Invité de passage
 
Homme Erwan Finot
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations personnelles :
Nom : Homme Erwan Finot
Localisation : France

Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 2
Points : 2
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 ?
AirOne70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 09h46   #4
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 930
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 930
Points : 4 744
Points : 4 744
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 :
champ_utilisation.name = "brute[]";

Coté PHP, par exemple, tu récupères
Code php :
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 :
1
2
3
supprimer.onclick = function() {
  calque.parentNode.removeChild( calque);
}
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/02/2011, 11h15   #5
Invité de passage
 
Homme Erwan Finot
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations personnelles :
Nom : Homme Erwan Finot
Localisation : France

Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 2
Points : 2
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
AirOne70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 11h44   #6
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 930
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 930
Points : 4 744
Points : 4 744
1/ erreur dans le code il faut lire
Code php :
foreach($_POST['brute'] as $brute){
2/ pas compris
Citation:
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 ?
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 11h48   #7
Invité de passage
 
Homme Erwan Finot
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations personnelles :
Nom : Homme Erwan Finot
Localisation : France

Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 2
Points : 2
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.
AirOne70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 11h58   #8
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 847
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 847
Points : 1 344
Points : 1 344
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 ?
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 12h03   #9
Invité de passage
 
Homme Erwan Finot
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations personnelles :
Nom : Homme Erwan Finot
Localisation : France

Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 2
Points : 2
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 ....
AirOne70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 12h04   #10
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 930
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 930
Points : 4 744
Points : 4 744
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é.
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 12h09   #11
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 847
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 847
Points : 1 344
Points : 1 344
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".
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 12h10   #12
Invité de passage
 
Homme Erwan Finot
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations personnelles :
Nom : Homme Erwan Finot
Localisation : France

Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 2
Points : 2
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...
AirOne70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 12h27   #13
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 847
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 847
Points : 1 344
Points : 1 344
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.)
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/02/2011, 13h17   #14
Invité de passage
 
Homme Erwan Finot
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations personnelles :
Nom : Homme Erwan Finot
Localisation : France

Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 2
Points : 2
Je veut bien essayer mais foreach ne fonctionne pas avec GET !

Warning: Invalid argument supplied for foreach()

Code PHP :
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 :
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.
AirOne70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 14h16   #15
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 847
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 847
Points : 1 344
Points : 1 344
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/>";
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 14h17   #16
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 930
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 930
Points : 4 744
Points : 4 744
que cela soit avec une method POST ou GET,
avec un envoi, pour le GET, de la forme
Code :
?brute[]=Brute+%230&brute[]=Brute+%231&brute[]=Brute+%232
tu devrais obtenir le résultat suivant
Citation:
Liste des brutes !
  • Brute #0
  • Brute #1
  • Brute #2
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 14h28   #17
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 847
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 847
Points : 1 344
Points : 1 344
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.
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 16h02   #18
Invité de passage
 
Homme Erwan Finot
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations personnelles :
Nom : Homme Erwan Finot
Localisation : France

Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 2
Points : 2
C'est cool, le lien a bien les brute_1 brute_2, etc...
Mais ton code PHP ne m'affiche rien

Code PHP :
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 :
?brute_1=Brute&brute_2=Tara&brute_3=Dnz
AirOne70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 16h13   #19
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 847
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 847
Points : 1 344
Points : 1 344
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 :
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 :
?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.
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/02/2011, 16h23   #20
Invité de passage
 
Homme Erwan Finot
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations personnelles :
Nom : Homme Erwan Finot
Localisation : France

Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 2
Points : 2
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 ?
AirOne70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h57.


 
 
 
 
Partenaires

Hébergement Web