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 :

Simplification d'un tableau dans une fonction


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 54
    Par défaut Simplification d'un tableau dans une fonction
    J'ai regarder mon code mais je sèche
    Je voudrais simplifier mon 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
    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
    function affichagecase($nomcomref,$daterdvref,$condition,$orderby,$visuel)
    {					
    $sql = "SELECT  t1.idclient, t2.nomclient, t2.prenomclient, t2.cp ,t2.ville, t2.telephone, t2.portable, t2.adresse, t4.couleur, t1.id,  t1.rdvcommheure , t1.rdvcomm, t1.confirmcom, t1.resultatrdv, t2.rdv   
    FROM rdv  AS t1 
    INNER JOIN prospet AS t2 
    ON t2.id = t1.idclient AND (t1.idcomm='$nomcomref' OR t1.idcomm2='$nomcomref') $condition
    LEFT JOIN zone AS t3 
    ON t3.cp=t2.cp and t3.Idcomm='$nomcomref'  
    LEFT JOIN couleur AS t4 
    ON (t3.Idcouleurs=t4.Id   OR ISNULL(t4.couleur)) 
    order BY t1.$orderby ASC";
    	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    	while($data = mysql_fetch_array($req)) 
    		{			
    	    	foreach ($data as $key => $value) {
            $$key = $value;
    		}
    		$nomclient = strtoupper($data['nomclient']);
    		$prenomclient = ucfirst($data['prenomclient']);
    		$ville = strtoupper($data['ville']);
    		$telephone = chunk_split($data['telephone'],"2"," ");
    		$portable = chunk_split($data['portable'],"2"," ");
    		if(strlen($data['rdvcommheure']) == 3)
    			{	
    			$rdvcommheure = substr($data['rdvcommheure'],0,1)."h".substr($data['rdvcommheure'],1,2);
    			}
    		if(strlen($data['rdvcommheure']) == 4)
    			{	
    			$rdvcommheure = substr($data['rdvcommheure'],0,2)."h".substr($data['rdvcommheure'],2,2);			
    			}	
     
    		if(($confirm==0 or $confirm==0 )&& $datejour <= $rdvcommrefbase)
    			{$couleurtd = 'bgcolor="#FFFF00"';}
    		if(($confirm==1)  && $datejour <= $rdvcommrefbase)
    			{$couleurtd ='bgcolor="#00FF00"';}	
    		if(($rdv=='foire' || $rdv=='perso') && $datejour <= $rdvcommrefbase)
    			{$couleurtd ='bgcolor="#FF00FF"';}
    		if(($rdv=='recrutement tele' || $rdv=='recrutement commerciaux' or $rdv=='passage en salle' or $rdv=='Fournisseur (Bureau)' or $rdv=='Fournisseur deplacement' or $rdv=='Administratif' or $resultatrdv=='batiment') && $datejour <= $rdvcommrefbase)
    			{$couleurtd ='bgcolor="#00FFFF"';}
    		if($resultatrdv=='32' && $datejour <= $rdvcommrefbase)
    			{$couleurtd ='bgcolor="#0000FF"';}
    if($visuel=="rappel"){$couleurtd ='bgcolor="#FF0000"';}	
    		if($data['couleur']==NULL)
    		{$couleurtdzone ='bgcolor=""';}else{$couleurtdzone ='bgcolor="'.$data['couleur'].'"';}		
    		echo("<table width=\"100\" border=\"1\"><tr><td width=\"45\">");
    				if(($_SESSION['autorisation'] == 0 or $_SESSION['autorisation'] == 2) and $visuel!="rappel" )
    					{	
    					echo("<a href=\"index3.php?page=page/admin/agenda/index&page2=confirmation&id=$idclient&idrdv=$id\" >");
    					echo("<strong>$rdvcommheure</strong></a></td>");				
    					echo("<td width=\"139\" colspan=\"2\" $couleurtdzone><a href=\"impression/visurdv.php?id=$idclient&idrdv=$id&session=0\" target=\"_blank\">$nomclient<br>$prenomclient</a></td></tr>");
    					}
    					if($_SESSION['autorisation'] == 1 and $visuel!="rappel")
    					{	
    				echo("<strong>$rdvcommheure</strong></td>");					
    				echo("<td width=\"139\" colspan=\"2\" $couleurtdzone><a href=\"impression/visurdv.php?id=$idclient&idrdv=$id&session=1\" target=\"_blank\">$nomclient<br>$prenomclient</a></td></tr>");
    					}
    					if($visuel=="rappel")
    					{
    					echo("<strong>Rappel");
    					if($orderby=="rappel"){echo"<br>/Com";}
    					echo("</strong><td width=\"139\" colspan=\"2\" $couleurtdzone><a href=\"index3.php?page=page/admin/agenda/index&page2=com/ficheraptelepro&id=$idclient\" target=\"_parent\">$nomclient<br>$prenomclient</a></td></tr>");	
    					}
    				if($idclient=='165' or $idclient=='5' or $idclient=='7' or $idclient=='4' or $idclient=='1' or $idclient=='2' or $idclient=='3' or $idclient=='6')
    					{
    					echo("<tr><td colspan=\"3\" $couleurtd > $confirmcom </td></tr>");				
    					}
    				else
    					{
    					echo("<tr><td colspan=\"3\" $couleurtd >");
    					if($visuel!="rappel"){echo"$adresse<br>";}
    					echo("$cp&nbsp;$ville");
    					if(!empty($telephone)){echo("<br>$telephone");}
    					if(!empty($portable)){echo("<br>$portable");}
    					echo'</td></tr>';
    					}
    				echo'</table>';
     
    		}
    }

  2. #2
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    Que veux-tu simplifier au juste ? Peux-tu préciser (et joindre un bout de ton schéma SQL si tu as besoin d'aide sur ta requête).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 54
    Par défaut
    Je voudrais savoir si c'est possible de simplifier encore plus la fonction sql et surtout ce qui est a l'intérieur de la fonction

    Je voudrais savoir quel est la différence entre un if, else et ($var="null)?'1er résultat':'2eme résultat' le quel est plus rapide ???

    Mes tables:

    rdv = t1
    id
    idcomm
    idcomm2
    idclient
    telepro
    rdvcomm
    rdvcommheure
    confirm
    confirmcom
    confirmrappel
    resultatrdv
    rappel
    resultat

    prospect = t2
    id
    nomclient
    prenomclient
    adresse
    cp
    ville
    telephone
    portable

    zone = t3
    Id
    Idcomm
    Idcouleurs
    cp

    couleur = t4
    id
    nom_couleur
    couleur



    En sachant que c'est une fonction pour un agenda de commerciaux qui me permet d'afficher les Rdv et il peut avoir 2 commerciaux sur un RDV
    Par contre l'affichage est commerciaux par commerciaux

    Et j'ai re modifier ma fonction pour les rappel en 2 :

    Fct rappel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function verifaffichagecase($nomcomref,$condition2,$condition,$orderby,$visuel)
    {	
    $couleurtd='';				
    $sql = "SELECT  t1.id
    FROM rdv  AS t1 
    INNER JOIN prospet AS t2 
    ON t2.id = t1.idclient AND (t1.idcomm='$nomcomref' OR t1.idcomm2='$nomcomref') $condition2
    order BY t1.id DESC";
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    $data = mysql_fetch_array($req);
    $id=$data['id'];
    $condition.="AND t1.id = '$id'";
    affichagecase($nomcomref,$condition,$orderby,$visuel);
    }
    Fct affichage:
    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
    function affichagecase($nomcomref,$condition,$orderby,$visuel)
    {	
    $couleurtd='';
    $datejour = date("Ymd");			
    $sql = "SELECT  t1.idclient, t2.nomclient, t2.prenomclient, t2.cp ,t2.ville, t2.telephone, t2.portable, t2.adresse, t4.couleur, t1.id,  t1.rdvcommheure , t1.rdvcomm, t1.confirmcom, t1.resultatrdv, t2.rdv   
    FROM rdv  AS t1 
    INNER JOIN prospet AS t2 
    ON t2.id = t1.idclient AND (t1.idcomm='$nomcomref' OR t1.idcomm2='$nomcomref') $condition
    LEFT JOIN zone AS t3 
    ON t3.cp=t2.cp and t3.Idcomm='$nomcomref'  
    LEFT JOIN couleur AS t4 
    ON (t3.Idcouleurs=t4.Id   OR ISNULL(t4.couleur)) 
    order BY t1.$orderby ASC";
    	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    	while($data = mysql_fetch_array($req)) 
    		{			
    	    	foreach ($data as $key => $value) {
            $$key = $value;
    		}
    		$nomclient = strtoupper($data['nomclient']);
    		$prenomclient = ucfirst($data['prenomclient']);
    		$ville = strtoupper($data['ville']);
    		$telephone = chunk_split($data['telephone'],"2"," ");
    		$portable = chunk_split($data['portable'],"2"," ");
    		if(strlen($data['rdvcommheure']) == 3)
    			{	
    			$rdvcommheure = substr($data['rdvcommheure'],0,1)."h".substr($data['rdvcommheure'],1,2);
    			}
    		if(strlen($data['rdvcommheure']) == 4)
    			{	
    			$rdvcommheure = substr($data['rdvcommheure'],0,2)."h".substr($data['rdvcommheure'],2,2);			
    			}	
    		if($datejour <= $rdvcomm)
    			{		
    		if($confirm==0 or $confirm==5 )
    			{$couleurtd = 'bgcolor="#FFFF00"';}
    		if($confirm==1 )
    			{$couleurtd ='bgcolor="#00FF00"';}	
    		if(($rdv=='foire' || $rdv=='perso'))
    			{$couleurtd ='bgcolor="#FF00FF"';}
    		if(($rdv=='recrutement tele' || $rdv=='recrutement commerciaux' or $rdv=='passage en salle' or $rdv=='Fournisseur (Bureau)' or $rdv=='Fournisseur deplacement' or $rdv=='Administratif' or $resultatrdv=='batiment') && $datejour <= $rdvcommrefbase)
    			{$couleurtd ='bgcolor="#00FFFF"';}
    		if($resultatrdv=='32')
    			{$couleurtd ='bgcolor="#0000FF"';}
    			}
     
    if($visuel=="rappel"){$couleurtd ='bgcolor="#FF0000"';}	
    		if($data['couleur']==NULL)
    		{$couleurtdzone ='bgcolor=""';}else{$couleurtdzone ='bgcolor="'.$data['couleur'].'"';}		
    		echo("<table width=\"100\" border=\"1\"><tr><td width=\"45\">");
    				if(($_SESSION['autorisation'] == 0 or $_SESSION['autorisation'] == 2) and $visuel!="rappel" )
    					{	
    					echo("<a href=\"index3.php?page=page/admin/agenda/index&page2=confirmation&id=$idclient&idrdv=$id\" >");
    					echo("<strong>$rdvcommheure</strong></a></td>");				
    					echo("<td width=\"139\" colspan=\"2\" $couleurtdzone><a href=\"impression/visurdv.php?id=$idclient&idrdv=$id&session=0\" target=\"_blank\">$nomclient<br>$prenomclient</a></td></tr>");
    					}
    					if($_SESSION['autorisation'] == 1 and $visuel!="rappel")
    					{	
    				echo("<strong>$rdvcommheure</strong></td>");					
    				echo("<td width=\"139\" colspan=\"2\" $couleurtdzone><a href=\"impression/visurdv.php?id=$idclient&idrdv=$id&session=1\" target=\"_blank\">$nomclient<br>$prenomclient</a></td></tr>");
    					}
    					if($visuel=="rappel")
    					{
    					echo("<strong>Rappel");
    					if($orderby=="rappel"){echo"<br>/Com";}
    					echo("</strong><td width=\"139\" colspan=\"2\" $couleurtdzone><a href=\"index3.php?page=page/admin/agenda/index&page2=com/ficheraptelepro&id=$idclient\" target=\"_parent\">$nomclient<br>$prenomclient</a></td></tr>");	
    					}
    				if($idclient=='165' or $idclient=='5' or $idclient=='7' or $idclient=='4' or $idclient=='1' or $idclient=='2' or $idclient=='3' or $idclient=='6')
    					{
    					echo("<tr><td colspan=\"3\" $couleurtd > $confirmcom </td></tr>");				
    					}
    				else
    					{
    					echo("<tr><td colspan=\"3\" $couleurtd >");
    					if($visuel!="rappel"){echo"$adresse<br>";}
    					echo("$cp&nbsp;$ville");
    					if(!empty($telephone)){echo("<br>$telephone");}
    					if(!empty($portable)){echo("<br>$portable");}
    					echo'</td></tr>';
    					}
    				echo'</table>';
     
    		}
    }

    Et les appel au fonction:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    verifaffichagecase($nomcomref,"AND t1.confirm = '3' and t1.resultatrdv ='0'","AND t1.confirmrappel = '$daterdvref' and t1.confirm = '3' and t1.resultatrdv ='0'","rdvcommheure","rappel");
     
    	verifaffichagecase($nomcomref,"AND t1.resultatrdv ='3'","AND t1.rappel = '$daterdvref' and t1.resultatrdv ='3'","rappel","rappel");
     
     
     
    	affichagecase($nomcomref,"AND t1.rdvcomm = '$daterdvref' and t1.resultatrdv !='4' and t1.resultatrdv !='8'and (t1.confirm = '0' or t1.confirm =1 or t1.confirm ='5')","rdvcommheure","rdv");
    J'espère avoir été assé clair dans mes fct et mes tables.
    En clair je voudrais savoir si je peux encore optimiser mon code Merci d'avance.

  4. #4
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    Je voudrais savoir quel est la différence entre un if, else et ($var="null)?'1er résultat':'2eme résultat' le quel est plus rapide ???
    Si je ne dis pas de bêtise, l'écriture ternaire est équivalente. Après, savoir laquelle des deux écriture est interprétée la plus vite, je crois qu'ici cela est négligeable. Ce n'est pas comme çà que tu feras gagner de la vitesse à ton script.

    En sachant que c'est une fonction pour un agenda de commerciaux qui me permet d'afficher les Rdv et il peut avoir 2 commerciaux sur un RDV
    Par contre l'affichage est commerciaux par commerciaux
    En fait, le code métier, c'est toi qui décide comment le faire. Il n'y a jamais de solution parfaite mais une solution parfaite par situation. Je te laisse juger pour ton cas.

    Cependant, si tu veux vraiment simplifier ton code, je te conseille d'utiliser par exemple Doctrine. Pourquoi ? Et bien tu y gagneras en rapidité, en intéropatibilité, ton code sera plus claire. Si on peut éviter de taper toutes les requêtes SQL à la mais alors il vaut mieux le faire, d'autant plus que Doctrine est installable et utilisable en quelques minutes ! Souvent, on comprends ces erreurs avec un ORM car c'est plus simple de lire une requête formulée ainsi.

    En fait, pour t'aider ici, il faudrait, pour n'importe lequel des membres de ce forum, d'abord comprendre ce que tu veux faire exactement, assimilier la manière dont tu as créé tes tables pour répondre à tes besoins, puis ensuite réfléchir sur tes requêtes. Beaucoup de temps donc. C'est pourquoi je te conseille déjà de chercher à simplifier ton problème .

Discussions similaires

  1. Retourner un tableau dans une fonction
    Par oranoutan dans le forum Débuter
    Réponses: 14
    Dernier message: 05/10/2007, 13h39
  2. retour d'un tableau dans une fonction
    Par FlyByck dans le forum Delphi
    Réponses: 3
    Dernier message: 19/01/2007, 00h00
  3. Réponses: 1
    Dernier message: 28/12/2006, 17h02
  4. [langage] appel d'un tableau dans une fonction
    Par donny dans le forum Langage
    Réponses: 11
    Dernier message: 13/11/2006, 16h17
  5. Accéder à un tableau dans une fonction
    Par valanagrid dans le forum C++
    Réponses: 10
    Dernier message: 18/09/2006, 16h08

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