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 :

Script de cr�ation de champ


Sujet :

JavaScript

  1. #1
    Membre confirm�
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Janvier 2015
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Par d�faut Script de cr�ation de champ
    Bonjour � tous, j'aurai besoin d'un petit coup de main pour un script de cr�ation de champ qui ne fonctionne pas.
    Voici d�j� le code:
    Code html : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    <!DOCTYPE html>
    <html>
     
    <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title>sans titre 1</title>
     
    <script language="javascript">
    <!--
    /*function create_champ()
    {
    var i = parseInt(document.getElementById('nombre').value)
    var i = i + 1;
    if(i<'4'){
    document.getElementById('nombre').value = i;
    document.getElementById('zone_dynamique').innerHTML += '<div align="left" id="champ_"'+i+'> Nom du champ '+i+' :<input type="text" name="nom_test_'+i+'"> Choix '+i+' :<select name=" choix_test_'+i+'></select> <input name="suppr" type="button"  onClick="javascript:supprime_champ()" value="Supprimer un champ"></div>';
    }
    else{
    alert('Vous avez atteint le nombre maximum de ligne');
    exit();
    }
     
    }
    function supprime_champ(){
    	var cpt = parseInt(document.getElementById('nombre').value);
    	cpt--;
    	var parent = document.getElementById('zone_dynamique');
    	var NodeListe = parent.getElementsByTagName("div"); 
     
     
    	if( NodeListe.length >= 2 ){
    		var Enfant=NodeListe[NodeListe.length-1]
    		parent.removeChild(Enfant);
    		document.getElementById('nombre').value = cpt
    	}		
     
     
    }*/
     
     
    -->
    </script>
     
     
    <script>
      function choixChange(){
         var paragraphe = document.getElementById("paragrapheSupplementaire");
         paragraphe.innerHTML=document.getElementById("choix").hidden;
         if (document.getElementById("choix").value == "liste_1" || document.getElementById("choix").value == "bouton_1"){
            paragraphe.innerHTML+="<label>Rentrez les informations:</label>"
            +'<input name=sous_choix type="text">';
            /*+'<select name="orientation" id="orientation">'
            +'<option value="LP">LP</option>'
            +'<option value="master">master</option>'
            +"<option value=\"inge\">Ecole d'ingé</option>"
            +'<option value="boulot">Boulot</option>'
            +'<option value="autre">Autre</option>'
            +'</select>';*/
        
         }
      }
      choixChange();
    </script>
     
    </head>
     
    <body>
     
    <form id="test" name="test23" method="post" action="test_traitement23.php">
    Nombre de champs : <input name="nombre" id="nombre" type="text" value="1" size="3">
     
     
    	<div id="zone_dynamique">
    		<div align="left"> Nom du champ: 
    			<input name="nom_test" type="text"/>
    		Choix : <select name="choix_test" id="choix" onchange='choixChange();'>
    			<option value="test_1" selected="selected">Choisir un type</option>
    			<option value="champ_texte_1">Champ de texte</option>
    	        <option value="zone_email_1">Zone d'adresse e-mail</option>
    	        <option value="liste_1">Liste déroulante</option>
    	        <option value="bouton_1">Boutons radio</option>
    	        <option value="case_1">Cases à cocher</option>
    	        <option value="zone_texte_1">Zone de texte</option>
    		</select>
    		</div>
     
    		<div id="paragrapheSupplementaire">
     
            </div>
    		<input type="submit" value="envoyer"/>
    	</div>	
    </form>
     
    </body>
     
    </html>

    Et ma page de traitement:
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php
    print_r($_POST);
    $serveur = "localhost";
    $base = "xxx";
    $user = "root";
    $pass = "xxx";
     
    /*
    $mysqli est une nouvelle instance de la classe mysqli
    prédéfinie dans php et hérite donc de ses propriétés et méthodes
    connexion à la base de données
    */
    $mysqli = new mysqli($serveur, $user, $pass, $base);
    // si la connexion se fait en UTF-8, sinon ne rien indiquer
    $mysqli->set_charset("utf8");
    /*
    utilisation de la méthode connect_error
    qui renvoie un message d'erreur si la connexion échoue
    */
    if ($mysqli->connect_error) {
        die('Erreur de connexion ('.$mysqli->connect_errno.')'. $mysqli->connect_error);
    }
    else {
        echo 'connexion réussie : '.$mysqli->host_info;
    }
     
    $sql = '
    INSERT INTO `test23`(
    	`nom_test`, `choix_test`, `sous_choix`
    ) VALUES (
    	\''.$_POST['nom_test'].'\', \''.$_POST['choix_test'].'\', \''.$_POST['sous_choix'].'\'
    );
    ';
    $result = $mysqli->query($sql);
     
    echo $sql;
     
    $mysqli->close();	
     
    header("Location: test23.php");
     
    ?>
    En fait, je mets autant de champ que je veux dans une div pour cr�er un formulaire et gr�ce � mon code JS, je recopie ce qu'il y a dans la div pour me cr�er de nouveaux champs!
    C'est tr�s bien mais je me heurte � certains probl�mes notamment au niveau de la liaison avec la base de donn�es.
    C'est � dire que dans ma base de donn�es, mon champ nom va s�appeler "nom_test" alors que dans mon code JS, j'ai besoin d'incr�menter cette variable nom pour quelle soit diff�rente (avec "nom_test_'+i+'" par exemple).
    Du coup, je ne vois pas comment faire en sorte que cette variable "nom_test_'+i+'" soit reconnu dans ma base de donn�es?

    Auriez vous une id�e pour moi svp?
    Merci d'avance!

    PS: c'est normal si le nom de mes variables "nom_test" et "choix_test" de mon formulaire ne correspondent pas � ceux inscrit dans le JS.

  2. #2
    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 : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut
    j'ai besoin d'incr�menter cette variable nom pour quelle soit diff�rente (avec "nom_test_'+i+'" par exemple).
    C'est un besoin que tu t'imposes inutilement car il n'a pas lieu d'�tre. Seuls les id ont besoin d'�tre uniques dans la page.

    La technique habituelle pour traiter les champs ayant le m�me nom est d'utiliser une syntaxe de tableau :
    Code html : S�lectionner tout - Visualiser dans une fen�tre � part
    <input name="nom_test[]" type="text"/>
    Ainsi, dans ton code PHP, $_POST['nom_test'] sera un tableau classique que tu pourras parcourir � loisir.
    Pas de question technique par MP !
    Tout le monde peut participer � developpez.com, vous avez une id�e, contactez-moi !
    Mes formations video2brain : La formation compl�te sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'int�gration de JSFiddle et CodePen sur le forum

  3. #3
    Membre confirm�
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Janvier 2015
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Par d�faut
    Merci pour ta r�ponse rapide.
    Je n'avais pas pens� au tableau (j'ai honte ^^)
    Par contre pourrais tu m'expliquer comment adapter mon code JS avec ce tableau stp?

  4. #4
    Expert confirm�
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par d�faut
    c'est plus une question de JavaScript, demande peut-�tre � un mod�rateur de d�placer ta discussion

  5. #5
    Membre confirm�
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Janvier 2015
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Par d�faut
    Bonjour � tous, je up la conversation car je suis bloqu� sur mon probl�me JS.

    Pour expliquer, j'ai un outil formulaire qui permet � l'utilisateur de cr�er son formulaire de A � Z en donnant un nom et le type du champ.

    Mon probl�me est que je n'arrive pas � dupliquer le type si il s'agit d'un select ou d'une checkbox ou d'un bouton radio.

    Voici mon code avec la fonction JS qui me permet de rajouter des champs:

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    <!DOCTYPE html>
    <html>
     
    <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title>sans titre 1</title>
     
    <script language="javascript">
    <!--
    /*function create_champ()
    {
    var i = parseInt(document.getElementById('nombre').value)
    var i = i + 1;
    if(i<'4'){
    document.getElementById('nombre').value = i;
    document.getElementById('zone_dynamique').innerHTML += '<div align="left" id="champ_"'+i+'> Nom du champ '+i+' :<input type="text" name="nom_test_'+i+'"> Choix '+i+' :<select name=" choix_test_'+i+'></select> <input name="suppr" type="button"  onClick="javascript:supprime_champ()" value="Supprimer un champ"></div>';
    }
    else{
    alert('Vous avez atteint le nombre maximum de ligne');
    exit();
    }
     
    }
    function supprime_champ(){
    	var cpt = parseInt(document.getElementById('nombre').value);
    	cpt--;
    	var parent = document.getElementById('zone_dynamique');
    	var NodeListe = parent.getElementsByTagName("div"); 
     
     
    	if( NodeListe.length >= 2 ){
    		var Enfant=NodeListe[NodeListe.length-1]
    		parent.removeChild(Enfant);
    		document.getElementById('nombre').value = cpt
    	}		
     
     
    }*/
     
     
    -->
    </script>
     
     
    <script>
      function choixChange(){
         var paragraphe = document.getElementById("paragrapheSupplementaire");
         paragraphe.innerHTML=document.getElementById("choix").hidden;
         if (document.getElementById("choix").value == "liste_1" || document.getElementById("choix").value == "bouton_1"){
            paragraphe.innerHTML+="<label>Rentrez les informations:</label>"
            +'<input name=sous_choix type="text">';
            /*+'<select name="orientation" id="orientation">'
            +'<option value="LP">LP</option>'
            +'<option value="master">master</option>'
            +"<option value=\"inge\">Ecole d'ingé</option>"
            +'<option value="boulot">Boulot</option>'
            +'<option value="autre">Autre</option>'
            +'</select>';*/
     
         }
      }
      choixChange();
    </script>
     
    </head>
     
    <body>
     
    <form id="test" name="test23" method="post" action="test_traitement23.php">
    Nombre de champs : <input name="nombre" id="nombre" type="text" value="1" size="3">
     
     
    	<div id="zone_dynamique">
    		<div align="left"> Nom du champ: 
    			<input name="nom_test" type="text"/>
    		Choix : <select name="choix_test" id="choix" onchange='choixChange();'>
    			<option value="test_1" selected="selected">Choisir un type</option>
    			<option value="champ_texte_1">Champ de texte</option>
    	        <option value="zone_email_1">Zone d'adresse e-mail</option>
    	        <option value="liste_1">Liste déroulante</option>
    	        <option value="bouton_1">Boutons radio</option>
    	        <option value="case_1">Cases à cocher</option>
    	        <option value="zone_texte_1">Zone de texte</option>
    		</select>
    		</div>
     
    		<div id="paragrapheSupplementaire">
     
            </div>
    		<input type="submit" value="envoyer"/>
    	</div>	
    </form>
     
    </body>
     
    </html>
    Si quelqu'un a une id�e sur la fa�on d'on on peut proc�der, je suis preneur!

    Merci � tous!

  6. #6
    Mod�rateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Bonjour,
    tu n'as pas essay� de passer par la m�thode element.cloneNode() ?

  7. #7
    Membre confirm�
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Janvier 2015
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Par d�faut
    Bonjour, tout d'abord merci � NoSmoking pour la r�ponse qui marche nickel! N�anmoins, j'ai un petit souci quand je veux faire apparaitre mon champ "Param�tres". En fait quand je choisis "Liste d�roulante" ou "Bouton radio" dans mon select, j'ai un code JS qui m'affiche un nouveau champ (Param�tres) et la personne y rentre ses param�tres. �a, �a fonctionne tr�s bien sauf quand je rajoute une nouvelle zone pour la cr�ation des nouveaux champs.
    En fait mon champ "Param�tres" n'arrive pas � se "cloner" et si j'ai 3 select, les 3 iront pointer sur le m�me champ.
    C'est plut�t probl�matique, surtout que j'ai presque fini.
    Est ce que quelqu'un pourrait savoir d'o� �a provient?
    Sachant que Firebug me donne ceci comme erreur:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    TypeError: document.getElementById(...) is null
    Et je fais aussi parvenir mon code avec la modif de cr�ation de champ
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <!DOCTYPE html>
    <html>
     
    <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title>sans titre 1</title>
     
    <script language="javascript">
     
    function create_champ(){
    	var item = document.getElementsByTagName("div")[1];
    	var clone = item.cloneNode(true);
    	document.body.appendChild(clone);
    }
     
    function supprime_champ(){
    	var cpt = parseInt(document.getElementById('nombre').value);
    	cpt--;
    	var parent = document.getElementById('zone_dynamique');
    	var NodeListe = parent.getElementsByTagName("div"); 
     
     
    	if( NodeListe.length >= 2 ){
    		var Enfant=NodeListe[NodeListe.length-1]
    		parent.removeChild(Enfant);
    		document.getElementById('nombre').value = cpt;
    	}		
     
     
    }
     
     
    -->
    </script>
     
     
    <script>
      function choixChange(){
         var paragraphe = document.getElementById("paragrapheSupplementaire");
         paragraphe.innerHTML=document.getElementById("choix").value;
         if (document.getElementById("choix").value == "liste_1" || document.getElementById("choix").value == "bouton_1"){
            paragraphe.innerHTML+="<label>Rentrez les informations:</label>"
            +'<input name=sous_choix type="text">';
            /*+'<select name="orientation" id="orientation">'
            +'<option value="LP">LP</option>'
            +'<option value="master">master</option>'
            +"<option value=\"inge\">Ecole d'ingé</option>"
            +'<option value="boulot">Boulot</option>'
            +'<option value="autre">Autre</option>'
            +'</select>';*/
     
         }
      }
      choixChange();
    </script>
     
    </head>
     
    <body>
     
    <fieldset name="test">
    <legend>Test</legend>
    <form id="idTest" name="test23" method="post" action="test_traitement23.php">
    <!--Nombre de champs : <input name="nombre" id="nombre" type="text" value="1" size="3">-->
     
     
    	<div id="zone_dynamique">
    		<div id="test" align="left"> Nom du champ: 
    			<!--<input name="nom_test" type="text"/>-->
    			<textarea name="nom_test" id="id_nom" ></textarea>
    		Choix : <select name="choix_test" id="choix" onchange='choixChange();'>
    			<option value="test_1" selected="selected">Choisir un type</option>
    			<option value="champ_texte_1">Champ de texte</option>
    	        <option value="zone_email_1">Zone d'adresse e-mail</option>
    	        <option value="liste_1">Liste déroulante</option>
    	        <option value="bouton_1">Boutons radio</option>
    	        <option value="case_1">Cases à cocher</option>
    	        <option value="zone_texte_1">Zone de texte</option>
    		</select>
    		</div>
     
    		<div id="paragrapheSupplementaire">
     
    		</div>
     
    		<input type="button" onClick="javascript:create_champ()" value="Ins&eacute;rer un autre champ"/>
    		<input type="submit" value="envoyer"/>
    	</div>	
    </form>
    </fieldset>
     
    </body>
     
    </html>
    Merci d'avance!

    Cordialement.

  8. #8
    Mod�rateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Plusieurs maladresse dans ton script.

    La premi�re c'est d�appeler la fonction choixChange() avant que le DOM ne soit construit ce qui te vaut une magnifique ERREUR
    TypeError: document.getElementById(...) is null
    Ensuite dans la fonction tu fait appel � un getElementById qui r�cup�re l'�l�ment qui vient de d�clencher la fonction
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    function choixChange(){ // c'est l'élément "choix" qui appelle la fonction
         var paragraphe = document.getElementById("paragrapheSupplementaire");
         paragraphe.innerHTML=document.getElementById("choix").value;
    cela peut s'�crire avantageusement, en changeant la d�finition de la fonction, ajout d'un param�tre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    function choixChange(obj){
         var valeur = obj.value;  // récupération directe de la valeur du SELECT
         var paragraphe = document.getElementById("paragrapheSupplementaire");
         paragraphe.innerHTML= valeur;
        // et pour le test
         if ( valeur == "liste_1" || valeur == "bouton_1"){
          // la suite...
    san soublier de modifier le HTML comme suit
    Code html : S�lectionner tout - Visualiser dans une fen�tre � part
    Choix : <select name="choix_test" id="choix" onchange='choixChange(this);'>
    on n'a m�me plus besoin de mettre une ID.

    Il ne faut pas �galement oublier que le clonage clone aussi l'ID de l'�l�ment et celle ci doit �tre unique dans une page.

    Voila un bon d�but!

    Au passage <script language="javascript"> est obsol�te et peut �tre remplac� par un simple <script> en HTML5.

  9. #9
    Membre confirm�
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Janvier 2015
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Par d�faut
    Merci, �a fonctionne un peu mieux mais je pense que je vais partir sur un autre fonctionnement plus simple, qui me permettra de ne g�rer qu'une div � la fois.

    Merci encore.

Discussions similaires

  1. Script de cr�ation de base
    Par andlio dans le forum Oracle
    R�ponses: 20
    Dernier message: 20/07/2005, 13h39
  2. Cr�ation de champs
    Par stailer dans le forum MS SQL Server
    R�ponses: 2
    Dernier message: 11/02/2005, 17h14
  3. passage nom des contraintes de MPD au script de cr�ation BD
    Par mari�mdiaw dans le forum D�cisions SGBD
    R�ponses: 4
    Dernier message: 14/01/2005, 13h18
  4. [IBExpert]Recuperer le script de cr�ation de la BD ?
    Par Sitting Bull dans le forum Outils
    R�ponses: 2
    Dernier message: 01/10/2004, 11h15
  5. R�ponses: 3
    Dernier message: 24/10/2003, 21h46

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