[php] Ne lit que la premiere entree

Résolu/Fermé
lonewolf - 5 oct. 2011 à 15:57
 lonewolf - 6 oct. 2011 à 13:24
Bonjour a tous,

j'ai un serveur web et je voudrais pouvoir savoir precisement quelle personne a vu quelle page.

J'ai donc fait un script php en choisissant la date courante.

Celui ci fonctionne qu'a moitie car il me donne que la premiere page visitée de la journée.

Je ne comprend pas mon erreur.

Alors si vous pouvez m'aider, je vous en serais très reconnaissant.

Merci d'avance.
<CODE><html lang="fr"><head><meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"></head>
<body>
<basefont face="Tahoma" size="2">
<br>
<center><h2><span style="color: rgb(92, 168, 10);"><i>Les visiteurs</i></span></h2></center>
<center><table width="300" border="1" cellspacing="0" cellpadding="0">

<tr>
<td width="5"><font face="tahoma" size="2"><span style="color: rgb(92, 168, 10);"><div align="center">Nom</div><span></font></td>

<td width="5"><font face="tahoma" size="2"><span style="color: rgb(92, 168, 10);"><div align="center">Date</div><span></font></td>

<td width="5"><font face="tahoma" size="2"><span style="color: rgb(92, 168, 10);"><div align="center">Pages</div><span></font></td>

</tr>
<?php

//Connection Mysql
mysql_connect("*****","*****","******")or die("Problème avec la base de données");
mysql_select_db("*********")or die ("pas de connection");


$reponse = mysql_query("SELECT DISTINCT jom15_users.name, jom15_jstats_visits.visit_date, jom15_jstats_pages.page_title
FROM jom15_users
INNER JOIN jom15_jstats_visits ON jom15_jstats_visits.joomla_userid = jom15_users.id
INNER JOIN jom15_jstats_impressions ON jom15_jstats_impressions.visit_id = jom15_jstats_visits.visit_id
INNER JOIN jom15_jstats_pages ON jom15_jstats_pages.page_id = jom15_jstats_impressions.page_id
WHERE jom15_jstats_visits.visit_date = CURDATE() GROUP BY jom15_users.name") or die ("Désolé, il y a eu un problème dans la transmission des données"); // Requête SQL



// On fait une boucle pour lister tout ce que contient la table :
//***********************************************************************************************************************
if ($reponse)
{
//*************************************************************************************************************************
while ($donnees = mysql_fetch_array($reponse))

{

?>

<tr>

<td><center><font face="tahoma" size="2"><?php echo $donnees['0']; ?></font></center></td>
<td><center><font face="tahoma" size="2"><?php echo $donnees['1']; ?></font></center></td>
<td><center><font face="tahoma" size="2"><?php echo $donnees['2']; ?></font></center></td>

</tr>

<?php

}



//mysql_close(); // Déconnexion de MySQL
//****************************************************************************************************
}
else
{
echo 'Pas de champs!!!';
}
//****************************************************************************************************
?>
</table></center>
<br><br>
</body></html><CODE>

10 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
6 oct. 2011 à 11:11
Bonjour,

Rien d'étonnant à cela.
Dans ta requête d'insertion, tu utilises la date sans l'heure.
En effet, CURDATE() donnera juste la date.
Comme dans ton select, tu fais un DISTINCT, toutes les lignes qui ont la même date seront réduites à une seule.
Utilise plutôt NOW(), qui donne Date + Heure.
http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-functions.html

Xavier
1
Un petit up
Merci pour votre aide
Amicalement
0
Bonjour

Comme il n'y a rien d'anormal qui me saute aux yeux et que personne ne te répond, une question bête : as-tu essayé ta requête "à la main", par exemple dans phpmyadmin ?
As-tu bien plusieurs visiteurs différents ? Sinon, c'est normal que tu n'aies qu'une seule réponse avec WHERE jom15_jstats_visits.visit_date = CURDATE() GROUP BY jom15_users.name : tu sélectionnes une seule date et tu regroupes toutes les visites de chaque utilisateur
0
Tout d'abord merci de l'interet que tu portes a ma question.

Oui j'ai fait la requete a la main dans phpmyadmin et j'ai le meme resultat.

Je n'ai que la première entrée comme si la requete s'arretait dès quelle a trouvé quelques choses sans aller plus loin.

Amicalement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,
je comprend bien ta réponse et elle est bien frappé du bon sens, néanmoins elle ne change rien.

En effet, j'ai essayé avec NOW(), meme avec la date en dure, et meme en enlevant le DISTINCT mais ca ne change rien au resultat.

Merci encore pour ton aide

Amicalement
0
Utiliser NOW() n'a aucune raison de t'apporter quelque chose si ton champ visit_date ne contient, comme son nom semble l'indiquer, que la date.

Tu n'as pas répondu à ma question : as-tu bien plusieurs visiteurs le même jour ?

Avec ton GROUP BY jom15_users.name tu ne visualises qu'une seule ligne par visiteur, même s'il a vu plusieurs pages. Tu n'auras qu'une page pour chaque personne, et non pas chaque page vue par chaque personne
0
excuse moi, je n'avais pas vu ta question.

Oui j'ai plusieurs visiteurs le meme jour

Amicalement
0
Effectivement, lorsque j'enleve le GROUP BY, j'ai plus de reponse.

Néanmoins comment faire pour avoir un classement alphabétique si j'enleve le GROUP BY ?

Amicalement
0
comment faire pour avoir un classement alphabétique si j'enleve le GROUP BY ?
Je ne vois pas le rapport entre le GROUP BY et le classement alphabétique.
J'ai l'impression que ce que tu cherches c'est
$reponse = mysql_query("SELECT jom15_users.name, jom15_jstats_visits.visit_date, jom15_jstats_pages.page_title
FROM jom15_users
INNER JOIN jom15_jstats_visits ON jom15_jstats_visits.joomla_userid = jom15_users.id
INNER JOIN jom15_jstats_impressions ON jom15_jstats_impressions.visit_id = jom15_jstats_visits.visit_id
INNER JOIN jom15_jstats_pages ON jom15_jstats_pages.page_id = jom15_jstats_impressions.page_id
WHERE jom15_jstats_visits.visit_date = CURDATE() GROUP BY jom15_users.name,jom15_jstats_pages.page_title ORDER BY jom15_users.name,jom15_jstats_pages.page_title") or die ("Désolé, il y a eu un problème dans la transmission des données"); 
0
Merci c'est bien cela que je cherchais

Post resolu

Merci beaucoup pour votre aide précieuse

Amicalement
0