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 :

Contruction Table (HTML) bug affichage


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2012
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 56
    Par défaut Contruction Table (HTML) bug affichage
    Bonjour

    J'ai créé un script qui effectue la mise a jour de compteur dans une BDD.
    Au fur et à mesure du script je log des actions et construit un compte rendue sous la forme d'un tableau HTML que j'envoie par email.

    LE problème c'est que j'ai des bugs d'affichages comme si j'avais oublié de fermer une Balise <tr> ou <td> aléatoirement dans le tableau (voir ci-après)

    Exemple

    Comme vous pouvez le voir il y a un décalage. Le tableau fait à peu près 400 lignes et le bug arrive aléatoirement et jamais au même endroit.

    Le bug ne provient pas du code...enfin il me semble.
    Y a-t-il un moyen d'éviter cela?

    D'avance merci de vos réponses

  2. #2
    Membre très actif Avatar de demenvil
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Avril 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste développeur
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 195
    Par défaut
    Salut !
    Un peu de code serai la bienvenue ! Comment trouver l'erreur si on ne sais pas ce qui se passe derrière ?!
    Merci !

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Le bug ne provient pas du code...
    Ben voyons... c'est vrai que c'est un peu meilleur pour l'égo de considérer que le langage fait de temps en temps des farces, mais la réalité est souvent différente !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre averti
    Inscrit en
    Novembre 2012
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 56
    Par défaut
    Ouep me doutais bien aussi.

    Si je pense que le problème ne provient pas du code je m'appuie des constatations.

    Je construit deux tableaux en parralleles qui sont strictements les memes et le bug n'arrive (si il arrive) jamais au meme endroit dans les tableaux.
    Si je relance le script aprés son éxécution (Le Log est normalement le meme), le Bug arrive mais pas forcément au meme endroit dans le tableau.


    Mais bon le code vous parlera surement plus j'ai sortie le début et la fin du scripts mais la consturction des tableaux est la.

    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
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
     
    //--------------------------------------------------------
     
    $rapport = "<html><head><title>Rapport kilometre fin de mois</title></head><body>Bonjour,<br><br>Veuillez trouver ci aprés le rapport de mise à jour des kilomètres dans SIP2.<br>Merci de contrôler les véhicules en echec.<br><br><table border='1'><tr><td>Filiale</td><td>Client</td><td>Parc</td><td>réservation</td><td>date km</td><td>compteur</td><td>Résultat</td></tr>";
     
     //Connexion à la base SIP2 TEST
    $connect_sip2 = OCILogon("XXXX","XXXXX","XXXXXX/XXXXXX");
    if($connect_sip2)
    {
    	$savefil = "";
    	while($row = oci_fetch_array($queryveh, OCI_NUM))
    	{
    		$kmend = "";
    		$datekm = "";
    		//reinitialisation variable
    		$nbjourecart = "";
    		$daterapport="";
    		//Récupération donnée requete oracle
    		$idres = $row[0];
    		$numres = $row[1];
    		$idveh = $row[2];
    		$parc = $row[3];
    		$idchgtcpt = $row[4];
    		$fil = $row[5];
    		$clients = $row[6];
     
    		//Création rapport par filiale
    		if($savefil!=$fil)
    		{
    			if($savefil!="")
    			{
    				//fermeture du tableau
    				$rapportfil["'".$savefil."'"] .= "</table><br>Bien cordialement.<br><br>Le service de récupération et d'insertion des compteurs</body></html>";
    				//Récupération de l'email du responsable maintenance
    				$mailresp = recup_email($savefil);
    				//Envoie du rapport
    				envoiemail($mailresp,$rapportfil["'".$savefil."'"],$savefil);
    				$rapportfil["'".$savefil."'"] = "";
    			}
     
    			$savefil = $fil;
    			$rapportfil["'".$fil."'"] = "<html><head><title>Rapport kilometre fin de mois</title></head><body>Bonjour,<br><br>Veuillez trouver ci aprés le rapport de mise à jour des kilomètres dans SIP2.<br>Merci de contrôler les véhicules en echec.<br><br><table border='1'><tr><td>Filiale</td><td>Client</td><td>Parc</td><td>réservation</td><td>date km</td><td>compteur</td><td>Résultat</td></tr>";
    		}
     
     
     
    		//Création de la date insertion
    		$jourajout = rand(1,3);
    		$heureajout = rand(10,17);
    		$minuteajout = rand(10,59);
    		$secajout = rand(10,59);
     
    		$dateajout = "0".$jourajout."/".date("m/Y")." ".$heureajout.":".$minuteajout.":".$secajout;
     
    		//Récupérration du kilométrage
    		//Construction de la requete Webservices
    		$VehicleSelection = new stdclass();
    		$vehicules = array();
    		$IdentifierVehicle = new stdclass();
    		$IdentifierVehicle -> IdentifierVehicleType = "ID";
    		$IdentifierVehicle -> Id = $parc;
    		$vehicules[] = $IdentifierVehicle;
    		$VehicleSelection->Identifiers=$vehicules;
     
    		$sender = new stdClass();
    		$sender->Login = $login;
    		$sender->VehicleSelection =$VehicleSelection;
     
     
    		try {
    			$return = $client->Get_Vehicles_V7($sender);
    			if($return)
    			{
    				$kmend = $return -> Get_Vehicles_V7Result -> Vehicles -> InterfaceVehicleResult_V7 -> CurrentKms;
    				$datekm = $return -> Get_Vehicles_V7Result -> Vehicles -> InterfaceVehicleResult_V7 -> Modified;
    				echo $parc." : KM=".$kmend." ,date=".$datekm."<br><br>";
    			}
    		} catch (Exception $e) {
    			echo "ERREUR PARC ".$parc."<br><br><br>";
    		}
     
     
     
     
     
     
    		//Récupération de la diférence entre Date KM et date de récupération attendue
    		if($datekm!="")
    		{
    			$tabdkm = explode("T",$datekm);
    			$tabdatekm = explode("-",$tabdkm[0]);
    			$ankm = $tabdatekm[0];
    			$moiskm = $tabdatekm[1];
    			$jourkm = $tabdatekm[2];
    			$tabheurekm = explode(":",$tabdkm[1]);
    			$heurekm = $tabheurekm[0];
    			$minkm = $tabheurekm[1];
    			$seckm = "00";
    			//convertion en timestamp UNIX
    			 $drecupkm = mktime($heurekm,$minkm,$seckm,$moiskm,$jourkm,$ankm);
    			 $nbjourecart = ($datecompare-$drecupkm)/3600/24;
    			 $daterapport = $jourkm."/".$moiskm."/".$ankm." ".$heurekm.":".$minkm.":".$seckm;
    		}
     
    		//Génération du rapport
    		$rapport .= "<tr><td>".$fil."</td><td>".$clients."</td><td>".$parc."</td><td>".$numres."</td><td>".$daterapport."&nbsp;</td><td>".$kmend."&nbsp;</td>";
    		$rapportfil["'".$fil."'"] .= "<tr><td>".$fil."</td><td>".$clients."</td><td>".$parc."</td><td>".$numres."</td><td>".$daterapport."</td><td>".$kmend."</td>";
    		//Récupération de id activite max
    		$recupid = "select max(id_activite) from t_activite";
    		$recupid = ociparse($connect_sip2,$recupid);
    		ociexecute($recupid,OCI_COMMIT_ON_SUCCESS);
    		$maxid = oci_fetch_array($recupid, OCI_NUM);
    		$ida = $maxid[0]+1;
    		oci_free_statement($recupid);
    		//insertion en base de donnée dans leur petit cul
    		if($nbjourecart == '' || $kmend=='' || $kmend == null)
    		{
    			$rapport .= "<td>Echec de récupération du compteur</td>";
    			$rapportfil["'".$fil."'"] .= "<td>Echec de récupération du compteur</td>";
    		}else if ($nbjourecart<=3)
    		{
    			//Il faut vérifier si un compteur existe pour la date heure et faire une mise a jour si c est le cas
    			$qtest = "select id_activite,COMPTEUR_RELEVE from t_activite where id_origine_compteur=345 and id_type_objet_sip=56 and id_objet='".$idres."' and DATEHEURE_EVENEMENT=to_date('".$dateins." 23:59:00','DD/MM/YYYY HH24:MI:SS')";
    			$res = ociparse($connect_sip2,$qtest);
    			ociexecute($res,OCI_COMMIT_ON_SUCCESS);
    			$re = oci_fetch_array($res, OCI_NUM);
    			if($re[0]==null)
    			{
    				$rapport .= "<td>Insertion du compteur</td>";
    				$rapportfil["'".$fil."'"] .= "<td>Insertion du compteur</td>";
    				$insert = "insert into t_activite(ID_ACTIVITE, ID_VEHICULE, ID_ORIGINE_COMPTEUR, FIABILITE,ID_TYPE_OBJET_SIP, ID_OBJET, DATEHEURE_CREATION, DATEHEURE_EVENEMENT, COMPTEUR_RELEVE, COMPTEUR_AFFICHE , ACTIVITE,  CALCULEE,  ID_MOTIF_REJET_COMPTEUR,  CHANGEMENT_COMPTEUR,  ID_CHANGEMENT_COMPTEUR,REJET_ILLEGITIME ) values ('".$ida."', '".$idveh."','345', '3','56', '".$idres."',to_date('".$dateajout."','DD/MM/YYYY HH24:MI:SS'), to_date('".$dateins." 23:59:00','DD/MM/YYYY HH24:MI:SS'), '".$kmend."', '".$kmend."' , '".$kmend."',  '0',  '1',  '0',  '".$idchgtcpt."','0')";	
    				$insert = ociparse($connect_sip2,$insert);
    				ociexecute($insert,OCI_COMMIT_ON_SUCCESS);
    				$redo .= "delete from t_activite where ID_ACTIVITE='".$ida."';<br>";
    			}else
    			{
    				$rapport .= "<td>Mise à jour du compteur</td>";
    				$rapportfil["'".$fil."'"] .= "<td>Mise à jour du compteur</td>";
    				$update = "update t_activite set COMPTEUR_RELEVE='".$kmend."',COMPTEUR_AFFICHE='".$kmend."' ,ACTIVITE='".$kmend."' where id_activite='".$re[0]."'";	
    				$update = ociparse($connect_sip2,$update);
    				ociexecute($update,OCI_COMMIT_ON_SUCCESS);
    			}
    		}else if ($nbjourecart>3)
    		{
    			$rapport .= "<td>Non traité compteur supèrieur à trois jours</td>";
    			$rapportfil["'".$fil."'"].= "<td>Non traité compteur supèrieur à trois jours</td>";
    		}
    		$rapport .= "</tr>";
    		$rapportfil["'".$fil."'"].= "</tr>";		
    	}
    	$rapport .= "</table><br>Bien cordialement.<br><br>Le service de récupération et d'insertion des compteurs</body></html>";
    }

  5. #5
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Le source HTML du tableau produit est aussi utile à consulter. Et dans ce cas, avoir concaténé des "\n" après chaque cellule n'est pas qu'esthétique de puriste qui soigne les coulisses.

    Ce qui peut arriver, c'est que tu fais un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab.='<tr><td>'.$cellule.'</td></tr>';
    //mais si $cellule contient "L'alouette", que va-t-il donc se passer hein dis donc ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 351
    Par défaut
    Pour info: En php les variables sont interprétées entre des doubles cotes : "$variable", donc il n'y a aucune utilité a faire des dizaines de concaténations, à part pour augmenter les risques d'erreurs.

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $parc." : KM=".$kmend." ,date=".$datekm."<br><br>";
    =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "$parc : KM=$kmend ,date=$datekm <br><br>";
    Sinon pour ton problème, ça peut aussi faire ce genre de truc si une donnée provenant de ta base est manquante. Ça fait un "trou" dans le tableau à l'endroit où devait se trouver la donnée. Ce comportement survient uniquement sous IE, et pas sous firefox ou chrome. Fais le test, si un même tableau s'affiche mal sous IE et bien sous ff ça doit être ça. Solution : tester tes valeurs au sortir de la base et si la valeur est null mettre un espace à la place.

  7. #7
    Membre averti
    Inscrit en
    Novembre 2012
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 56
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Le source HTML du tableau produit est aussi utile à consulter. Et dans ce cas, avoir concaténé des "\n" après chaque cellule n'est pas qu'esthétique de puriste qui soigne les coulisses.

    Ce qui peut arriver, c'est que tu fais un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab.='<tr><td>'.$cellule.'</td></tr>';
    //mais si $cellule contient "L'alouette", que va-t-il donc se passer hein dis donc ?
    Tu n'as pas tord mais ce n'est pas le problème ici. Si tu regarde la capture d'écran on voit bien que la ou ce produit le bug toutes les variables des cellules ont une valeur. Mais pars un couac qui fait l'objet de ce poste la valeur de la 3eme colone ce retrouve a un moment dans la 2eme précédé de ">" qui est la fin du </td> pécédent. Du coup tout ce décalle d'une colone.

    Je vais sortir les concaténation j'ai toujours fait comme cela, cela me semble plus propore a lire mais si ça sert a rien....merci pour le conseil.

    Comme tu le dis me bug est inexitant sous chrome, mais comme je le l'explique au dessus la ou ce produit le décallage la donnée est bien présente. Je vais tester avec un &nbsp; dans toutes les cellules on verra bien le résultat.

    Merci pour votre aide.

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Utiliser htmlentities sur les valeurs contenues dans les cases serait sans doute une bonne idée.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. [MySQL] bug affichage données provenant d'une table
    Par claire34 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 13/12/2010, 14h13
  2. [WD15] Bug Affichage Table mémoire en monosélection
    Par sphynxounet dans le forum WinDev
    Réponses: 4
    Dernier message: 22/07/2010, 15h53
  3. [MySQL] Recherche dans une table - petit bug affichage multiple pour certaine recherche
    Par runcafre91 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/01/2010, 09h44
  4. [VB.Net] Affichage de données dans table HTML
    Par Off$ide dans le forum ASP.NET
    Réponses: 7
    Dernier message: 04/11/2005, 13h58
  5. Réponses: 2
    Dernier message: 14/03/2005, 19h55

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