PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 11-05-2010 15:55:07

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

[Résolu] Afficher un COUNT suivant des listbox avec des dates

Hello à tous,

je me suis mis à vouloir afficher des stats, et donc, j'ai lu et essayer d'utiliser COUNT, mais je bloque sur la façon de faire pour afficher les resultats en triant les données par des listbox contenant l'année, le mois, le jour, et l'heure....

<form method="post" action="stats.php">

<table width="600" border="0" align="center" cellpadding="0" cellspacing="0" id="tableprincipale">
  <tr>
    <td width="300" class="td4">Opérateur : </td>
    <td class="td5">
  <label>
        <select name="operateur" id="operateur">
        <option value="operateur01">operateur 01</option>
        <option value="operateur02">operateur 02</option>
        <option value="operateur03">operateur 03</option>
        <option value="operateur04">operateur 04</option>
        </select>
    </label>  </td>
  </tr>
  <tr>
    <td colspan="4" class="td4"><input type="submit" name="Submit" value="Envoyer" /></td>
    </tr>
</table>
</form>
<br />


    <?php
// connexion a la base
require_once("connexion.php");
$BD_link = mysql_connect("${'BD_host'}${'BD_port'}", $BD_login, $BD_pass) or die("Connexion de la base impossible : ". mysql_error());


$operateur = $_POST["operateur"];
echo $operateur ;
//comptage des entrées


    $req = mysql_query("SELECT COUNT(*) as Count FROM `prospect` WHERE valid ='1' AND operateur = '$operateur' " );
      if ($req)
      {
         $res = mysql_fetch_array($req);
      echo '<center>Il y a '.$res["Count"].' annonce(s) en attente de validation</center>';
      }

?>

Ma methode est loin d'être parfaite (un self aurait été bienvenue mais bon, ça me va), mais ça compte le nombre validé par l'opérateur que je selectionne. Il me reste pouvoir afficher le resultats en rajoutant par le annee/mois/jour. Mais dans ma table, j'enregistre la date au format date 2010-05-07.

Merci d'avance wink

Hors ligne

#2 11-05-2010 16:35:58

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

salut,


$req = mysql_query("SELECT COUNT(*) as Count FROM `prospect` WHERE valid ='1' AND operateur = '".$operateur."' ");
// et
echo '<center>Il y a '.$res['Count'].' annonce(s) en attente de validation</center>';
 

Mais si tu veux de vraies stats, je te conseille des sites comme Piwik... ou Google Analytics wink

P.S : pourquoi tu mets pas ton $BD_link dans ton fichier connexion.php ??


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#3 11-05-2010 16:54:09

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Hello Alnoss,
non, non, je ne veux pas de vrai stats, c'est réservé à une utilisation interne afin d'affiner l'ergonomie.
Pour le BDLINK, j'avoue ne pas y avoir pensé un seul instant... sad

Hors ligne

#4 11-05-2010 21:44:49

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Bonsoir,

AWstats est ton ami. Par contre faut que ca soit ton hébergeur qui te le mette en place sur ton serveur.

D'autre part si dans ton champ datetime tu enregistres strictement au format yyyy-mm-dd tu peux oublier l'heure dans tes critères de requêtes^^.

Dernière modification par Jc (11-05-2010 21:54:02)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#5 12-05-2010 09:26:14

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Hello JC,

AWstats , je vais chercher des infos dessus, car je ne connais pas du tout.

Alors pour la date, est ce que j'ai fait une erreur, j'ai prévu 2 champ :

$date = date("d-m-Y");
$heure = date("H:i");

Est qu'il faut mieux que j'utilise dans SQL un champ DATETIME OU DATE suffit ? Je ne vois pas bien la différence entre les 2.

Hors ligne

#6 12-05-2010 09:40:23

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Jc a écrit :

AWstats est ton ami. Par contre faut que ca soit ton hébergeur qui te le mette en place sur ton serveur

Certes léger, mais comporte le GROS inconvénient de requérir une intervention de l'hébergeur.

Et pour l'heure, tu pourrais stocker directement : $dateetheure = date("d-m-Y H:i");
Et dans ton Mysql, il faut simplement que tu agrandisses la taille de ton champ


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#7 12-05-2010 09:41:33

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

>> DATETIME OU DATE suffit ? Je ne vois pas bien la différence entre les 2.

c'est bizarre, moi je la vois la différence !!!! big_smile

a++

Hors ligne

#8 12-05-2010 09:46:57

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Bonjour,

Le mieux à faire et dans tous les cas de figure c'est ceci :
- Mettre un TIMESTAMP avec en valeur par défaut CURRENT_TIMESTAMP pour stocker la date et l'heure à la seconde prêt de la création de l'enregistrement
- Mettre un DATETIME pour chaque champ date de la table concernée en enregistrant la date et l'heure dedans par ex sur un insert

insert mytable(id,mydate) values ('$id',now())

A partir du timestamp ou du datetime on peut extraire ce qui nous interesse via les fonctions DAY(), DAYOFWEEK(), MONTH(), YEAR(), HOUR() etc...
On peut aussi faire un classement sur le champ date en ASC et DSC même sur les enregistrements du même jour (elles seront classées par ordre de précédence en fonction de l'heure voire de la seconde sur la même journée).

On récupére dans les requêtes les informations dont on a besoin sur le champ datetime en fonction de ce qu'on a besoin d'afficher, soit avec les fonctions citées précédemment, soit avec la fonction DATE_FORMAT().

N'oubliez pas, qui peut le plus, peut le moins et ça prends pas plus de ressources.

Voila

Dernière modification par Jc (12-05-2010 09:48:51)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#9 12-05-2010 09:52:56

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

A Alnoss: Moi je propose AWstats sur mes packs d'hebergements en install automatique. Avoir des stats performantes et exhaustives sur son(ses) site(s) selon ses besoins et le cahier des charges imposé par ses clients, peut être un critère pour choisir son hébergeur.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#10 12-05-2010 10:50:22

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Petite parenthèse sur les hébergements :
@ Jc : certes, mais c'est parce que tu proposes toi même un hébergement... L'utilisateur lambda qui sera sur ce forum aura surement un hébergement 1&1, OVH, et j'en passe. Perso, je suis en 1&1 (Mutualisé) pour le perso/pro et Oxyd (Dédié) pour mon boulot.
Les 2 proposes déjà des stats suffisantes mais limitées (1&1 : soft 1&1 - Oxyd : AWStat)

@ Tous : J'ai longtemps testé plusieurs scripts et modules, sans jamais trouvé un vrai outils... (sauf Piwik, sur les dernières versions).
Cependant, je viens de mettre en place le "petit" script de Google Analytics, et j'en suis plus que satisfait...
Il permet justement une aide au dev si on sait un minimum lire les données...Par ailleurs, il ne requiert ni bdd, ni code à rallonge...
Ce n'est pas dans mes habitudes, mais il faut reconnaitre que Google frappe un grand coup avec ce "soft"
(d'autant plus pertinent que le moteur de recherche est issu des mêmes infos)
[si vous voulez un démo in vivo, demandez moi ! je vous créer un accès - (requiert un compte google/gmail)]

Pardonnez moi cet aparté et revenons en à nos moutons

A partir du timestamp ou du datetime on peut extraire ce qui nous interesse via les fonctions DAY(), DAYOFWEEK(), MONTH(), YEAR(), HOUR() etc...

Solution universelle - complète - fiable ! Je plussoie big_smile


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#11 12-05-2010 10:51:54

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Pierrot > effectivement, c'est quand même clair, c'est moi qui le suis de moins en moins hmm

Donc j'ai effectivement changer mon champ DATE  en DATETIME. Je garde mon champ heure tel qui est même si je n'en vois plus réellement l'utilité.
Comme je ne fais pas vraiment un INSERT mais un UPDATE :

UPDATE prospect SET
           date= current_timestamp(),

Et ça fonctionne, reste à voir les fonctions que tu me cites JC (DAY(), DAYOFWEEK(), MONTH(), YEAR(), HOUR() etc.) que je connais pas car jamais exploité tongue

Dans tout les cas, merci de vos contributions, j'avance bien.

Hors ligne

#12 13-05-2010 12:41:39

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Bonjour

à theavengers : now() est une fonction intégrée à mySQL qui fonctionne donc même dans une requête update. La bonne syntaxe dans ton cas est :

UPDATE prospect SET date=now();

car current_timestamp est un attribut de colonne et vaut mieux l'utiliser comme tel car dans ton cas si ton champ date est défini en DATETIME, ta requête SET date=current_timestamp générera une belle erreur.

voila


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#13 14-05-2010 10:03:07

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Merci, je vais modifier cela au plus vite. Mon update fonctionne, mais ça doit être une tolérance du serveur... jusqu'au jour ou ...

Hors ligne

#14 14-05-2010 13:49:19

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Bonjour,

J'ai vérifié tout de même dans la doc mySQL car ca me paraissait bizare et visiblement mySQL considère aussi ton current_timestamp comme un synonyme de now().^^
Je tenais à te le dire.

a+


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#15 14-05-2010 14:11:02

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Jc, merci pour ce complément d'information. Bon, je pleure un peu pour afficher les stats par listbox. je vais poster mon code au cas ou. tongue

Hors ligne

#16 14-05-2010 14:52:29

theavengers
Membre
Inscription : 13-10-2009
Messages : 81

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Bon, je bloque toujours, ça doit être de la façon dont je crée ma variable $madate ...

<form method="post" action="stats.php">

<table width="600" border="0" align="center" cellpadding="0" cellspacing="0" id="tableprincipale">
  <tr>
    <td width="100" class="td4">Opérateur : </td>
    <td width="100" class="td5">
  <label>
        <select name="operateur" id="operateur">
        <option value="">Choix</option>  
        <option value="operateur01">operateur 01</option>
        <option value="operateur02">operateur 02</option>
        <option value="operateur03">operateur 03</option>
        <option value="operateur04">operateur 04</option>
        </select>
    </label>  </td>
    <td class="td5">Année</td>
    <td class="td5"><select name="annee" id="annee">
    <option value="2009">2009</option>
      <option value="2010">2010</option>
      <option value="20111">2011</option>
    </select></td>
    <td class="td5">Mois</td>
    <td class="td5"><select name="mois" id="mois">
    <option value="01">01</option>
    <option value="02">02</option>
    <option value="03">03</option>
    <option value="04">04</option>
    <option value="05">05</option>
    <option value="06">06</option>
    </select></td>
    <td class="td5">Jour</td>
    <td class="td5"><select name="jour" id="jour">
      <option value="01">01</option>
      <option value="02">02</option>
      <option value="03">03</option>
      <option value="04">04</option>
      <option value="05">05</option>
      <option value="06">06</option>
    <option value="06">06</option>
    <option value="07">07</option>
    <option value="08">08</option>
    <option value="09">09</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>                               
    </select></td>
  </tr>
  <tr>
    <td colspan="10" class="td4"><input type="submit" name="Submit" value="Envoyer" /></td>
    </tr>
</table>
</form>
<br />


    <?php
// connexion a la base
require_once("connexion.php");
$BD_link = mysql_connect("${'BD_host'}${'BD_port'}", $BD_login, $BD_pass) or die("Connexion de la base impossible : ". mysql_error());

$operateur = $_POST["operateur"];
$annee = $_POST["annee"];
$mois = $_POST["mois"];
$jour = $_POST["jour"];
$madate = $jour." ".$mois." ".$annee;


//comptage des entrées
//$jour." ".$mois." ".$annee;

    $req = mysql_query("SELECT COUNT(*) as Count FROM `prospect` WHERE valid ='1' AND operateur = '$operateur' AND date = '$madate'  " );
      if ($req)
      {
         $res = mysql_fetch_array($req);
    echo '<center>L\' ',$operateur,' à traité</center>';     

    echo '<center>Il y a '.$res["Count"].' annonce(s)</center>';
      }

?>

Hors ligne

#17 14-05-2010 22:58:11

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu] Afficher un COUNT suivant des listbox avec des dates

Bonjour,

Oui, soit tu mets $madate au même format que le format de stockage, soit du fait


$req = mysql_query("SELECT COUNT(*) as Count FROM `prospect` WHERE valid ='1' AND operateur = '$operateur' AND YEAR(date) = '$annee' AND MONTH(date)='$mois' AND DAY(date)='$jour'  " );
 

POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums