PHP|Débutant :: Forums

Advertisement

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

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

#1 15-02-2013 09:52:49

spifspaf
Membre
Inscription : 15-02-2013
Messages : 4

Compter les enregistrements

Bonjours à tous
après avoir cherché un bon moment et étant débutant en php
je cherche à savoir comment je peux compter des enregistrements dans une base sql
sachant que je récupère les ip des visiteurs du site et les pages visitées

ce que je recherche à faire :
c'est comptabiliser le nombre total de pages visitées par adresse ip en évitant les doublons d'ip
genre :

ip 0.0.0.1 visite la page a
ip 0.0.0.1 visite la page b
ip 0.0.0.10 visite la page a
ip 0.0.0.10 visite la page b
ip 0.0.0.11 visite la page a

j'arrive a éviter les doublons d'ip avec un SELECT DISTINCT mais je ne trouve pas comment comptabiliser le total des pages visitées par ip
genre à l'affichage :
ip 0.0.0.1 à visité 2 pages
ip 0.0.0.10 à visité 2 pages
ip 0.0.0.11 à visité 1 page

voici un bout mon code pour la requête et l'affichage :

<?php
 include'menu_filtre_stats_site.php';
?>

<br><br>Les stats: Filtre par ip


<?php
// on se connecte à notre base
$base = mysql_connect ('****', '****', '****');
mysql_select_db ('****', $base);

// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql = 'SELECT count(*) FROM traceur_site ';

// on exécute cette requête
$resultat = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());

// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);

// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0) {
echo 'Aucune réponse trouvée';
}
else {

    echo '<table bgcolor="#FFFFFF">'."\n";
        // première ligne on affiche
        echo '<tr>';
        echo '<td bgcolor="#669999"><b><u>&nbsp;&nbsp;Ip du visiteur&nbsp;&nbsp;</u></b></td>';
        echo '<td bgcolor="#669999"><b><u>&nbsp;&nbsp;Page Visitée ou nombre(s) de connexion(s)&nbsp;&nbsp;</u></b></td>';
        echo '</tr>'."\n";


// sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
 if (!isset($_GET['debut'])) $_GET['debut'] = 0;

   $nb_affichage_par_page = 10;

// Préparation de la requête avec le LIMIT
 $sql = 'SELECT DISTINCT ip_site FROM traceur_site ORDER BY ip_site DESC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;


// on exécute la requête
 $req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());


// on va scanner tous les tuples un par un
 while ($data = mysql_fetch_array($req)) {
// on affiches les résultats dans la <table>

        echo '<tr>';
        echo '<td bgcolor="#CCCCCC">&nbsp;&nbsp;', htmlentities(trim($data['ip_site'])) , '&nbsp;&nbsp;</td>';
       /// echo '<td bgcolor="#CCCCCC">&nbsp;&nbsp;', htmlentities(trim($data['ip_site'])) , '&nbsp;&nbsp;</td>';
        echo '</tr>'."\n";

}

// on libère l'espace mémoire alloué pour cette requête
 mysql_free_result ($req);
   echo '</table>
';

   // on affiche enfin notre barre
   echo '<span class="gras"> page :'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 5).'</span>';
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($resultat);
// on ferme la connexion à la base de données.
mysql_close ();

?>

Hors ligne

#2 15-02-2013 10:45:36

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Compter les enregistrements

Saluton,
C'est qu'il te faut regarder vers les fonctions SQL de groupage, genre COUNT() a utiliser avec une clause GROUP BY


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 15-02-2013 18:03:50

spifspaf
Membre
Inscription : 15-02-2013
Messages : 4

Re : Compter les enregistrements

Chalut smile

Merci pour ta réponse j'ai fait ma recherche et en effet ça colle pas mal .. du moins ça marche avec cette requête :

$sql = 'SELECT ip_site,COUNT( page_site ) as page_site FROM traceur_site GROUP BY ip_site ';

ip_site = le stockage des ip
page_site = les pages visitées

mici smile

( j'avoue que je comprends pas le as .... )

Hors ligne

#4 15-02-2013 18:29:40

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Compter les enregistrements

Le AS est facultatif, il permet de définir des alias pour des colonnes calculées ou pour renommer des tables au nom un peu trop chiant à retranscrire dans les requêtes multitables en jointure, genre :
FROM le_nom_de_la_table_qui_va_bien_mais_qui_est_un_peu_long AS t1


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 16-02-2013 18:06:13

spifspaf
Membre
Inscription : 15-02-2013
Messages : 4

Re : Compter les enregistrements

oky merci pour l'info smile

par contre je suis confronté à un autre problème qui est le suivant

sur le site je propose un visualisation de fichiers pdf dans une ligthbox par contre je passe par une page ( indépendante ) pour éviter d'avoir l'url du répertoire par la visiteur

et je désire tracer les affichages des pdf des utilisateurs

le problème c'est que ma requête s’exécute deux fois ( elle enregistre deux passage )

un bout du code de ma page d'affichage :

<?php
include 'config/config.php';
/// recuperation des variables
$aff = $_GET['affiche'];
$ip_ok = $_GET['add_ip'];
$date = $_GET['date'];
$page_visite = $_GET['page'];
$heure = $_GET['heure'];


if($aff == topaze){

// Vous voulez afficher un pdf
header ( 'Content-type: application/pdf' );

// Il sera nommé downloaded.pdf
//header ( 'Content-Disposition: attachment; filename="downloaded.pdf"' );

// Le source du PDF original.pdf
readfile ( 'doc_com_technal/doc_topaze.pdf' );

        $sql = "insert into traceur_site(id_site, date, ip_site,page_site,heure) VALUES('','$date','$ip_ok','$page_visite','$heure')";
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
        mysql_close ();


}

elseif($aff == soleal_gy){


// Vous voulez afficher un pdf
header ( 'Content-type: application/pdf' );

// Il sera nommé downloaded.pdf
//header ( 'Content-Disposition: attachment; filename="downloaded.pdf"' );

// Le source du PDF original.pdf
readfile ( 'doc_com_technal/doc_gy_soleal.pdf' );
}
else
{
echo 'erreur le fichier inexistant ';
}


?>

Hors ligne

#6 16-02-2013 19:50:42

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Compter les enregistrements

Si cette requête s'exécute deux fois c'est que le code qui la lance est appelé deux fois.
Faute d'avoir une vision d'ensemble de la cinétique de ton code, difficile de faire un diagnostic plus précis.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#7 16-02-2013 20:29:08

spifspaf
Membre
Inscription : 15-02-2013
Messages : 4

Re : Compter les enregistrements

ben pour résumer ( si ça peut être plus clair ) ma page ou il y a le lien : sachant que j'utilise prettyphoto comme lightbox
coulissants.php

    <script src="js/jquery.min.js" type="text/javascript"></script>
    <!--script src="js/jquery.lint.js" type="text/javascript" charset="utf-8"></script-->
    <link rel="stylesheet" href="css/prettyPhoto.css" type="text/css" media="screen" title="prettyPhoto main stylesheet" charset="utf-8" />
    <script src="js/jquery.prettyPhoto.js" type="text/javascript" charset="utf-8"></script>

 <script type="text/javascript" charset="utf-8">
$(document).ready(function(){
  $("a[rel^='prettyPhoto']").prettyPhoto({animation_speed:'normal',slideshow:3000, autoplay_slideshow: false, social_tools:false,deeplinking: false});
});
</script>
<?php
include 'config/config.php';
$page_visite='Page gamme coulissants';
 //date
$date = date("Y-m-d" );
$heure = Date("H:i:s");

//-- Fonction de récupération de l'adresse IP du visiteur
function get_ip()
{
    if ( isset ( $_SERVER['HTTP_X_FORWARDED_FOR'] ) )
    {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    elseif ( isset ( $_SERVER['HTTP_CLIENT_IP'] ) )
    {
        $ip  = $_SERVER['HTTP_CLIENT_IP'];
    }
    else
    {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}
///echo 'Votre adresse IP est : ' . get_ip ();
$ip_ok=''. get_ip ();
/////// enregistrement de l'ip

        $sql = "insert into traceur_site(id_site, date, ip_site,page_site,heure) VALUES('','$date','$ip_ok','$page_visite','$heure')";
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
        mysql_close ();
?>
<?php
   echo'
    <td class="below_header"><div align="center"><font face="Times New Roman" size="6" color="#FF0000">Les Coulissants </font></div></td>
    <td class="shadow_right">&nbsp;</td>
  </tr>
  <tr>
    <td class="shadow_left">&nbsp;</td>
    <td class="main_content_box"><table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td class="left_content"></td>
        <td class="body_content_gamme"><div align="left"><a href="affiche_pdf.php?affiche=topaze&page=affichage_pdf_topaze_gbi&add_ip='
.$ip_ok.'&date='.$date.'&heure='.$heure.'?iframe=true&amp;width=80%&amp;height=99%" rel="prettyPhoto" class="lien2" >Les Coulissants Topaze </a> <font face="Times New Roman" size="3" color="#FFFFFF">( format Pdf )</font> <br/><br/>
                                               <a href="affiche_pdf.php?affiche=soleal_gy&page=affichage_pdf_soleal_gy&add_ip='
.$ip_ok.'&date='.$date.'&heure='.$heure.'?iframe=true&amp;width=80%&amp;height=99%" rel="prettyPhoto" class="lien2" >Les Coulissants Soleal </a> <font face="Times New Roman" size="3" color="#FFFFFF">( format Pdf )</font><br/><br/>
                           <a href="affiche_pdf.php?affiche=lumeal_ga&page=affichage_pdf_lumeal_ga&add_ip='
.$ip_ok.'&date='.$date.'&heure='.$heure.'?iframe=true&amp;width=80%&amp;height=99%" rel="prettyPhoto" class="lien2" >Les Coulissants Luméal </a><font face="Times New Roman" size="3" color="#FFFFFF">( format Pdf )</font>
        </td>'
;
        ?>

et ma page affiche.php  ( du moins une partie )

    <?php
    include 'config/config.php';
    /// recuperation des variables
    $aff = $_GET['affiche'];
    $ip_ok = $_GET['add_ip'];
    $date = $_GET['date'];
    $page_visite = $_GET['page'];
    $heure = $_GET['heure'];
     
     
    if($aff == topaze){
     
    // Vous voulez afficher un pdf
    header ( 'Content-type: application/pdf' );
     
    // Il sera nommé downloaded.pdf
    //header ( 'Content-Disposition: attachment; filename="downloaded.pdf"' );
     
    // Le source du PDF original.pdf
    readfile ( 'doc_com_technal/doc_topaze.pdf' );
     
    $sql = "insert into traceur_site(id_site, date, ip_site,page_site,heure) VALUES('','$date','$ip_ok','$page_visite','$heure')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    mysql_close ();
     
     
    }
     
    elseif($aff == soleal_gy){
     
     
    // Vous voulez afficher un pdf
    header ( 'Content-type: application/pdf' );
     
    // Il sera nommé downloaded.pdf
    //header ( 'Content-Disposition: attachment; filename="downloaded.pdf"' );
     
    // Le source du PDF original.pdf
    readfile ( 'doc_com_technal/doc_gy_soleal.pdf' );
    }
    else
    {
    echo 'erreur le fichier inexistant ';
    }
     
     
    ?>

Hors ligne

Pied de page des forums