8768 sujets

Développement web côté serveur, CMS

Je cherche le moyen de compter dans un tableau le nombre de personnes appartenant a un groupe ( groupe1 ) et a une heure ( 09:00 ).
J'ai comme résultat du compteur : 200000000000000 ( effectivement il y a bien 2 personnes correspondant ce ces conditions dans mon tableau )
Comment afficher uniquement le "2" ( c'est a dire additionner les valeurs affichée 2+0+0+0+0+0+ ... ) ?

Merci

Ci dessous le code actuel:


$r2=$my->query_array($sql2); ( resultat de la requete )

$counter=0;
$today=date('H:i',strtotime($row['heure']));


while ($row2=$r2->fetch_array()) {

if ($row2['groupe'] == 'groupe1' && $today == '09:00')
$counter++ ;

}

echo $counter;
Bonjour.

Curieux, ça ne le fait pas chez moi. Un entier reste un entier. A priori, vous pouvez transtyper, avant de l'afficher, avec :
echo (int) $counter;


Votre façon de faire est néanmoins étrange : pourquoi ne pas utiliser une requête qui utilise COUNT ?

Smiley smile
Surement parceque je suis dans une boucle while au dessus.
Il me fait actuellement une somme pour chaque lignes.

Voici le code complet:

while ($row=$r->fetch_array()) {

if ($row['type']=='test1') {
$sql2 = 'SELECT ... ; //( my request)

$r2=$my->query_array($sql2);

$counter=0;
$today=date('H:i',strtotime($row['heure']));

while ($row2=$r2->fetch_array()) {

if ($row2['libellee'] == 'groupe1' && $today == '09:00')
$counter++ ;

$t.= '<tr><td class="text">'.$txt_annule.'&nbsp; '.$row2['nom'].' '.$row2['prenom'].'</td>'.PHP_EOL;
$t.= '<td class="text">'.date('H:i',strtotime($row2['heure'])).'</td>'.PHP_EOL;
$t.= '<td class="text">'.$row2['libellee'].' </td>'.PHP_EOL;
$t.= '</tr>'.PHP_EOL;
}

echo $counter;
}

else if ($row['type']=='test2') {

$t.= '<tr><td class="text">'.$txt_annule.'&nbsp;&nbsp '.$row2['nom'].' '.$row2['prenom'].'</td>'.PHP_EOL;
$t.= '<td class="text">'.date('H:i',strtotime($row2['heure'])).'</td>'.PHP_EOL;
$t.= '<td class="text">'.$row2['libellee'].' </td>'.PHP_EOL;
$t.= '</tr>'.PHP_EOL;
}
}
Bonjour,

Le code fait ce qui lui est demandé, a savoir afficher le valeur de counter à chaque fois que $row['type'] vaut 'test1'.

Si tu écris ta ligne
echo $counter;

comme ça
echo $counter.'<br>';

tu devrais avoir un affichage de la forme :
2
0
0
etc...
et plus 200000...

Il faut revoir la logique de ta boucle et d'affichage.

Cordialement,
ok merci ! ( je suis encore débutant dans le developpement)
Ma nouvelle question est donc comment additionner ces valeurs :
2
0
0
1
1
--> J'aimerai que mon compteur affiche "4"

En mettant mon echo $counter a l’extérieur de ma 1ere boucle j'ai bien qu'une seule valeur et non plus 200000.
Par contre cela m'affiche 0 alors qu'il devrait m'afficher 2 dans mon exemple
Il ne garde que la dernière valeur ?

L'initialisation ($counter=0) ne doit être faite qu'une fois, avant toute boucle...

Smiley smile

(Je reste persuadée que c'est tordu : c'est un boulot pour COUNT)
Meilleure solution
Comme dit par Zelena, $counter=0 doit être défini en dehors de la boucle.
<?php
$counter = 0;

while($row = $r->fetch_array()){

  if($row['type']=='test1'){
    $sql2 = "SELECT ... ";

    $r2 = $my->query_array($sql2);

    $today = date('H:i', strtotime($row['heure']));

    while($row2 = $r2->fetch_array()){

      if($row2['libellee'] == 'groupe1' && $today == '09:00')
        $counter++;

      $t .= '<tr><td class="text">'.$txt_annule.'&nbsp; '.$row2['nom'].' '.$row2['prenom'].'</td>'.PHP_EOL;
      $t .= '<td class="text">'.date('H:i',strtotime($row2['heure'])).'</td>'.PHP_EOL;
      $t .= '<td class="text">'.$row2['libellee'].' </td>'.PHP_EOL;
      $t .= '</tr>'.PHP_EOL;
    }

    echo $counter;
  }

  elseif($row['type'] == 'test2'){
    $t .= '<tr><td class="text">'.$txt_annule.'&nbsp;&nbsp '.$row2['nom'].' '.$row2['prenom'].'</td>'.PHP_EOL;
    $t .= '<td class="text">'.date('H:i',strtotime($row2['heure'])).'</td>'.PHP_EOL;
    $t .= '<td class="text">'.$row2['libellee'].' </td>'.PHP_EOL;
    $t .= '</tr>'.PHP_EOL;
  }
}

?>


Une autre solution, probablement plus adaptée, serait de compter directement dans la requête SQL.
Ca ressemble à peu près à ça :
<?php
$query   = "
SELECT
  COUNT(*) AS 'compteur'
FROM
  `matable`
WHERE
  `libellee` = 'groupe1' AND
  `heure` = '9h'";

$result  = $my->query($query);
$row     = $my->fetch_object($result);
$counter = $row->compteur;
?>


Je ne sais pas sous quel format est stockée l'heure dans le champ 'heure'. Visiblement ce n'est pas un timestamp puisque tu utilises la fonction strtotime().


En revanche dans ton code, tu utilises $my->query_array(). Quelle est cette fonction ? As-tu créé une fonction query perso ? Car query_array n'existe pas en php.
Merci pour vos réponses! Rapide,efficace, pour des débutants comme moi c est super agréable d'avoir ce forum.
Le compteur fonctionne bien. Pour le moment je garde ce code.
Merci pour la solution SQL également.