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 :

Copier les valeurs de champs input dans des champs générés par une boucle foreach php


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Copier les valeurs de champs input dans des champs générés par une boucle foreach php
    Bonjour,

    Je mets en place une billetterie en ligne sur le site d'une salle de cinéma.
    Le spectateur peut acheter plusieurs tickets à des tarifs différents et des séances différentes dans la même commande.
    Pour chaque ticket, je dois créer une ligne dans ma table contenant les coordonnées de l'acheteur mais je voudrais que le spectateur n'ait à saisir qu'une seule fois ses coordonnées.
    J'ai donc créé un formulaire avec trois champs (nom/prenom/email) à remplir par le spectateur et en dessous les mêmes champs pour chaque ticket générés par une boucle foreach et qui peuvent se remplir automatiquement d'après les champs saisis par le spectateur si celui-ci clique sur "copier les coordonnées".
    Débutante en Javascript, je n'arrive pas à copier ces champs.

    En pièce jointe, une image de ce que j'aimerais obtenir lorsque l'acheteur clique sur "Copier les coordonnées"

    et ci-dessous le code html généré
    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
     
    <!-- lacheteur remplit les trois champs nom, prenom, email -->
    <tr height="30">
      <td colspan="3">
      Nom* <input style="width:80px;" class="fValidate['required']" id="lastnameall" name="lastnameall" value="Jean" type="text">
      Prénom* <input style="width:80px;" class="fValidate['required']" id="firstnameall" name="firstnameall" value="Dupont" type="text">
      Email* <input style="width:120px;" class="fValidate['required']" id="emailall" name="emailall" value="jd@wanadoo.fr" type="text">
      </td>
    </tr>
     
    <!-- lacheteur peut copier ses coordonnées si tous les billets sont à son nom -->
    <tr height="45">
      <td colspan="3" valign="top">
      <input onclick="copier()" value="Copier vos coordonnées" type="button">
      </td>
    </tr>
     
    <!-- Champs générés par une boucle foreach pour chaque ticket -->
    <tr><td><strong>PLEIN TARIF WEB Registration :</td>	<td colspan="2" align="left"> Date de la séance : Jeudi 23 Août 2012</td></tr>
    <tr><td> Prénom</td><td><input name="firstname" value="Jean" id="firstname[0][3149]" default="" type="text"></td></tr>
    <tr><td> Nom</td><td><input name="lastname" value="Dupont" id="lastname[0][3149]" default="" type="text"></td></tr>
    <tr><td> Email</td><td><input name="email" value="jd@wanadoo.fr" id="email[0][3149]" default="" type="text"></td></tr>
     
    <tr><td><strong>PLEIN TARIF WEB Registration :</td>	<td colspan="2" align="left"> Date de la séance : Samedi 11 Août 2012</td></tr>
    <tr><td> Prénom</td><td><input name="firstname" value="Jean" id="firstname[0][3150]" default="" type="text"></td></tr>
    <tr><td> Nom</td><td><input name="lastname" value="Dupont" id="lastname[0][3150]" default="" type="text"></td></tr>
    <tr><td> Email</td><td><input name="email" value="jd@wanadoo.fr" id="email[0][3150]" default="" type="text"></td></tr>
     
    <tr><td><strong>PLEIN TARIF WEB Registration :</td>	<td colspan="2" align="left"> Date de la séance : Dimanche 12 Août 2012</td></tr>
    <tr><td> Prénom</td><td><input name="firstname" value="Jean" id="firstname[0][3151]" default="" type="text"></td></tr>
    <tr><td> Nom</td><td><input name="lastname" value="Dupont" id="lastname[0][3151]" default="" type="text"></td></tr>
    <tr><td> Email</td><td><input name="email" value="jd@wanadoo.fr" id="email[0][3151]" default="" type="text"></td>
    </tr>
    <tr>
    <tr><td colspan="3"><input value="agree_terms" id="terms" type="checkbox">&nbsp; J'accepte les <a href="/" target="_blank">conditions générales de vente</a>.</td></tr>


    Voici mon code php et javascript. J'arrive uniquement à copier les champs du dernier ticket. Je suppose qu'il faudrait plutôt mettre ma fonction dans le <head> et utiliser une boucle for mais je n'ai pas réussi à le faire.
    Code php : 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
     
    <?php
    ##Ici lacheteur remplit ses coordonnées ##
    ?>
    <tr height="30">
      <td colspan="3">
      Nom*    <input class="fValidate['required']" type="text"  id="lastnameall"  name="lastnameall"  value="" />  
      Prénom*<input  class="fValidate['required']" type="text"  id="firstnameall" name="firstnameall"  value="" />
      Email* <input  class="fValidate['required']" type="text"  id="emailall"     name="emailall"  value="" />
      </td>
    </tr>
     
    <tr height="45">
      <td colspan="3" valign="top">
    <input type="button" onclick="copier()" value="Copier vos coordonnées" /></td></tr>
     
    <?php
    ##On copie les coordonnées saisies ##
    // pour chaque séance
    foreach($cart['eventids'] as $ekey => $evalue)
    {
    	// pour chaque ticket				
    	foreach($cart['ticktes'] as $tkey=>$tvalue)
    	{				
    		// pour chaque champ du formulaire (le formulaire et ses champs sont identifiés dans ma base de données)				
    		foreach ($fields as $key=>$field)
    		{
    		echo '<td class="regpro_vtop_aleft"><input type="text" name="form['.$row->name.']['.$count.']'.$position_html.'" value="'.$row->default_value.' id="'.$row->name.'['.$count.']'.$position_html.'" '.$row->params.' />';		
    	        }
     
    	$nom = "";
    	$prenom = "";
    	$email = "";
    	$nom = 'lastname['.$formcounter.']['.$cart["ticktes"][$tkey]->id.']';
    	$prenom = 'firstname['.$formcounter.']['.$cart["ticktes"][$tkey]->id.']';
    	$email = 'email['.$formcounter.']['.$cart["ticktes"][$tkey]->id.']';
    	?>
    	<script type = "text/javascript">
    	function copier() 
    	{
    	var nomspec = document.getElementById("lastnameall").value;
    	document.getElementById("<?php echo $nom;?>").value = nomspec;								
     
    	var prenomspec = document.getElementById("firstnameall").value;
    	document.getElementById("<?php echo $prenom;?>").value = prenomspec;		
     
    	var emailspec = document.getElementById("emailall").value;
    	document.getElementById("<?php echo $email;?>").value = emailspec;		
    	}
    	</script>		
     
    	}
    }

    Merci pour votre aide
    Images attachées Images attachées  

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Points : 125
    Points
    125
    Par défaut
    Salut,

    Tu redéfinis sans cesse ta fonction javascript "copier", ce qui fait qu'au final elle ne contient que les valeurs du dernier passage, donc du dernier ticket.

    Je ne comprends pas très bien ce que tu cherches à faire, mais peut-être vaudrait-il mieux déclarer un objet javascript qui contiendra ces informations, puis travailler avec cet objet :

    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
     
    // commence l'objet javascript (sous forme de texte)
    $javascript_var="{";
    foreach(...){
        ...
    // ajoute la virgule, si nous ne sommes pas au premier élément ajouté à l'objet
        if($javascript_var!="{")
        {
            $javascript_var.=",";
        }
    // ajoute un l'élément à l'objet
        $javascript_var.="$var1:'$var2'";
    }
    // ferme l'objet javascript
    $javascript_var.="}";
     
    <script type="text/javascript">
        function copier(){
    // "transforme" la chaîne php en objet javascript à proprement parler
            var variable=<?php echo $javascript_var; ?>;
            ...
        }
    </script>
    PS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $nom = "";
    	$prenom = "";
    	$email = "";
    	$nom = 'lastname['.$formcounter.']['.$cart["ticktes"][$tkey]->id.']';
    	$prenom = 'firstname['.$formcounter.']['.$cart["ticktes"][$tkey]->id.']';
    	$email = 'email['.$formcounter.']['.$cart["ticktes"][$tkey]->id.']';
    Il n'est pas nécessaire de déclarer les variables vides, tu peux directement leur passer une valeur

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Merci mais hélas je n'ai pas encore le niveau pour appliquer ta réponse pourtant détaillée. Je me suis donc tournée avec succès vers jquery qui a répondu à ma demande avec ça :
    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $(document).ready(function()
    { 
     // Copie les valeurs des champs emailall, lastnameall et firsnameall dans les champs ticket-email, ticket-lastname, ticket-firstname
    $("input#ticket-email").val($("input#emailall").val()); 
    $("input#ticket-lastname").val($("input#lastnameall").val()); 
    $("input#ticket-firstname").val($("input#firstnameall").val()); 
     
    });

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

Discussions similaires

  1. Copier la valeur d'un input dans d'autres
    Par Invité dans le forum jQuery
    Réponses: 12
    Dernier message: 16/05/2013, 09h49
  2. Insérer la valeur d'un input dans un champ texte
    Par CrasherSEP dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/11/2011, 11h36
  3. Copier les résultats d'un find dans des variables
    Par Geoffrey49000 dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 11/08/2011, 16h44
  4. Afficher les coordonnées d'un layer dans des champs texte
    Par renaud26 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 15/08/2006, 13h53
  5. Copier les valeurs d'un formulaire dans une table
    Par Cyphen dans le forum Access
    Réponses: 4
    Dernier message: 19/06/2006, 10h45

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