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 :

Est ce que ce code peut être amélioré ?


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Est ce que ce code peut être amélioré ?
    Bonjour,

    Je viens de faire un petit bout de code qui doit afficher les résultat d'une requête dans un tableau html.
    Le hic vient du fait que pour le nombre de colonne à afficher change 1 ligne sur 2.
    Première ligne : j'affiche 3 enregistrements.
    Deuxième ligne : j'affiche 4 enregistrements.

    Ce code fonctionne mais est-il "correct" ou franchement à la ramasse et peut être bien plus optimisé ?

    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
     
    $sqlCategory = "select idWork, urlWork, idWorkCat, nomWork, nomWorkCat from work 
    						JOIN workcategory ON work.idWorkCatWork = workcategory.idWorkCat
    						where nomWorkCatUse ='".$menuUser."'
    						ORDER BY anneeWork DESC ";
    		$reqCategory = $bdd->prepare($sqlCategory, array(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL));
    		$reqCategory->execute();
     
    		$sqlBoulotCount = "select count(*) as nb from work 
    						JOIN workcategory ON work.idWorkCatWork = workcategory.idWorkCat
    						where nomWorkCatUse ='".$menuUser."'
    						ORDER BY anneeWork DESC ";
    		$reqBoulotCount = $bdd->query($sqlBoulotCount);
    		$nbBoulotCount= $reqBoulotCount->fetchAll();
     
    		$nbBoulot = $nbBoulotCount[0]['nb'];
     
    echo '<table style="color:black;">';
    		echo '<tbody>';
     
    		$ii = 0;
    		$row = $reqCategory->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT);
    		$z = 0;
    		do {
    			if ($ii == 0) {
    				echo '<tr class="pair">';
    					for ($x=0; $x < 3; $x++) {
    						if ($row != null) {
    							echo '<td><a href="'.get_domain().'graphiste/'.$row[1].'" title="'.$row[3].'"><img src="'.get_domain().'img/rond.png" /></a></td>'."\n";
    							$row = $reqCategory->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT);
    							$z++;
    						}
    						else {
    							break;
    						}
    					}
    				echo '</tr>'."\n";
    				$ii++;
    			}
    			else {
    				echo '<tr>';
    					for ($x=0; $x <4; $x++) {
    						if ($row != null) {
    							echo '<td><a href="'.get_domain().'graphiste/'.$row[1].'" title="'.$row[3].'"><img src="'.get_domain().'img/rond.png" /></a></td>'."\n";
    							$row = $reqCategory->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT);
    							$z++;
    						}
    						else {
    							break;
    						}
    					}
    					echo '</tr>'."\n";
    				$ii--;
    			}
    		}
    		while ($z < $nbBoulot);
    Merci de votre aide !

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    tu exécute deux fois la même requête, dont une fois seulement pour récupérer le nombre de ligne, cette requête ne semble pas utile, d'autant plus qu'elle ne te sert qu'à boucler sur le résultat de la première. Je n'utilise pas encore la POO pour l'accès aux donnée mais il doit être possible de boucler tant qu'on à des lignes. Exemple avec odbc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while(odbc_fetch_row($res)){
    ...
    }

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,
    Comme tu le sentais par toi-même : il ne faut pas faire ce que tu as fais pour une simple alternance entre pair et impair.
    Si tu n'as pas besoin d'afficher exprèssement le nombre d'enregistrements pas la peine de les compter. Tu as foreach(...) à disposition pour parcourir un jeu d'enregistrements:
    Tout ton code se résume à 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
    31
    32
    33
    34
    35
    <?php
    	$sqlCategory = 
    	'select idWork, urlWork, idWorkCat, nomWork, nomWorkCat from work '
    	. 'JOIN workcategory ON work.idWorkCatWork = workcategory.idWorkCat '
    	. 'where nomWorkCatUse ='.$menuUser.'	ORDER BY anneeWork DESC';
     
    	$reqCategory = $bdd->prepare($sqlCategory, array(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL));
    	$reqCategory->execute();
    	$rows = $reqCategory->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT);
     
    	$result   = array();
    	$result[] = '<table style="color:black;">';
    	$result[] = '<tbody>';
     
    	$pair     = TRUE;
    	$i        = 0;
     
    	foreach($rows as $row) {
    		++$i;
    		$code = '<td><a href="'.get_domain().'graphiste/'.$row[1].'" title="'.$row[3].'"><img src="'.get_domain().'img/rond.png" /></a></td>';
    		if ($i == 1) $result[] = ($pair) ? '<tr class="pair">' : '<tr>';
    		if ($i <= 3) $result[] = $code;
    		if (($pair) && ($i == 3)) {
    			$result[] = '</tr>';
    			$pair = FALSE; 
    			$i = 0;
    		} elseif ($i == 4) {
    			$result[] = $code;
    			$result[] = '</tr>';
    			$pair = TRUE;
    			$i = 0;
    		}
    	}	
    	echo implode("\n", $result);
    ?>
    PS : Désole j'étais à côté de mes pompes sur la 1ère version

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    bonjour,

    Ah oui en effet, j'étais loin du compte !
    Merci beaucoup pour cette réponse.

    j'ai fait deux, trois petites modifs et c'est perfect.

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

Discussions similaires

  1. Le TDD est mort ? non, pas vraiment, peut-être que oui
    Par Arsene Newman dans le forum ALM
    Réponses: 61
    Dernier message: 16/07/2014, 14h44
  2. Le TDD est mort ? non, pas vraiment, peut-être que oui
    Par Arsene Newman dans le forum Méthodes Agiles
    Réponses: 30
    Dernier message: 12/06/2014, 10h31
  3. Réponses: 10
    Dernier message: 13/09/2011, 10h08
  4. Réponses: 15
    Dernier message: 19/09/2007, 18h46
  5. Est ce que cette ram peut aller sur mon pc?
    Par Death83 dans le forum Composants
    Réponses: 3
    Dernier message: 29/09/2005, 11h58

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