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

AJAX Discussion :

[AJAX] Modifier certaines cellules d'un tableau via ajax


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2009
    Messages : 95
    Par défaut [AJAX] Modifier certaines cellules d'un tableau via ajax
    Bonjour,
    je voudrais réaliser un formulaire de bon de commande. Pour ce faire j'utilise un tableau généré via un foreach en php comme ceci:
    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
     
    <?php foreach($_SESSION['user']['panier'] as $id=>$photo):?>
      <tr id="<?php echo $id;?>">
        <td><img src="<?php echo DOSSIER_GALERIE;?>mini-<?php echo $id;?>.html" id="1" title="<?php echo $photo['nom'];?>" alt="<?php echo $photo['nom'];?>"/></td>
        <td>
          <label>Quantité</label><br />
          <select onchange="calculPanier()" id="quantite" name="quantite">
                <option selected="selected" value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <!-- etc.... -->
              </select>
              </td>
              <td><label>Format</label><br />
              <select onchange="calculPanier()" id="format" name="format">
                <option selected="selected" value="1">10 x 15</option>
                <option value="2">15 x 21</option>
                <option value="3">20 x 30</option>
                <option value="4">30 x 45</option>
                <option value="0">Autres</option>
              </select></td>
            <td width="120" id="prixunitaire" height="70"></td>
            <td width="120" id="prixsoustotal" height="70"></td>
          </tr>
        <?php endforeach;?>
          <tr height="50" align="right">
            <td colspan="6"><span class="commentaires">(Le montant indiqué est TTC)</span>   Total :</td>
              <td id="total"></td>
            </tr>
    Je voudrais modifier les valeurs des cellules prixunitaire, prixsoustotal de chaque ligne du tableau.
    Puis je voudrais également que le montant total s'incrémente ou décrémente en fonction des sous totaux.
    Ceci serait effectif au chargement de la page et sur événement onChange des select.

    J'ai réussi à modifier les valeurs sur une seule ligne mais je ne sais pas comment m'y prendre pour le reste
    Merci d'avance pour votre réponse.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    avant toute chose, tu ne peux pas avoir d'id fixes dans une boucle PHP, car ils ne seraient plus uniques dans la page, ce qui est obligatoire.
    Ajoute leur donc un compteur : le $id serait parfaitement adapté.
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id="quantite_<?php echo $id;?>"
    Ensuite seulement, tu nous montreras ton traitement Ajax ainsi que les modifs que tu souhaites lui faire

    A+

  3. #3
    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
    Salut,
    Citation Envoyé par Riko63 Voir le message
    J'ai réussi à modifier les valeurs sur une seule ligne mais je ne sais pas comment m'y prendre pour le reste.
    En évitant de donner le même id à toutes tes cellules par exemple et en ciblant celle sur laquelle tu veux effectuer des modifications.
    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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2009
    Messages : 95
    Par défaut
    Ah vi forcément ! (quel boulet).

    Je vais modifier mais je ne suis pas sur du tout de mon ajax après.

    Merci pour l'instant.

  5. #5
    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
    Citation Envoyé par Riko63 Voir le message
    mais je ne suis pas sur du tout de mon ajax après.
    Sans voir ton code, il est difficile de te donner un avis à ce sujet
    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

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2009
    Messages : 95
    Par défaut
    Oui tout à fait mais je voulais le retravailler en fonction des remarques pertinentes que vous m'aviez fait.
    Je reposterais surement pour vous présenter mon code

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2009
    Messages : 95
    Par défaut
    Me revoilà:
    Cette fois les sous totaux fonctionnent bien mais j'ai deux autres soucis:
    Il faudrait que je lance le calcul des totaux au premier chargement de page (en écrivant ces lignes je viens de pense qu'il faudrait peut être que j'utilise onload sur le body)
    Et je n'arrive pas à incrémenter mon total général (je me doute qu'il faut lancer une boucle de toutes mes lignes d tableaux mais comment récupérer toutes les lignes coté JS).
    Mes codes :
    Le tableau html:
    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
     
    <table width="80%" border="0" align="center">
      <tr>
        <th scope="col">Photos</th>
        <th scope="col">Quantité</th>
        <th scope="col">Format</th>
        <th scope="col">Surface</th>
        <th scope="col">Marges</th>
        <th scope="col">Prix unitaire</th>
        <th scope="col">Sous total</th>
      </tr>
      <?php foreach($_SESSION['user']['panier'] as $id=>$photo):?>
      <tr>
        <td>
           <img src="<?php echo DOSSIER_GALERIE;?>mini-<?php echo $id;?>.html" id="1" title="<?php echo $photo['nom'];?>" alt="<?php echo $photo['nom'];?>"/>
        </td>
        <td>
          <select onchange="calculPanier(<?php echo $id;?>)" id="quantite<?php echo $id;?>" name="quantite<?php echo $id;?>">
             <option selected="selected" value="1">1</option>
             <option value="2">2</option>
             <option value="3">3</option>
             <option value="4">4</option>
           </select>
         </td>
         <td>
            <select onchange="calculPanier(<?php echo $id;?>)" id="format<?php echo $id;?>" name="format<?php echo $id;?>">
              <option selected="selected" value="1">10 x 15</option>
              <option value="2">15 x 21</option>
              <option value="3">20 x 30</option>
              <option value="4">30 x 45</option>
              <option value="0">Autres</option>
           </select>
        </td>
        <td>
           <select id="surface" name="surface">
              <option selected="selected" value="mat">Mat</option>
              <option value="brillant">Brillant</option>
          </select>
        </td>
        <td>
           <select id="marges" name="marges">
              <option selected="selected" value="sans">Sans bords</option>
              <option value="brillant">Avec bords blancs</option>
           </select>
        </td>
        <td align="center" class="bleu" id="prixunitaire<?php echo $id;?>"></td>
        <td align="center" class="orange gras" id="prixsoustotal<?php echo $id;?>"></td>
      </tr>
      <?php endforeach;?>
      <tr>
         <td colspan="6"><span class="commentaires">(Le montant indiqué est TTC)</span>   Total :</td>
         <td id="total"></td>
      </tr>
    </table>
    Le fichier JS:
    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
     
    function getRequeteHttp() 
    {
       //on défini la variable
       var requeteHttp;
       if (window.XMLHttpRequest)
       {	// Mozilla
          requeteHttp=new XMLHttpRequest();
          if (requeteHttp.overrideMimeType)
          { // problème firefox
             requeteHttp.overrideMimeType('text/html');
          }
        }
        else
        {
           if (window.ActiveXObject)
           {// C'est Internet explorer < IE7
              try
              {
                 requeteHttp=new ActiveXObject("Msxml2.XMLHTTP");
    	  }
              catch(e)
              {
    	     try
    	     {
    	         requeteHttp=new ActiveXObject("Microsoft.XMLHTTP");
    	     }
    	     catch(e)
    	     {
    		requeteHttp=null;
    	     }
    	   }
            }
         }
         return requeteHttp;
    }
     
     
    function calculPanier(id)
    {
    	var requeteHttp = getRequeteHttp();
    	var format = document.getElementById('format'+id).value;
    	var nombre = document.getElementById('quantite'+id).value
    	var total = document.getElementById('total').value
    	var soustotal = document.getElementById('prixsoustotal'+id).value
     
        if( requeteHttp == null )
        {
            alert("Impossible d'utiliser Ajax sur ce navigateur");
        }
        else
        {
           var requeteHttp = getRequeteHttp()
           requeteHttp.onreadystatechange = function()
          {
    	// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    	if(requeteHttp.readyState == 4 && requeteHttp.status == 200)
    	{
    	  var reponse = requeteHttp.responseText.split('|');
    	  document.getElementById('prixunitaire'+id).innerHTML = reponse[0];
    	  document.getElementById('prixsoustotal'+id).innerHTML = reponse[1];
    	  document.getElementById('total').innerHTML = reponse[2];
    	}
          }
          requeteHttp.open('GET','calcul_commande.php5?format=' + format + '&soustotal=' + soustotal + '&nombre=' + nombre + '&total=' + total, true);
         requeteHttp.send('NULL');
       }
    }
    Puis le fichier php
    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
     
    <?php
    header('Content-Type: text/html; charset=ISO-8859-1');
     
    $totalAncien = $_GET['total']; //memo ancien total
    $prixSoustotalAncien = $_GET['soustotal'];
     
    $format = intval($_GET['format']);
    // prix en fonction du format
    //(tarifs à voir mais variable devra être modifiable par la page d'admin) 
    //Via XML peut être)
    switch($format)
      {
      case 1:
        $prixunitaire = 10;
      break;
      case 2:
        $prixunitaire = 15;
      break;
      case 3:
        $prixunitaire = 20;
      break;
    	case 4:
        $prixunitaire = 30;
      break;
      default:
        $prixunitaire = NULL;
      break;
    }
     
    if($prixunitaire != NULL)
    {
      $prixsoustotal = utf8_decode($_GET['nombre'] * $prixunitaire) . '€';
      $prixunitaire .= '€';
      $ecartSousTotal = $prixsoustotal - $prixSoustotalAncien;
      $total = $totalAncien + $ecartSousTotal;
    }
    else
    {
      $prixunitaire = 'Non communiqué';
      $prixsoustotal = '';
    }
     
    echo $prixunitaire . '|' . $prixsoustotal . '|' . $total;
    ?>
    d'avance

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/05/2014, 19h20
  2. Réponses: 0
    Dernier message: 22/04/2014, 09h54
  3. Modifier la cellule d'un tableau
    Par Arsene12 dans le forum VBA Word
    Réponses: 13
    Dernier message: 11/09/2011, 16h38
  4. [1.3]passer un tableau via AJAX
    Par Herode dans le forum jQuery
    Réponses: 6
    Dernier message: 07/02/2011, 08h32
  5. Réponses: 9
    Dernier message: 13/12/2009, 13h28

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