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

Langage PHP Discussion :

Répéter une donnée


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 23
    Points
    23
    Par défaut Répéter une donnée
    Bonsoir,

    est ce qu'il est possible de réaliser une variable.

    j'ai un certain nombre de produits dans une table (products). quand j'ai 2 produits le title de l'achat est produit1|produit2

    si il y a 3 produits , le title devient produit1|produit2|produit3

    etc....

    pour séparer les titles j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $title = preg_split('/\|/', $itemname, -1 , PREG_SPLIT_NO_EMPTY);
    et j'utilise $title[0] pour le titre du produit 1 , puis $title[1] pour le titre du produit 2 mais pour 3 ou plus de produits je ne sais pas comment faire.

    est ce que c'est possible de mettre une variable avoir cette fonction en dynamic ?


    cordialement grazianno.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 57
    Points : 50
    Points
    50
    Par défaut
    Ciao grazianno,
    Si je comprends bien tu veux séparer des éléments d'un titre par des barres verticales. J'ai une solution très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // récupères tes titres dans un tableau
    $ar_title = array('0'=>"titre1", '1'=>"titre2", '2'=>"titre3", '3'=>"titre4");
    // il est pas beau mon séparateur
    $s = '';
    // on parcours le tableau quelque soit sa longueur
    foreach($ar_title as $key=>$value){
    	$itemname .= $s.$ar_title[$key];
    	$s = ' | ';
    }
    echo $itemname;

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    merci pour ta réponse,

    actuellement j'ai un script qui génère les titres des produits dans une seule colonne ,

    titre1|titre2|titre3 etc... et une autre colonne donne la valeur du nombre de produit ( titre )

    exemple 5 produit -> p1|p2|p3|p4|p5

    je veux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $title = preg_split('/\|/', $itemname, -1 , PREG_SPLIT_NO_EMPTY);
    pour $i ( quelque soit la valeur dans la colonne du nombre de produits ).


    ainsi je peux récupérer le titre dans la colone quelque soit le nombre de titres...

    cordialement grazianno.

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    voici la table , 5 produits donc 5 titres , je souhaite les séparés en utilisant une condition qui soit dynamic , cad pour n'importe quel nombre de produit.

    Nom : sc.JPG
Affichages : 37
Taille : 14,3 Ko

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 57
    Points : 50
    Points
    50
    Par défaut
    Peux tu montrer un peu plus de code car je comprends pas très bien le problème ?

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    voici le code c'est just pour deux produits, et je veux le mettre dynamic pour plusieurs produits, avec preg_split je peux avoir les deux titres $title[0] et $title[1]

    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
     
    if(isset($_GET['orderno'])){
    	$orderno = $_GET['orderno'];
    }
     
     
    $pt_sql = mysql_query("SELECT * FROM orders where orderno='$orderno' ");
     
    if (mysql_num_rows($pt_sql) >0)
    {
     
    while($pt_get=mysql_fetch_array($pt_sql))
    {
     
     
    $g_orderno = $pt_get['orderno'];
    $itemname = $pt_get['itemname'];
     
    $title = preg_split('/\|/', $itemname, -1 , PREG_SPLIT_NO_EMPTY);
     
     
    if ( $title[1] == "" ) { 
    	echo "<a href='contract.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[0]</i>"; 
    	} elseif ( $title[0] == $title[1] ) {
    		echo "<a href='contract.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[0]</i>"; 
    		} else { echo "<a href='contract.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[0]</i><br /><br />";
    			echo "<a href='contract2.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[1]</i>";
    					}
    }
    //cas où il ya des résultats : traitement
    } else {
    echo 'There are no contracts available for download for your order.';
    }
    mysql_close();
    ?>

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    si le second titre est vide , alors le client reçoit le contrat du premier produit seuelement.

    si le second titre est semblable au premier , le client reçoit un seul contrat.

    si le premier et le second titre sont différent , alors le client reçoit deux contrats.

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    j'essaye de tester avec ce 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
    <?php
     
    $itemname = " titre1 | titre1 | titre3 | titre4 | titre5 ";
     
    $numitem = "6";
     
    $title = preg_split('/\|/', $itemname, -1 , PREG_SPLIT_NO_EMPTY);
     
    	for ($i = 0; ($i < $numitem ); $i++) { 
     
     
    if ( $title[$i] == $title[$i+1] ) { echo $title[$i] ; }
     
    }
     
    ?>
    mais il me faut les conditions dynamic pour comparaitre les valeurs des titres quelque soit leurs nombres.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 57
    Points : 50
    Points
    50
    Par défaut
    Je suis parti sur un traitement des réponses à l'aide d'un switch en me basant que le nombre d'enregistrement. Dans le cas de réponses multiple je fais une boucle afin de comparer chaque enregistrement avec le précédent.
    Bon y'a certainement des choses à adaptés, parce que je ne peux pas tester, mais l'idée est là.
    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
    <?php
     
    if(isset($_GET['orderno'])){
    	$orderno = $_GET['orderno'];
    }
     
     
    $pt_sql = mysql_query("SELECT * FROM orders where orderno='$orderno' ");
     
     
    if (mysql_num_rows($pt_sql) >0)
    {
    	// recuperation du nombre d'enregistrement
    	$nb_record = mysql_num_rows($pt_sql);
    	while($pt_get=mysql_fetch_array($pt_sql))
    	{
     
     
    	$g_orderno = $pt_get['orderno'];
    	$itemname = $pt_get['itemname'];
     
    	$title = preg_split('/\|/', $itemname, -1 , PREG_SPLIT_NO_EMPTY);
     
    	 	// on se sert du nombre d'enregistrement pour traiter les resultats
    		switch($nb_record){
    			case ($nb_record == 0) :
    				// aucun retour
    				echo 'There are no contracts available for download for your order.';
    				break;
    			case ($nb_record == 1) :
    				// un seul retour
    				echo "<a href='contract.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[0]</i>"; 
    				break;
    			case ($nb_record > 1) :
    				// plusieurs retour
    				// les enregistrements sont compte a partir de 1, alors q'on a besoin de partir de 0 -> on enleve 1
    				$nb_record = $nb_record -1;
    				// un boucle pour comparer l'enregistrement au precedent
    				for($i=0; $i < $nb_record; $i++){
    					$j = $i -1;
    					if ( $title[$i] == $title[$j] ) {
    						echo "<a href='contract.php?orderno=".$g_orderno."' target='_blank'><strong>Contract</strong></a> for <i>".$title[$i]."</i>"; 
    					} else { 
    						echo "<a href='contract".$i.".php?orderno=".$g_orderno."' target='_blank'><strong>Contract</strong></a> for <i>".$title[$i]."</i><br /><br />";
    						echo "<a href='contract".$j.".php?orderno=".$g_orderno."' target='_blank'><strong>Contract</strong></a> for <i>".$title[$j]."</i>";
    					}
    				}
    				break;
    		}
     
     
    	/*
    		if ( $title[1] == "" ) { 
    			echo "<a href='contract.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[0]</i>"; 
    		} elseif ( $title[0] == $title[1] ) {
    				echo "<a href='contract.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[0]</i>"; 
    		} else { 
    				echo "<a href='contract.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[0]</i><br /><br />";
    				echo "<a href='contract2.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[1]</i>";
    		}
    	*/
    	}
    //cas où il ya des résultats : traitement
    } else {
    	echo 'There are no contracts available for download for your order.';
    }
    mysql_close();
    ?>

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    merci , ça commence à s'éclaircir

    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nb_record = mysql_num_rows($pt_sql);
    je peux utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nb_record = $pt_get['numitems'];
    parceque numitems existe dans dans la table et donne le nombre de produits.

    il y a un petit souci avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "<a href='contract".$j.".php?orderno=".$g_orderno."' target='_blank'><strong>Contract</strong></a> for <i>".$title[$j]."</i>";


    cordialement grazianno.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 57
    Points : 50
    Points
    50
    Par défaut
    Ha oui a priori il y a un petit défaut pour amorcer la boucle dans le switch dans le cas de multiple réponses ; il faut mettre une condition pour vérifier la valeur de $i de façon à ce que l'on évite de comparer $title[$i] avec lui même (parce 1-1=0 pour $j).

    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
    			case ($nb_record > 1) :
    				// plusieurs retour
    				// les enregistrements sont compte a partir de 1, alors q'on a besoin de partir de 0 -> on enleve 1
    				$nb_record = $nb_record -1;
    				// un boucle pour comparer l'enregistrement au precedent
    				for($i=0; $i < $nb_record; $i++){
    					if($i > 0){$j = $i -1;}else{$j=1;} // <-- un oubli
    					if ( $title[$i] == $title[$j] ) {
    						echo "<a href='contract.php?orderno=".$g_orderno."' target='_blank'><strong>Contract</strong></a> for <i>".$title[$i]."</i>"; 
    					} else { 
    						echo "<a href='contract".$i.".php?orderno=".$g_orderno."' target='_blank'><strong>Contract</strong></a> for <i>".$title[$i]."</i><br /><br />";
    						echo "<a href='contract".$j.".php?orderno=".$g_orderno."' target='_blank'><strong>Contract</strong></a> for <i>".$title[$j]."</i>";
    					}
    				}
    				break;

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    merci je crois on s'approche du résultat , sauf qu'avec ce code , les liens des contrats se limite à 2 , des fois y a plusieurs contrats.

    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    <?php
     
    if(isset($_GET['orderno'])){
    	$orderno = $_GET['orderno'];
    }
     
    $pt_sql = mysql_query("SELECT * FROM orders where orderno='$orderno' ");
     
     
    if (mysql_num_rows($pt_sql) >0)
    {
    	// recuperation du nombre d'enregistrement
     
    	while($pt_get=mysql_fetch_array($pt_sql))
    	{
     
    	$nb_record = $pt_get['numitems'];
    	$g_orderno = $pt_get['orderno'];
    	$itemname = $pt_get['itemname'];
     
    	$title = preg_split('/\|/', $itemname, -1 , PREG_SPLIT_NO_EMPTY);
     
    	 	// on se sert du nombre d'enregistrement pour traiter les resultats
    		switch($nb_record){
    			case ($nb_record == 0) :
    				// aucun retour
    				echo 'There are no contracts available for download for your order.';
    				break;
    			case ($nb_record == 1) :
    				// un seul retour
    				echo "<a href='contract.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[0]</i>"; 
    				break;
    			case ($nb_record > 1) :
    				// plusieurs retour
    				// les enregistrements sont compte a partir de 1, alors q'on a besoin de partir de 0 -> on enleve 1
    				$nb_record = $nb_record -1;
     
     
    $title[$i] = str_replace("LEASE for ","", $title[$i]);
    $title[$i] = str_replace("TRACK SEPARATION for ","", $title[$i]);
    $title[$i] = str_replace("TRACK SEPARATION & RIGHT OF FIRST REFUSAL for ","", $title[$i]);
    $title[$i] = str_replace("LIFETIME RIGHT OF FIRST REFUSAL for ","", $title[$i]);
     
     
    $title[$j] = str_replace("LEASE for ","", $title[$j]);
    $title[$j] = str_replace("TRACK SEPARATION for ","", $title[$j]);
    $title[$j] = str_replace("TRACK SEPARATION & RIGHT OF FIRST REFUSAL for ","", $title[$j]);
    $title[$j] = str_replace("LIFETIME RIGHT OF FIRST REFUSAL for ","", $title[$j]);
     
    // un boucle pour comparer l'enregistrement au precedent
    				for($i=0; $i < $nb_record; $i++){
    					if($i > 0){$j = $i -1; 
     
    						$title[$i] = str_replace("LEASE for ","", $title[$i]);
    $title[$i] = str_replace("TRACK SEPARATION for ","", $title[$i]);
    $title[$i] = str_replace("TRACK SEPARATION & RIGHT OF FIRST REFUSAL for ","", $title[$i]);
    $title[$i] = str_replace("LIFETIME RIGHT OF FIRST REFUSAL for ","", $title[$i]);
     
     
    $title[$j] = str_replace("LEASE for ","", $title[$j]);
    $title[$j] = str_replace("TRACK SEPARATION for ","", $title[$j]);
    $title[$j] = str_replace("TRACK SEPARATION & RIGHT OF FIRST REFUSAL for ","", $title[$j]);
    $title[$j] = str_replace("LIFETIME RIGHT OF FIRST REFUSAL for ","", $title[$j]);
     
    						}else{$j=1; 
     
    							$title[$i] = str_replace("LEASE for ","", $title[$i]);
    $title[$i] = str_replace("TRACK SEPARATION for ","", $title[$i]);
    $title[$i] = str_replace("TRACK SEPARATION & RIGHT OF FIRST REFUSAL for ","", $title[$i]);
    $title[$i] = str_replace("LIFETIME RIGHT OF FIRST REFUSAL for ","", $title[$i]);
     
     
    $title[$j] = str_replace("LEASE for ","", $title[$j]);
    $title[$j] = str_replace("TRACK SEPARATION for ","", $title[$j]);
    $title[$j] = str_replace("TRACK SEPARATION & RIGHT OF FIRST REFUSAL for ","", $title[$j]);
    $title[$j] = str_replace("LIFETIME RIGHT OF FIRST REFUSAL for ","", $title[$j]);
     
    							} // <-- un oubli
     
    					if ( $title[$i] == $title[$j] ) {
    						echo "<a href='contract.php?orderno=".$g_orderno."' target='_blank'><strong>Contract</strong></a> for <i>".$title[$i]."</i>"; 
    					} else { 
    						echo "<a href='contract".$i.".php?orderno=".$g_orderno."' target='_blank'><strong>Contract</strong></a> for <i>".$title[$i]."</i><br /><br />";
    						echo "<a href='contract".$j.".php?orderno=".$g_orderno."' target='_blank'><strong>Contract</strong></a> for <i>".$title[$j]."</i><br />";
    					}break;
    				}
     
    		}
     
     
    	/*
    		if ( $title[1] == "" ) { 
    			echo "<a href='contract.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[0]</i>"; 
    		} elseif ( $title[0] == $title[1] ) {
    				echo "<a href='contract.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[0]</i>"; 
    		} else { 
    				echo "<a href='contract.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[0]</i><br /><br />";
    				echo "<a href='contract2.php?orderno=$g_orderno' target='_blank'><strong>Contract</strong></a> for <i>$title[1]</i>";
    		}
    	*/
    	}
    //cas où il ya des résultats : traitement
    } else {
    	echo 'There are no contracts available for download for your order.';
    }
    mysql_close();
    ?>

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

Discussions similaires

  1. [XL-2003] Répéter des données en fonction d'une valeur
    Par Korsa dans le forum Excel
    Réponses: 3
    Dernier message: 31/03/2011, 10h32
  2. Réponses: 4
    Dernier message: 11/06/2004, 16h27
  3. tronquer une donnée
    Par closo dans le forum XMLRAD
    Réponses: 2
    Dernier message: 24/02/2004, 15h42
  4. Première occurence d'une donnée
    Par bob33 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/06/2003, 13h50
  5. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

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