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

PHP & Base de données Discussion :

Panier et transfert de variable [MySQL]


Sujet :

PHP & Base de données

  1. #21
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 353
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 353
    Billets dans le blog
    17
    Par défaut
    PS : je me permets de reformater rapidement ton script :

    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
    if (creationPanier())
    {
        $nbArticles=count($_SESSION['panier']['Reference']);
        if ($nbArticles <= 0) {
            echo "vide";
        } else {
            for ($i=0 ;$i < $nbArticles ; $i++) {
                $prod="SELECT * FROM Produit WHERE Reference=".$_SESSION['panier']['Reference'][$i]."";
                $res_prod=mysql_query($prod) or die (mysql_error());
                while ($data = mysql_fetch_array($res_prod)) {
                    echo "<tr></tr>";
                    echo "<tr>";
                    echo "<td class='none'><font face='arial' size='2' color='#000066'>".htmlspecialchars($_SESSION['panier']['Reference'][$i])."</font></td>";
                    echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'>× ".$data['QteColis']."</font></td>";
                    echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'>".$data['QteMoyen']."</font></td>";
                    echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'>".$data['PrixUnitaire']."</font></td>";
                    echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'><input type=\"text\" size=\"2\" name=\"QteCommandee[]\" value=\"".htmlspecialchars($_SESSION['panier']['QteCommandee'][$i])."\"/></font></td>";
                    $prix = round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);
                    echo "<td class='none' align='right'><strong><font face='arial' size='2' color='#000066'>$prix €</font></strong></td>";
                    echo "</tr>";
                }
            }
        }
    }
     
    $ref=$_SESSION['panier']['Reference'];
    $qte=$_SESSION['panier']['QteCommandee'];
     
    if ($nbArticles <= 0) {
        exit ("Votre panier est vide. La commande ne peut être finalisée.");
    } else {
        for ($i=0 ;$i < $nbArticles ; $i++) {
            $requete ="INSERT INTO LigneCommande (LC_Id,Lc_IdCommande,LC_IdProduit,LC_Quantite,LC_MontantTTC,LC_MontantTVA) "
                     ."VALUES ('','test','{$ref[$i]}','{$qte[$i]}','{$prix[$i]}',19.6)";
            $rq_insert = mysql_query($requete) or die ('Erreur '.$requete.' '.mysql_error());
        }
    }

  2. #22
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut
    Ok mais j'ai déjà essayer de ne mettre que $prix dans la requete.

    Et de mettre dans ma variable $prix[i].

    Mais donc il me met ceci, Array :
    1063× 112.00012.80Array
    Et m'insère toujours 0 dans ma base.


    Sinon pour le while, je peux avoir plusieurs résultats, autant qu'il y aura de produits dans mon panier.

  3. #23
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 353
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 353
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par mikael2235 Voir le message
    Ok mais j'ai déjà essayer de ne mettre que $prix dans la requete.
    Et de mettre dans ma variable $prix[i].
    Donne le script testé et le résultat.

    Sinon pour le while, je peux avoir plusieurs résultats
    Donc, d'après ce que tu me dis et la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $prod="SELECT * FROM Produit WHERE Reference=".$_SESSION['panier']['Reference'][$i]."";
    ... des produits différents peuvent avoir la même référence ?

    autant qu'il y aura de produits dans mon panier.
    Tu confonds pas avec le for( ) ?

  4. #24
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Donc, d'après ce que tu me dis et la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $prod="SELECT * FROM Produit WHERE Reference=".$_SESSION['panier']['Reference'][$i]."";
    ... des produits différents peuvent avoir la même référence ?
    Impossible, la Référence est la clé primaire de ma table Produit. et ça ne serai pas logique !
    Je ne vois pas en quoi la requète te fais dire ça !

    Citation Envoyé par Séb. Voir le message
    Tu confonds pas avec le for( ) ?
    Je peux mettre for dans mon code, en lui définissant $i comme nombre de produits.
    Ma requète sera plus rapide !

  5. #25
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 353
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 353
    Billets dans le blog
    17
    Par défaut
    Impossible, la Référence est la clé primaire de ma table Produit. et ça ne serai pas logique !
    On est bien d'accord ;-)

    Je ne vois pas en quoi la requète te fais dire ça !
    La requête SELECT me fait dire qu'elle ne peut retourner qu'un seul enregistrement à la fois, ce que tu confirmes.
    Le while( ) traitant le résultat du SELECT est donc inutile en l'état puisqu'il sert à parcourir un jeu d'enregistrements dont on ne connaît pas le nombre.

  6. #26
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut
    Citation Envoyé par Séb. Voir le message
    On est bien d'accord ;-)

    La requête SELECT me fait dire qu'elle ne peut retourner qu'un seul enregistrement à la fois, ce que tu confirmes.
    Le while( ) traitant le résultat du SELECT est donc inutile en l'état puisqu'il sert à parcourir un jeu d'enregistrements dont on ne connaît pas le nombre.
    Ok Seb, effectivement, ce n'est pas tro padapté dans ce cas.

    J'ai donc modifié avec un For, qui refait la boucle autant de fois qu'il y a d'articles dans mon panier.

    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
    if (creationPanier())
    {
    $nbArticles=count($_SESSION['panier']['Reference']);
      if ($nbArticles <= 0)
       echo "vide";
      else
      {
         for ($i=0 ;$i < $nbArticles ; $i++)
       {
    $prod="SELECT * FROM Produit WHERE Reference=".$_SESSION['panier']['Reference'][$i]."";
    $res_prod=mysql_query($prod)
         or die (mysql_error());
     
    $prix[$i] = round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);
     
    $data = mysql_fetch_array($res_prod);
     
        echo "<tr></tr>";
        echo "<tr>";
    	echo "<td class='none'><font face='arial' size='2' color='#000066'>".htmlspecialchars($_SESSION['panier']['Reference'][$i])."</font></td><br/>";
    	echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'>× ".$data['QteColis']."</font></td><br/>";
    	echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'>".$data['QteMoyen']."</font></td><br/>";
        echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'>".$data['PrixUnitaire']."</font></td><br/>";
        echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'><input type=\"text\" size=\"2\" name=\"QteCommandee[]\" value=\"".htmlspecialchars($_SESSION['panier']['QteCommandee'][$i])."\"/></font></td><br/>";
     
    	echo "<td class='none' align='right'><strong><font face='arial' size='2' color='#000066'>$prix[$i] €</font></strong></td><br/>";
        echo "</tr>";	
    }
    }
     
     
    					$ref=$_SESSION['panier']['Reference'];
    					$qte=$_SESSION['panier']['QteCommandee'];
     
    				if ($nbArticles <= 0)
    					exit ("Votre panier est vide. La commande ne peut être finalisée.");
    				else
    				{
    					for ($i=0 ;$i < $nbArticles ; $i++)
    						{ 
    							$requete ="INSERT INTO LigneCommande (LC_Id,Lc_IdCommande,LC_IdProduit,LC_Quantite,LC_MontantTTC,LC_MontantTVA) VALUES ('','test','".$ref[$i]."','".$qte[$i]."','".$prix."',19.6)";
    							$rq_insert = mysql_query($requete) or die ('Erreur '.$requete.' '.mysql_error());
    						}
    				}
    }			
    ?>
    Et voilà le résultat que j'obtiens sur ma page avec le echo :

    -voir PJ-

    Les résultats sont décalés !
    Images attachées Images attachées  

  7. #27
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 353
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 353
    Billets dans le blog
    17
    Par défaut
    J'ai donc modifié avec un For
    Merci de réutiliser le script reformaté collé plus haut, le tien étant mal indenté il est difficilement lisible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $prix[$i] = round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);
     
    $data = mysql_fetch_array($res_prod);
    Tu utilises $data avant qu'il ne soit défini !
    Inverse ces deux lignes.

  8. #28
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Merci de réutiliser le script reformaté collé plus haut, le tien étant mal indenté il est difficilement lisible
    Désolé mais c'est une autre page ou j'ai repris un ancien code. Je vais le changer.

    Citation Envoyé par Séb. Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $prix[$i] = round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);
     
    $data = mysql_fetch_array($res_prod);
    Tu utilises $data avant qu'il ne soit défini !
    Inverse ces deux lignes.
    Ok normal, ce qui fait qu'il data n'était défini que à la deuxième boucle.

  9. #29
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut
    Voilà pour le code (mis à jour) :

    J'espère qu'il est bien formaté/indenté comme ça. Mon problème est donc résolu, tout mes insertions dans ma bdd fonctionne bien.

    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
    // requete d'insertion de la commande dans la BDD
     
    if (creationPanier())
    {
        $nbArticles=count($_SESSION['panier']['Reference']);
        if ($nbArticles <= 0) {
            echo "vide";
        } else {
            for ($i=0 ;$i < $nbArticles ; $i++) {
                $prod="SELECT * FROM Produit WHERE Reference=".$_SESSION['panier']['Reference'][$i]."";
                $res_prod=mysql_query($prod)
    				or die (mysql_error());
    			$data = mysql_fetch_array($res_prod);			
     
    			$prix[$i] = round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);			
     
    			echo "<tr></tr>";
    			echo "<tr>";
    			echo "<td class='none'><font face='arial' size='2' color='#000066'>".htmlspecialchars($_SESSION['panier']['Reference'][$i])."</font></td><br/>";
    			echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'>× ".$data['QteColis']."</font></td><br/>";
    			echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'>".$data['QteMoyen']."</font></td><br/>";
    			echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'>".$data['PrixUnitaire']."</font></td><br/>";
    			echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'><input type=\"text\" size=\"2\" name=\"QteCommandee[]\" value=\"".htmlspecialchars($_SESSION['panier']['QteCommandee'][$i])."\"/></font></td><br/>";
     
    			echo "<td class='none' align='right'><strong><font face='arial' size='2' color='#000066'>$prix[$i] €</font></strong></td><br/>";
    			echo "</tr>";
                }
            }
     
    		$ref=$_SESSION['panier']['Reference'];
    		$qte=$_SESSION['panier']['QteCommandee'];
        }
     
    if ($nbArticles <= 0) {
        exit ("Votre panier est vide. La commande ne peut être finalisée.");
    } else {
        for ($i=0 ;$i < $nbArticles ; $i++) {
            $requete ="INSERT INTO LigneCommande (LC_Id,Lc_IdCommande,LC_IdProduit,LC_Quantite,LC_MontantTTC,LC_MontantTVA) "
                     ."VALUES ('','{$res_num_cde['MaxNumCde']}','{$ref[$i]}','{$qte[$i]}','{$prix[$i]}',19.6)";
            $rq_insert = mysql_query($requete) or die ('Erreur '.$requete.' '.mysql_error());
    		}
    	}
    ?>
    Sinon, je voulais te remercier pour ton aide, car tu es le seul à m'avoir répondu.
    Et c'est vrai que par moment j'étais pas trop content que tu ne m'aides pas davantage, mais au moins ça a le mérite de me faire chercher, et en espérant que ça me soit bénéfique et que j'apprenne des choses.

    Encore merci à toi.

    On se recroisera surement sur le forum avec mes nombreux problèmes !!!

  10. #30
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 353
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 353
    Billets dans le blog
    17
    Par défaut
    j'étais pas trop content que tu ne m'aides pas davantage
    Eh attends c'est pas moi le développeur hein
    Comme tu l'as bien compris le but n'est pas de faire le travail à ta place mais de mettre en avant quelques incohérences, de donner des pistes, ainsi tu réfléchis sur ton script et, finalité ultime, tu progresses et n'as plus besoin d'aide.

    Si je peux me permettre 2 derniers conseils :
    1. Evite d'afficher du HTML en PHP (code lourd et ilisible, t'auras compris je n'aime pas ça du tout )
    2. Utilise les CSS

    Ainsi ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $prix[$i] = round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);
     
    echo "<tr></tr>";
    echo "<tr>";
    echo "<td class='none'><font face='arial' size='2' color='#000066'>".htmlspecialchars($_SESSION['panier']['Reference'][$i])."</font></td><br/>";
    echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'>× ".$data['QteColis']."</font></td><br/>";
    echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'>".$data['QteMoyen']."</font></td><br/>";
    echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'>".$data['PrixUnitaire']."</font></td><br/>";
    echo "<td class='none' align='center'><font face='arial' size='2' color='#000066'><input type=\"text\" size=\"2\" name=\"QteCommandee[]\" value=\"".htmlspecialchars($_SESSION['panier']['QteCommandee'][$i])."\"/></font></td><br/>";
     
    echo "<td class='none' align='right'><strong><font face='arial' size='2' color='#000066'>$prix[$i] €</font></strong></td><br/>";
    echo "</tr>";
    }
    Donne pour les CSS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .article td { font : normal 10px arial ; color : #000066 ; text-align : center }
    .article .prix { font-weight : bold ; text-align : right }
    Et pour le 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
    $prix[$i] = round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);
     
    ?>
     
    <tr></tr>
    <tr class="article">
    <td><?php echo htmlspecialchars($_SESSION['panier']['Reference'][$i]) ?></td>
    <td>× <?php echo $data['QteColis'] ?></td>
    <td><?php echo $data['QteMoyen'] ?></td>
    <td><?php echo $data['PrixUnitaire'] ?></td>
    <td><input type="text" size="2" name="QteCommandee[]" value="<?php echo htmlspecialchars($_SESSION['panier']['QteCommandee'][$i]) ?>"></td>
    <td class="prix"><?php echo $prix[$i] ?> €</td>
    </tr>
     
    <?php
     
    // ...

  11. #31
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Eh attends c'est pas moi le développeur hein
    Comme tu l'as bien compris le but n'est pas de faire le travail à ta place mais de mettre en avant quelques incohérences, de donner des pistes, ainsi tu réfléchis sur ton script et, finalité ultime, tu progresses et n'as plus besoin d'aide.

    Si je peux me permettre 2 derniers conseils :
    1. Evite d'afficher du HTML en PHP (code lourd et ilisible, t'auras compris je n'aime pas ça du tout )
    2. Utilise les CSS

    Ainsi ceci :
    Donne pour les CSS :
    Et pour le PHP :
    Tout à fait, mes j'essaye de me débrouiller comme je peux. Ce n'est pas du tout mon métier, et je suis parti de rien. J'ai juste acheté le livre "Php et Mysql pour les nuls", et je m'aide aussi beaucoup du net, et de ce forum.

    Pour le CSS, c'est effectivement plus lisible. Des petits reflexes que je n'ai pas encore.

  12. #32
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 353
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 353
    Billets dans le blog
    17
    Par défaut
    Ça viendra, bon courage pour la suite ;-)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. pt->py:transfert de variables
    Par kowabounga dans le forum Zope
    Réponses: 1
    Dernier message: 17/08/2006, 11h00
  2. Session: pour le transfert de variables
    Par arti2004 dans le forum Langage
    Réponses: 15
    Dernier message: 28/05/2006, 18h16
  3. [VBA-E]Userform et transfert de variable
    Par Yanos dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 27/03/2006, 09h16
  4. transfert des variables de sessions
    Par Julie 2006 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 15
    Dernier message: 26/02/2006, 11h58
  5. [vb] Transfert de variables et listbox
    Par lepiou dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/01/2006, 17h39

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