Pièce jointe 529759
Voilà ce que me donne ton code Saveus
Version imprimable
Pièce jointe 529759
Voilà ce que me donne ton code Saveus
il doit y avoir un probleme de <td> ou de " qq part ;
mais tu as le principe...
exact tu avais mis <tr> au lieu de <td>
Voilà ce que j'ai :
Pièce jointe 529787
il y as surement des chose a faite au niveau des conditions de sortie de la boucle
Code:
1
2
3
4
5
6
7
8
9 if ($row2['TIMER'] === NUll) { $timestp=0; } else { $timestp=$row2['TIMER']; }
mais bon si je regarde la derniere image qui du as mis.
tu as bien a priori tout les incidents (certes mal formaté) et le temps total de down (la valeur total des arret ici 1441mn après le dernier "cliquez ici") sur l'image.
après je te laisse adapter tout ca a ta page.
Bah non , ça ne devrais pas afficher 0 , donc il y a un problème
Bonjour,
Je viens seulement de voir que tu as testé ma solution () dans ton message #19.
Mais tu t'es trompé :
Normal que tu n'aies pas de résultats !Code:
1
2
3
4 if ($resultat1 = $mysqli->query(".......")) { ... while( $row= $result->fetch_array())
C'est :
Code:while( $row= $resultat1->fetch_array())
J'obtiens ça : Pièce jointe 530778
La question, c'est de savoir si tu comprends les codes qu'on te propose (ça vaut pour celui de saveus aussi), ou si tu te contentes de copier-coller "bêtement"...
Là, tu montres un résultat, sans montrer ton code, ni le résultat que tu es censé obtenir.
Il faudrait aussi avoir un extrait (significatif) de la table SQL pour pouvoir tester.
Ton code je le comprends , lui de saveus pas completement.
Code:
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 if ($resultat1 = $mysqli->query("SELECT * FROM AUTOMATES.TIMERSIMA WHERE OF='$id_of' ORDER BY TIMER ASC")) { $compteur2 = array(); $i = 0; while( $row5= $resultat1->fetch_array()) { if( empty($compteur2[$i]) ) { $compteur2[$i]['minutes'] = 0; $compteur2[$i]['Timedebut'] = $row5['TIMER']; $compteur2[$i]['Timefin'] = $row5['TIMER']; } if( $row2['STATUS'] == 'ARRET' ) { $compteur2[$i]['minutes']++; // on incrémente } else { $compteur2[$i]['Timefin'] = $row5['TIMER']; $i++; // on incrémente } } } echo $row5['TIMER'];
echo $row5['TIMER']; n'affiche rien
LOL... Normal... ce n'est pas là qu'il faut le mettre, mais dans le while.
Et c'est $row5 PARTOUT !!! (pas de $row2 ici)
Code:
1
2
3
4 while( $row5= $resultat1->fetch_array()) { echo 'STATUT : '.$row5['STATUS'].' - TIMER : '.$row5['TIMER'].'<br />'; ...
Bonjour, j'obtiens cela :
Pièce jointe 531095
avec ce code :
Code:
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<table id="tableau2" summary="E"> <thead> <CAPTION><h1> ERREURS</h1> </CAPTION> <th scope="col">ID</th> <th scope="col">DEBUT</th> <th scope="col">TEMPS ARRET</th> <th scope="col">OF</th> <th scope="col">COMPTEUR</th> <th scope="col">STATUT</th> <th scope="col">Voir les erreurs</th> </thead> <tfoot> <tr> <td colspan="11"> </td> </tr> </tfoot> <?php if ($resultat1 = $mysqli->query("SELECT * FROM AUTOMATES.TIMERSIMA WHERE OF='$id_of' AND STATUS='ARRET' ORDER BY TIMER ASC")) { $compteur2 = array(); $i = 0; while( $row2= $resultat1->fetch_array()) { //echo ';'.$row2[0]; echo "<TD>" . $row2['ID'] . "</TD>"; echo "<TD>" . date('d/m/Y -- H:i:s ', $row2['TIMER']) . "</TD>"; echo "<TD>" . $row2['TIMER'] . "</TD>"; echo "<TD>" . $row2['OF'] . "</TD>"; echo "<TD>" . $row2['compteur'] . "</TD>"; echo "<TD>" . $row2['STATUS'] . "</TD>"; echo "<TD><a href='codeerror.php?ID=".$row2['ID']."' rel='external' data-role='button' data-mini='true' data-inline='true'>cliquez ici</a></td>"; echo "</tr>"; if( empty($compteur2[$i]) ) { $compteur2[$i]['minutes'] = 0; $compteur2[$i]['Timedebut'] = $row2['TIMER']; $compteur2[$i]['Timefin'] = $row2['TIMER']; } if( $row2['STATUS'] == 'ARRET' ) { $compteur2[$i]['minutes']++; // on incrémente } else { $compteur2[$i]['Timefin'] = $row2['TIMER']; $i++; // on incrémente } } } ?>
Comment veux-tu pouvoir arrêter de compter quand STATUS passe en "MARCHE", alors que tu ne sélectionnes QUE les STATUS='ARRET' ?? :cfou:Code:if ($resultat1 = $mysqli->query("SELECT .... AND STATUS='ARRET' ...."))
Soit LOGIQUE.
Regarde j'ai modifié mon message, ne t'inquiète pas je l'ai vu , c'etait juste une erreur d'observation ;)
Si non quand je veux afficher :
Code:
1
2
3
4 echo $compteur2[$i]['Timedebut']; echo $compteur2[$i]['Timefin'] ;
J'ai le meme resultat , c'est normal ?
1- Donne un extrait de la table SQL, qu'on puisse tester
2- Tu ne sais toujours pas nous dire où tu veux afficher les résultats du compteur...
Montre un dessin de ce que tu veux obtenir.
1- Je t'envoie ça en privée
2- DANS MON 1ER MESSAGE JE L'AI DIT !!!!
Pièce jointe 531107
Alors ECRIS-LE avec des MOTS, et avec LOGIQUE !!!!!!!!!!!!
Car c'est comme ça qu'on trouve la MÉTHODOLOGIE à suivre.
Je veux l'afficher dans le tableau , dans la colonne "TEMPS ARRET",
du nouveau ?
Bonjour,
j'ai fait des tentatives... jusqu'ici infructueuses... :oops:
Le code que j'avais proposé est trop simpliste, et j'en suis arrivé à une usine à gaz... non-fonctionnelle !
Par contre, j'ai constaté plusieurs problèmes.
1- D'après le tableau (<table>) que tu montres, on doit afficher sur chaque ligne du tableau les "ID" (et un lien "cliquez ici" avec cet ID en paramètre).
Mais LESQUELS, puisque :
- on n'affiche qu'une ligne (un seul ID) par "ARRET"
- mais plusieurs arrêts consécutifs correspondent à plusieurs ID !
Donc, EXPLIQUE-nous ça.
2- Dans la table (SQL) (que tu m'as envoyée en MP) :
- la différence de TIMER de 2 lignes successives ne correspond pas à UNE minute !
J'ai constaté : 10 min, 8 min,...
- pour un "OF" donné, les ID ne se suivent pas non plus...
Ex. pour OF = '349540'
30212, 30213,... 30216, -> 30121, 30122,...
- J'ai constaté aussi 2 TIMER identiques sur 2 lignes consécutives ! (alors qu'ils devraient être différents)
Ex. pour OF='0344031'
312 -> 1571660761
313 -> 1571660761
Là aussi, EXPLIQUE-nous ça.
CONCLUSION : NI "compter les lignes", NI "faire une différence de TIMER" ne semble PERTINENT pour "compter les TEMPS d'ARRET" !
DONC : demande des PRÉCISIONS à ton "tuteur".
Voici un code, qui semble donner de bons résultats * :
Affichage :Code:
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 <?php // --------------------- function build_html_table_tr_ARRETS( $rowAll ) { $table_datas = array(); $compteur = array(); $row_PREV = array(); // row précédent $compteur['minutes'] = 0; // compteur de ligne en ARRET $compteur['Timedebut'] = ''; // début ARRET $compteur['Timefin'] = ''; // fin ARRET $compteur['IDs'] = array(); // liste des ID correspondant à un ARRET // --------- foreach( $rowAll as $row ) { if( $row['STATUS']=='ARRET' ) { $compteur['minutes']++; $compteur['IDs'][] = $row['ID']; if( empty($compteur['Timedebut']) ){ $compteur['Timedebut'] = $row['TIMER']; } $compteur['Timefin'] = $row['TIMER']; } if( !empty($row_PREV) && $row_PREV['STATUS']=='ARRET' && $row['STATUS']!='ARRET' ) { if( empty($compteur['Timedebut']) ){ $compteur['Timedebut'] = $row_PREV['TIMER']; } $compteur['Timefin'] = $row['TIMER']; $table_datas[$row_PREV['ID']] = $row_PREV; $table_datas[$row_PREV['ID']]['minutes'] = $compteur['minutes']; $table_datas[$row_PREV['ID']]['Timedebut'] = $compteur['Timedebut']; $table_datas[$row_PREV['ID']]['Timefin'] = $compteur['Timefin']; $table_datas[$row_PREV['ID']]['IDs'] = $compteur['IDs']; } if( $row['STATUS']!='ARRET' ) { $compteur['minutes'] = 0; $compteur['Timedebut'] = ''; $compteur['Timefin'] = ''; $compteur['IDs'] = array(); } $row_PREV = $row; } // --------- // derniere ligne (en dehors du foreach) if( $row['STATUS']=='ARRET' ) { $compteur['Timefin'] = $row['TIMER']; $table_datas[$row['ID']] = $row; $table_datas[$row['ID']]['minutes'] = $compteur['minutes']; $table_datas[$row['ID']]['Timedebut'] = $compteur['Timedebut']; $table_datas[$row['ID']]['Timefin'] = $compteur['Timefin']; $table_datas[$row['ID']]['IDs'] = $compteur['IDs']; } // --------- return $table_datas; } // --------------------- ?>
Code:
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 <?php // --------------------- $id_of = '349540'; $table_datas = array(); if ($result = $mysqli->query("SELECT * FROM TIMERSIMA WHERE OF='$id_of' ORDER BY TIMER ASC")) { $rowAll = $result->fetch_all(MYSQLI_ASSOC); $table_datas = build_html_table_tr_ARRETS( $rowAll ); } // --------------------- ?> <table id="tableau2" summary="E"> <caption><h1> ERREURS</h1> </caption> <thead> <th scope="col">IDs</th> <th scope="col">OF</th> <th scope="col">Time Début</th> <th scope="col">Time Fin</th> <th scope="col">Time Diff.</th> <th scope="col">Minutes</th> <th scope="col">STATUT</th> <th scope="col">Voir les erreurs</th> </thead> <tbody> <?php // Affichage foreach( $table_datas as $row ) { $dateDebut = new DateTime(); $dateDebut->setTimestamp($row['Timedebut']); $dateFin = new DateTime(); $dateFin->setTimestamp($row['Timefin']); $dateDiff = $dateDebut->diff($dateFin); echo " <tr> <td>" . implode(', ',$row['IDs']) . "</td> <td>" . $row['OF'] . "</td> <td>" . $dateDebut->format('d/m/Y H:i:s') . "</td> <td>" . $dateFin->format('d/m/Y H:i:s') . "</td> <td>" . $dateDiff->format('%I:%S') . "</td> <td>" . $row['minutes'] . "</td> <td>" . $row['STATUS'] . "</td> <td><a href='codeerror.php?ID=".$row['ID']."' rel='external' data-role='button' data-mini='true' data-inline='true'>cliquez ici</a></td> </tr> "; } ?>
- "Time Diff." donne la différence entre "début" et "fin".
- "Minutes" compte le nombre de lignes en ARRET (censés être des minutes...)
* Ce qui ne résout pas les problèmes cités dans mon précédent message.
-> Tester par exemple :
- $id_of = '0343134';,