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 :

Comparer 2 references [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 105
    Par défaut Comparer 2 references
    Bonjour,

    J'ai un script ou j'ai une requète SQL, la reponse est récupérée sous forme de 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
     
    $request = tep_db_query("SELECT c.parent_id, pd.products_id, pd.products_name, p.products_ref, p.products_price, s.specials_new_products_price, taille.products_options_values_id, couleur.products_options_values_id, couleur.products_options_values_name AS couleur, taille.products_options_values_name AS taille, pa.options_values_price, (
    pa.options_values_price + p.products_price ) AS final_price, (pa.options_values_price + s.specials_new_products_price ) AS final_price_promo
    FROM products_stock ps, products_description pd LEFT JOIN specials s USING(products_id), products_options_values couleur, products_options_values taille, products_attributes pa, products p, products_to_categories p2c, categories c
    WHERE pd.products_id = ps.products_id
    AND pd.products_id = pa.products_id
    AND pd.products_id = p.products_id
    AND p2c.products_id = pd.products_id
    AND p2c.categories_id = c.categories_id
    AND c.parent_id = 4
    AND SUBSTRING( ps.products_stock_attributes FROM 3 FOR 2 ) = couleur.products_options_values_id
    AND SUBSTRING( ps.products_stock_attributes FROM 8 FOR 2 ) = taille.products_options_values_id
    AND pa.options_values_id = taille.products_options_values_id
    ORDER BY pd.products_name, couleur.products_options_values_id, taille.products_options_values_id ");
     
    while($data = mysql_fetch_assoc($request)) 
      { 
    			if ($data['final_price_promo'] == '') {
    				$final_price = $data['final_price'];
    			} else { 
    				$final_price = $data['final_price_promo'];
    			}
     
    			$check = '';
                $quantite = '';
    			for($i=0;$i<count($_SESSION['panier'][$data['parent_id']]);$i++) {
                    if(($_SESSION['panier'][$data['parent_id']][$i]['nom'] == $data['products_name']) && ($_SESSION['panier'][$data['parent_id']][$i]['couleur'] == $data['couleur']) && ($_SESSION['panier'][$data['parent_id']][$i]['taille'] == $data['taille'])) {
                      $check = ' checked="checked"';
                      $quantite = 'value="' . $_SESSION['panier'][$data['parent_id']][$i]['quantite'] . '" ';
    				  break;
                    } 
                }
     
    			echo '<tr>
    			<td class="directbuy" width="90" align="center"><input type="checkbox" name="select[]" value="p' . $data['products_id'] . 'c' . $data['couleur'] . 't' . $data['taille'] . '-' . $data['products_name'] . '-' . $data['taille'] . '-' . $data['couleur'] . '-' . $final_price . '-' . $data['parent_id'] . '"' . $check . ' /></td>
                <td class="directbuy" width="50">' . $data['products_ref'] . '</td>
    			<td class="directbuy_nom" width="260">' . $data['products_name'] . '</td>
    			<td class="directbuy" width="130" align="center">' . $data['couleur'] . '</td>
    			<td class="directbuy" width="90" align="center">' .$data['taille'] . '</td>
    			<td class="directbuy_check" width="100" align="center"><input class="quantite" type="text" name="p' . $data['products_id'] . 'c' . $data['couleur'] . 't' . $data['taille'] . '" ' . $quantite . ' /></td>
    			</tr>';
     
    	}
    La page affiche un tableau de la sorte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [checkbox] [ref ][produit-nom][coul][taille][quantite]
     
    [checkbox] [001] [produit_1] [blanc] [XL] [quantite]
    [checkbox] [001] [produit_1] [noir] [XL] [quantite]
    [checkbox] [001] [produit_1] [noir] [L] [quantite]
    [checkbox] [002] [produit_2] [blanc] [XL] [quantite]
    [checkbox] [002] [produit_2] [blanc] [M] [quantite]
    [checkbox] [003] [produit_3] [noir] [XL] [quantite]
    [checkbox] [003] [produit_3] [noir] [L] [quantite]
    entre chaque ligne j'ai une bordure de 1px, mais j'aimerais qu'entre chaque type de reference ma ligne change de couleur.
    Je sais que je dois mettre un if qui aura comme résultat de changer le nom de la class, mais je sais pas comment faire pour lui dire de faire ca lorsque qu'il passe par exemple du groupe de produit de reference 002 au groupe de produits de reference 003.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $i = 0 ;
    while($je_peut_afficher){
    if($i % 2 == 0){
    affiche_avec_premiere_classe();
    }
    else{
    affiche_avec_deuxième_classe();
    }
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 105
    Par défaut
    Donc si je comprend bien le script changé sera comme ca:

    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
     
    while($data = mysql_fetch_assoc($request)) 
      { 
    			if ($data['final_price_promo'] == '') {
    				$final_price = $data['final_price'];
    			} else { 
    				$final_price = $data['final_price_promo'];
    			}
     
    			$check = '';
                $quantite = '';
    			for($i=0;$i<count($_SESSION['panier'][$data['parent_id']]);$i++) {
                    if(($_SESSION['panier'][$data['parent_id']][$i]['nom'] == $data['products_name']) && ($_SESSION['panier'][$data['parent_id']][$i]['couleur'] == $data['couleur']) && ($_SESSION['panier'][$data['parent_id']][$i]['taille'] == $data['taille'])) {
                      $check = ' checked="checked"';
                      $quantite = 'value="' . $_SESSION['panier'][$data['parent_id']][$i]['quantite'] . '" ';
    				  break;
                    } 
                }
     
    			$i = 0 ;
    			while($data){
    			  if($i % 2 == 0){
    				$class_ref =  '<td class="directbuy_ref1" width="50">';
    			  } else {
    				$class_ref =  '<td class="directbuy_ref2" width="50">';
    			  }
    			}
     
    			echo '<tr>
    			<td class="directbuy" width="90" align="center"><input type="checkbox" name="select[]" value="p' . $data['products_id'] . 'c' . $data['couleur'] . 't' . $data['taille'] . '-' . $data['products_name'] . '-' . $data['taille'] . '-' . $data['couleur'] . '-' . $final_price . '-' . $data['parent_id'] . '"' . $check . ' /></td>
                <td class="directbuy" width="50">' . $data['products_ref'] . '</td>
    			<td class="directbuy_nom" width="260">' . $data['products_name'] . '</td>
    			<td class="directbuy" width="130" align="center">' . $data['couleur'] . '</td>
    			<td class="directbuy" width="90" align="center">' .$data['taille'] . '</td>
    			<td class="directbuy_check" width="100" align="center"><input class="quantite" type="text" name="p' . $data['products_id'] . 'c' . $data['couleur'] . 't' . $data['taille'] . '" ' . $quantite . ' /></td>
    			</tr>';
     
    	}
    J'ai juste??

  4. #4
    Invité
    Invité(e)
    Par défaut
    il te faut incrémenter ton $i, je sais pas si c'est juste, c'est a toi de me dire

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 105
    Par défaut
    Non, j'ai modifié un peu mon code se qui à donné ca:

    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
     
    $j = 0 ;				
    while($data = mysql_fetch_assoc($request)) 
      { 
    			if ($data['final_price_promo'] == '') {
    				$final_price = $data['final_price'];
    			} else { 
    				$final_price = $data['final_price_promo'];
    			}
     
    			$j++;
    			if($j % 2 == 0){
    				$class_ref =  '<td class="directbuy_ref1" width="50">';
    			} else {
    				$class_ref =  '<td class="directbuy_ref2" width="50">';
    			}
     
    			$check = '';
                $quantite = '';
    			for($i=0;$i<count($_SESSION['panier'][$data['parent_id']]);$i++) {
                    if(($_SESSION['panier'][$data['parent_id']][$i]['nom'] == $data['products_name']) && ($_SESSION['panier'][$data['parent_id']][$i]['couleur'] == $data['couleur']) && ($_SESSION['panier'][$data['parent_id']][$i]['taille'] == $data['taille'])) {
                      $check = ' checked="checked"';
                      $quantite = 'value="' . $_SESSION['panier'][$data['parent_id']][$i]['quantite'] . '" ';
    				  break;
                    } 
                }
     
     
    			echo '<tr>
    			<td class="directbuy" width="90" align="center"><input type="checkbox" name="select[]" value="p' . $data['products_id'] . 'c' . $data['couleur'] . 't' . $data['taille'] . '-' . $data['products_name'] . '-' . $data['taille'] . '-' . $data['couleur'] . '-' . $final_price . '-' . $data['parent_id'] . '"' . $check . ' /></td>'
                . $class_ref . $data['products_ref'] . '</td>
    			<td class="directbuy_nom" width="260">' . $data['products_name'] . '</td>
    			<td class="directbuy" width="130" align="center">' . $data['couleur'] . '</td>
    			<td class="directbuy" width="90" align="center">' .$data['taille'] . '</td>
    			<td class="directbuy_check" width="100" align="center"><input class="quantite" type="text" name="p' . $data['products_id'] . 'c' . $data['couleur'] . 't' . $data['taille'] . '" ' . $quantite . ' /></td>
    			</tr>';
     
    	}
    Mais il me change la classe toutes les 2 ligne non pas après la fin d'une référence

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    alors ne fais pas $i%2 mais $ref%2

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 105
    Par défaut
    Je ne comprend pas bien pkoi on se sert de % ici??
    Peux-tu m'expliquer?

  8. #8
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    % = modulo

    Qu'est-ce qu'un modulo tu vas me dire ? Et bien c'est tout simple, le modulo renvoie le reste d'une division entière.

    0%2 = 0
    1%2 = 1
    2%2 = 0
    3%2 = 1
    4%2 = 0
    etc..

    En programmation, on utilise tres souvent les modulo 2 (par exemple pour colorer des lignes) ou alors modulo n pour définir un nombre de colonnes (où n est le nombre de colonnes)

    Comme tu peux le constater, un modulo 2 ne renvoit que 0 ou 1. Il suffit donc de lui dire "si c'est 1 tu utilise telle class, sinon l'autre"

    Dans ton cas, on ne peut pas utiliser le $i car, comme tu l'as constaté : ca modifie les class 1 ligne sur 2.
    Si tes références sont bien écrites et avec chaque une incrémentation de +1 ca devrait donner un bon résultat. Par contre si tu as des références comme ceci :
    001
    002
    004

    ca ne marchera pas car 002 et 004 seront l'un en dessous de l'autre mais comme 2%2 et 4%2 renvoient le meme résultat (0) ils auront la même couleur

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 105
    Par défaut
    Ben j'ai un gros souci, je sais même pas si il est possible de faire se que je veux car les références sont de la sorte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CARTE100
    MANNEQUINF
    MANNEQUINF
    PANCOLE
    PANCOLF
    Il s'agit d'un mag en ligne de fringues, et les ref sont rentrés par l'administrateur et non pas automatiquement.

  10. #10
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    alors je te conseillerais d'utiliser une variable qui garderait en mémoire le nom de la dernière référence. Tu peux faire quelque chose comme ça :

    admettons donc que tu aies une class qui met un background gris (nom de la class = td0) et une autre qui met un background blanc (nom de la class = td1) :
    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
     
     
    $lastItem = ""; // initialisation de la variable
    $i = 0; // on a quand même besoin du modulo
    while( $condition ) {
     
    if( $lastItem != $data['ref'] ) {
        $i++;
    }
     
    $class = ($i%2);
     
    echo '<td class="td'.$class.'">mon contenu</td>';
    }

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 105
    Par défaut
    oui c'est un bon système ca
    Par contre j'ai essayer et on dirait qu'il faudrais récupérer le nom du produit juste avant car il me mets toujours ref1 je me trompe?

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 105
    Par défaut
    J'ai essayer de chercher un peu sur le net une façon derécupérer le nom du produits affiché juste avant mais pas de solution.

    Tu pense que c'est faisable darkstar123456??

  13. #13
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    ha oui en fait j'ai oublié un p'tit truc dans mon code... mais c'est le plus important : la sauvegarde du dernier item !

    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
     
    $lastItem = ""; // initialisation de la variable
    $i = 0; // on a quand même besoin du modulo
    while( $condition ) {
     
    if( $lastItem != $data['ref'] ) {
        $i++;
    }
     
    $lastItem = $data['ref'];
     
    $class = ($i%2);
     
    echo '<td class="td'.$class.'">mon contenu</td>';
    }

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 105
    Par défaut
    Ha ouai c'est mieu.

    Par contre il agit pas encore comme il faut, il donne comme resultat:
    (td1 il n'y a pas de trait de séparation, td0 oui)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <td class="td1">ref 321</td>
    <td class="td1">ref 321</td>
    <td class="td1">ref 321</td>
    <td class="td0">ref 555</td>
    <td class="td0">ref 555</td>
    <td class="td1">ref 765</td>
    <td class="td1">ref 765</td>
    bizarre non?

  15. #15
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    ce n'est pas un problème css là plutôt?

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 105
    Par défaut
    Non puisque c'est le while qui m'attribut la css
    regarde l'echo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<td class="td'.$class.'">mon contenu</td>';

  17. #17
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    comme l'a dit SphynXz il s'agit bien d'un problème de CSS...

    Il te faut 2 class CSS minimum : td0 et td1

    exemple :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    td {
    	border-collapse: collapse;
    	border-bottom: 1px solid #000000;
    }
     
    td.td0 {
    	background: #999999;
    }
     
    td.td1 {
    	background: #FFFFFF;
    }

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 105
    Par défaut
    Ok je vois se que vous voulez dire.
    En fait, je ne dois pas changer la couleur du fond de chaque reference, je m'explique.
    Donc chaque ligne sont des TD chacune de mes lignes ont une il faudrait qu'a la fin d'une reference, le dernier TD comporte une Est ce faisable?

  19. #19
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Oui et non.

    Perso, je pense qu'il est plus simple que le premier TD d'une nouvelle référence porte un border-top plutot que le dernier un border-bottom.

    Pourquoi? Tout simplement parce que mySQL n'est pas devin ! Il ne peut pas prévoir à l'avance que la prochaine référence sera différente...

    Il te suffirait alors juste d'une classe qui s'incrusterait dès qu'une référence change.

    Un peu comme ceci : (on admet que tous les TD sont pareils, sauf entres références y'a juste une bordure)

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    td {
       border-collapse: collapse;
       border-top: #FF00FF; /* waouw quelle belle couleur xD */
    }
    td.separate {
       border-top: #000000;
    }


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $lastItem = ""; // initialisation de la variable
    while( $condition ) {
     
    $class = ""; 
    if( $lastItem != $data['ref'] ) {
        $class = 'class="separate"';
    }
     
    $lastItem = $data['ref'];
     
    echo '<td '.$class.'>mon contenu</td>';
    }

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 105
    Par défaut
    impec merci beaucoup à vous

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

Discussions similaires

  1. comparer des references
    Par marielaure2805 dans le forum Schéma
    Réponses: 3
    Dernier message: 09/02/2007, 12h40
  2. Réponses: 6
    Dernier message: 09/08/2006, 22h35
  3. Réponses: 3
    Dernier message: 28/10/2005, 01h12
  4. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

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