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 :

Remplir un panier en js sans bouton submit


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut Remplir un panier en js sans bouton submit
    Bonjour à tous et à toutes,
    Je cherche à faire un panier en js pour éviter les boutons submit comme sur ce site https://www.cartouche-vide.fr/2-tari...es_encre_vides

    J'ai la liste de mes produits en php j'ai le petit code js qui me permet de calculer et afficher le prix de rachat mais pour l'instant pour une seul référence car je ne vois pas comment récupérer les informations (id, prix) pour définir les id des input et le prix d'achat pour le calcul en js.

    Voici mon code actuel
    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
    <?php
    $nbr_prod = $bdd->query('SELECT * FROM '.TABLE[8].' ORDER BY marque ASC');
    while($resultats = $nbr_prod->fetch()) //boucle affichant les résultats
            {
                    $liste_produits[$resultats['marque']][] = $resultats;
            }
    $nbr_prod->closeCursor();
    echo'<div id="contenu">';
    foreach ($liste_produits as $key => $resultat_values)
            {
                    echo'<div class="bandeau_marque">
                            <div class="text_marque">'.stripslashes(trim($key)).'</div>
                            <div class="bt_marque" id="bouton_detail'.stripslashes(trim($key)).'" onclick="afficher_detail(\'detail'.stripslashes(trim($key)).'\')"><img src="'.VARIABLE[0].'/images/haut.png" alt="Afficher la liste des cartouches rachetées" loading="lazy"/></div>
                    </div>';
                    echo'<div id="detail'.$key.'">';
                    echo'<div class="ligne_gr_ecran"><div class="col_num_article">Référence</div><div class="col_desc">Description</div><div class="col_tarif">Prix</div><div class="col_qte">Qte</div></div>';
                    foreach($resultat_values as $cle => $values)
                            {       
                                    echo'<div class="ligne_article"><div class="col_num_article"><strong class="txt_pt_ecran">Référence :&nbsp;</strong>'.stripslashes(trim($values['num_article'])).'</div>
                                    <div class="col_desc"><strong class="txt_pt_ecran">Description :&nbsp;</strong>'.nl2br(stripslashes(trim($values['description_article']))).'</div>
                                    <div class="col_tarif"><strong class="txt_pt_ecran">Prix :&nbsp;</strong>'.trim(number_format($values['tarif_rachat'],2,'.',' ')).' €</div>';
                                    echo'<div class="col_qte">';
                                            echo'<form method="POST" action="'.VARIABLE[0].'/ajout-produit.html" class="form_listing">';
                                                    echo'<input placeholder="Qte" type="text" name="qte"/>';
                                                    echo'<input type="submit" value="Valider"/><input name="id" type="hidden" value="'.$values['id'].'">';
                                            echo'</form>';
                                    echo'</div></div><hr class="sexy_line"/>';                              
                            }
                    echo '</div>';
            }
    echo'</div>';
    echo'<pre>';
    print_r ($liste_produits);
    echo'</pre>';
     
    ?>
    Voici mon tableau
    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
    Array
    (
        [BROTHER] => Array
            (
                [0] => Array
                    (
                        [id] => 53
                        [0] => 53
                        [marque] => BROTHER
                        [1] => BROTHER
                        [num_article] => 223
                        [2] => 223
                        [description_article] => BROTHER 223 - Origine VIDE
                        [3] => BROTHER 223 - Origine VIDE
                        [nom_image] => 
                        [4] => 
                        [tarif_rachat] => 0.10
                        [5] => 0.10
                    )
     
            )
     
        [CANON] => Array
            (
                [0] => Array
                    (
                        [id] => 1
                        [0] => 1
                        [marque] => CANON
                        [1] => CANON
                        [num_article] => CVC37
                        [2] => CVC37
                        [description_article] => VIDE CANON PG37 BLACK
                        [3] => VIDE CANON PG37 BLACK
                        [nom_image] => 
                        [4] => 
                        [tarif_rachat] => 0.50
                        [5] => 0.50
                    )
     
                [1] => Array
                    (
                        [id] => 2
                        [0] => 2
                        [marque] => CANON
                        [1] => CANON
                        [num_article] => CVC38
                        [2] => CVC38
                        [description_article] => VIDE CANON CL38
                        [3] => VIDE CANON CL38
                        [nom_image] => 
                        [4] => 
                        [tarif_rachat] => 0.50
                        [5] => 0.50
                    )
            )
     
        [HP] => Array
            (
                [0] => Array
                    (
                        [id] => 27
                        [0] => 27
                        [marque] => HP
                        [1] => HP
                        [num_article] => CVH15
                        [2] => CVH15
                        [description_article] => VIDE HP C6615 POUR HP15
                        [3] => VIDE HP C6615 POUR HP15
                        [nom_image] => 
                        [4] => 
                        [tarif_rachat] => 1.00
                        [5] => 1.00
                    )
     
                [1] => Array
                    (
                        [id] => 28
                        [0] => 28
                        [marque] => HP
                        [1] => HP
                        [num_article] => CVH301BV1
                        [2] => CVH301BV1
                        [description_article] => VIDE HP CH561 POUR HP301 BLACK - NOUVELLE VERSION(V1)
                        [3] => VIDE HP CH561 POUR HP301 BLACK - NOUVELLE VERSION(V1)
                        [nom_image] => 
                        [4] => 
                        [tarif_rachat] => 2.50
                        [5] => 2.50
                    )
            )
     
    )
    Voici mon js
    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
    <script>
    function Function_calcul() {
            var nbr_article = document.getElementById("input1").value;
            var prix_achat = Number(2);//à remplacer par le prix d'achat [tarif_rachat]
            var total = (Number(nbr_article) * Number(prix_achat));
            document.getElementById("total_article").innerHTML = total;
    }
    </script>
     
    <ul>
        <li class="default" id="form_amount_li">Nbr article
    		<input id="input1" maxlength="8" name="amount" type="text" value="" onkeyup="Function_calcul()"/>
    	</li>
    </ul>
    <span id="total_article"></span>
    Il faudrait que je récupère [id] de chaque produit en js pour remplacer input1 de cette ligne (var nbr_article = document.getElementById("input1").value par le numéro unique du produit mais je ne vois pas comment faire.
    Est ce que quelqu'un peut m'aider ?
    Merci d'avance.
    Voici l'url pour voir en ligne mon projet https://sergiocrea.fr/test.html

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 666
    Par défaut
    petite parenthèse en php : utilisez ->fetch(PDO::FETCH_ASSOC) comme cela vous n'aurez plus les éléments avec les index numériques qui ne vous serviront pas dans votre page.

    ensuite quand vous avez une page qui mélange php et javascript, je vous conseille de d'abord faire un exemple fonctionnel en javascript et quand tout est bon, vous passez à la phase php en rendant l'exemple dynamique.

    là par exemple, j'ai fait un code qui se limite à un produit. le prochaine étape est de le modifier pour rajouter un 2e produit (et peut-être un 3e pour être sûr que ça fonctionne) :
    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
     
    <div class="produit" data-prix-unitaire="10">
     
    	<span class="colonne prix">
    		Prix unitaire&nbsp;: 45,00 €
    	</span>
     
    	<span class="colonne nombre">
    		<input oninput="changer_prix(event)"/>
    	</span>
     
    	<span class="colonne total">
    		Total&nbsp;:
    		<span class="somme_total"></span>
    	</span>
     
    </div>
     
     
     
    <script>
     
    function changer_prix(e)
    {
            
            const champ_input = e["target"];
            
            const ligne_produit = champ_input.closest(".produit"); // recherche parmi les balises parentes
            
            const nombre_produit = champ_input["value"];
            const prix_unitaire = ligne_produit["dataset"]["prixUnitaire"];
            
            const zone_total = ligne_produit.getElementsByClassName("somme_total")[0];
            zone_total["textContent"] = nombre_produit * prix_unitaire + " €";
            
    }
     
    </script>

  3. #3
    Membre éclairé
    Homme Profil pro
    Educateur spécialisé
    Inscrit en
    Janvier 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Educateur spécialisé
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 238
    Par défaut
    merci pour le PDO::FETCH_ASSOC je savais bien qu'il y avait un truc pour enlever les clés numériques.
    J'ai avancé un peut voici mon code
    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
     
    <?php
    $nbr_prod = $bdd->query('SELECT * FROM '.TABLE[8].' ORDER BY marque ASC');
    while($resultats = $nbr_prod->fetch(PDO::FETCH_ASSOC)) //boucle affichant les résultats
            {
                    $marque_article[$resultats['id']] = $resultats;
            }
    $nbr_prod->closeCursor();
    $marque_article_json = json_encode($marque_article);
    ?>
    <p id='p1'></p>
    <script>
      var id_js = <?php print $marque_article_json;?> ;
    function Function_calcul() {
          for(let propriete in id_js){
            var valu='input'+id_js[propriete]['id'];
    	var nbr_article = document.getElementById(valu).value;
    	var prix_achat = id_js[propriete]['tarif_rachat'];
    	}
     
    	var total = (Number(nbr_article) * Number(prix_achat));
    	document.getElementById("total_article").innerHTML = total;
    }
    </script>
    <ul>
        <li class="default" id="form_amount_li">Nbr article
    		<input id="input53" maxlength="8" name="amount" type="text" value="" onkeyup="Function_calcul()"/>
    		<input id="input54" maxlength="8" name="amount" type="text" value="" onkeyup="Function_calcul()"/>
    	</li>
    </ul>
    <span id="total_article"></span> €
    ça fonctionne presque si je met var nbr_article = document.getElementById(valu).value; hors de la boucle for mais seul la référence avec le dernier id donc 54 fonctionne.
    C'est normale mais je me demande comment faire du coup.

Discussions similaires

  1. Liste déroulante sans bouton Submit.
    Par RougeCerise dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 11/09/2008, 10h50
  2. Transmettre valeur checkbox SANS bouton "Submit"
    Par rudylar dans le forum Langage
    Réponses: 4
    Dernier message: 27/06/2008, 11h58
  3. Transmettre valeur checkbox SANS bouton "Submit"
    Par rudylar dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 25/06/2008, 17h48
  4. Listes déroulantes : valider la sélection sans bouton submit
    Par neimad31 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/11/2007, 14h47
  5. liste,formulaire lecture sans bouton submit
    Par BernardT dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/06/2006, 07h43

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