Contatore visite per ogni pagina con MYSQL - PHP

ciao
no non devi fare se hai 300 pagine 300 contatori.
ma ti conviene fare un file chiamato es. contegggio.php con tutta la parte del conteggio (la prima) esclusa la variabile
PHP:
$pagina_num = 1;
poi nella pagina prima.php scrivi
PHP:
<?php
//.....
$pagina_num = 1;
include_once "contegggio.php";
//.....
?>
nella seconda.php
PHP:
<?php
//.....
$pagina_num = 2;
include_once "contegggio.php";
//.....
?>
e così via
comunque dallo script togli
mysql_close()
ci pensa php a chiudere quando serve
poi per vedere meglio il nome della pagina senza tutto l'ambaradan del percorso metti
PHP:
<?php
//....
$pagina = basename($_SERVER['PHP_SELF']);//il nome diventa mysql1.php
//....
?>
altra correzione (mi ero confuso, l'arteriosclerosi) per leggere l'ip correggi in
PHP:
$ip = $_SERVER['REMOTE_ADDR'];

poi il contatore funziona cosi es.
l'ip 11.11.11
visita la pag 1 -> il contatore per ip=11.11.11 e per la pag 1 aumenta di uno
passa alla pag 2 -> il contatore per ip=11.11.11 e per la pag 2 aumenta di uno
torna alla pag 1 -> sono passate 24 ore? no: il contatore per ip=11.11.11 e per la pag 1 non viene aggiornato, si: il contatore si aggiorna
l'ip 22.22.22
visita la pag 1 -> il contatore per ip=22.22.22 e per la pag 1 aumenta di uno
passtae 24 ore l'ip 11.11.11 rivisita la uno il contatore si aggiorna
nella tabella toverai (non scrivo il tempo)
1 mysql1.php 1 11.11.11 2
2 mysql2.php 2 11.11.11 1
3 mysql1.php 1 22.22.22 1
quindi con la parte di visualizzazione vedrai
mysql1.php 3
mysql2.php 1

p.s. se secondo te 24 ore sono troppe modofica l'if dell'intevallo di tempo es > 12
 
ho sostituito la variabile di prima con questa: $ip = $_SERVER['REMOTE_ADDR'];
Ma nn legge nessun ip, nn mi memorizza nessun campo, ho provato in un altro pc ma è la stessa cosa, come è possibile ke non trova nessun IP quando mi connetto? Lo sto provando cmq online tramite altervista.

ps.: se faccio echo $ip; mi stampa l'ip.. O.o
 
Ultima modifica:
Sono un cazzone xD, avevo cambiato il nome della tabella e poi sn andato a farmi la doccia, me l'ero tolto di testa, infatti ho rincontrollato xke doveva essere perforza uno sbaglio mio, xke prima funzionava, cmq ok tt apposto, vediamo come va
 
ok ci siamo ecco il risultato
id pagina pagina_num ip visite tempo
Modifica Elimina 1 mysql1.php 1 151.**.**.222 1 1368280362
Modifica Elimina 2 mysql2.php 2 151.**.**.222 1 1368283044
Modifica Elimina 3 mysql3.php 3 151.**.**.222 1 1368283045
Modifica Elimina 4 mysql2.php 2 173.252.***.118 1 1368284002
Modifica Elimina 5 mysql2.php 2 80.***.161.110 1 1368284067
Modifica Elimina 6 mysql3.php 3 173.252.***.115 1 1368284069
Modifica Elimina 7 mysql3.php 3 80.***.161.110 1 1368284069

PHP:
//dati di connessione
$query = mysql_query("SELECT pagina, SUM(visite) AS tot FROM contatoregiochi GROUP BY pagina");//o pagina_num se non usi il nome di pagina
echo "<table border=&quot;1&quot;><tr><td>Pagina</td><td>Visite</td></tr>";
while($riga=mysql_fetch_array($query)){
    $pagina = $riga['pagina'];
    $visite = $riga['tot'];
    echo "<tr><td>$pagina</td><td>$visite</td></tr>";
    echo "</table>";
}

Qui nel codice di stampa mi stampa l'array a lista, cioè mi stampa tt le pagine e tt le visite, se voglio selezionare solo il campo delle visite di mysql2.php e stamparlo cosa dovrei utilizzare? WHERE id o qualcosa del genere? Tipo così:
PHP:
$query = mysql_query("SELECT pagina, SUM(visite) AS tot FROM contatoregiochi WHERE pagina_num = $pagina_num GROUP BY pagina");//o pagina_num se non usi il nome di pagina
 
Ultima modifica:
ciao
ti conviene farti un piccolo form in cui elenchi le pagine che sono regitrate e selezioni o tutte o la pag che vuoi vedere
prova così e dimmi se funzia
PHP:
<?php
//soliti dati di connessione
if(isset($_POST['vedi'])){
	$wh="";
	if($_POST['pagina'] !0""){
		$wh=" WHERE pagina_num=".$_POST['pagina']." ";
	}
	$query = mysql_query("SELECT pagina, SUM(visite) AS tot FROM contatoregiochi $wh GROUP BY pagina");
	echo "<table border=&quot;1&quot;><tr><td>Pagina</td><td>Visite</td></tr>";
	while($riga=mysql_fetch_array($query)){
    	$pagina = $riga['pagina'];
    	$visite = $riga['tot'];
    	echo "<tr><td>$pagina</td><td>$visite</td></tr>";
	}
    echo "</table>";
}
?>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<select name="pagina">
  <option value="">-tutte-</option>
<?php
  $query = mysql_query("SELECT pagina, pagina_num FROM contatoregiochi GROUP BY pagina ORDER BY pagina")
  while($riga=mysql_fetch_array()){
  	echo "<option value=\"".$riga['pagina_num']."\">".$riga['pagina']."</option>";
  }
?> 
</select><br />
<input name="vedi" type="submit" id="vedi" value="vedi">
</form>

controlla i nomi tabella e campi
 
Ultima modifica:
PHP:
<?php
//soliti dati di connessione
if(isset($_POST['vedi'])){
    $wh="";
    if($_POST['pagina'] !0""){ //QUI SEGNA ERRORE, HO SOSTITUITO CON: !=0
        $wh=" WHERE pagina_num=".$_POST['pagina']." ";
    }
    
  $query = mysql_query("SELECT pagina, pagina_num FROM contatoregiochi GROUP BY pagina ORDER BY pagina") //Questa nn l'ho capita, come funziona?
  while($riga=mysql_fetch_array()){ //QUI E' VUOTO, E SEGNA ERRORE il fetch array
      echo "<option value=\"".$riga['pagina_num']."\">".$riga['pagina']."</option>";
  }
?>
 
Ultima modifica:
A me comunque servirebbe realizzare questa classifica:

PHP:
<?php

??????????????????????	
		
$mysql2 = _get_file_contents contatoregiochi?
$mysql1 = _get_file_contents contatoregiochi?
$mysql3 = _get_file_contents contatoregiochi?

$giochi = array(

array('partite' => "$mysql2",
'linkgioco' => 'http://...mysql2.php',
'titlealt' => 'Gioco mysql2'),

array('partite' => "$mysql1",
'linkgioco' => 'http://...mysql1.php',
'titlealt' => 'Gioco mysql1'),

array('partite' => "$mysql3",
'linkgioco' => 'http://...mysql3.php',
'titlealt' => 'Gioco mysql3'
));

$numgiochi = count($giochi);

rsort($giochi)

?>


        <table class="titolo">
          <tr>
            <td>
<b><font color="#08088A">MOST PLAYED GAMES:</font></b>
            </td>
          </tr>
        </table>

        <table class="tabellaclassifica">
		
	  <tr>
	    <td align="left">
	      <b><font color="#08088A">1 &nbsp;</font></b><a href="<?php echo $giochi[0]['linkgioco']; ?>" title="<?php echo $giochi[0]['titlealt']; ?>"><?php echo $giochi[0]['titlealt']; ?></a>
            </td>
            <td>
Played: <?php echo $giochi[0]['partite']; ?>
            </td>
	  </tr>
			 
	  <tr>
	    <td align="left">
              <b><font color="#08088A">2 &nbsp;</font></b><a href="<?php echo $giochi[1]['linkgioco']; ?>" title="<?php echo $giochi[1]['titlealt']; ?>"><?php echo $giochi[1]['titlealt']; ?></a>
	    </td>
            <td>
Played: <?php echo $giochi[1]['partite']; ?>
            </td>
          </tr>
					 
	  <tr>
            <td align="left">
	      <b><font color="#08088A">3 &nbsp;</font></b><a href="<?php echo $giochi[2]['linkgioco']; ?>" title="<?php echo $giochi[2]['titlealt']; ?>"><?php echo $giochi[2]['titlealt']; ?></a>
            </td>
            <td>
Played: <?php echo $giochi[2]['partite']; ?>
            </td>
	  </tr>
					 
	  <tr>
	    <td align="left">
	      <b><font color="#08088A">4 &nbsp;</font></b><a href="<?php echo $giochi[3]['linkgioco']; ?>" title="<?php echo $giochi[3]['titlealt']; ?>"><?php echo $giochi[3]['titlealt']; ?></a>
	    </td>
            <td>
Played: <?php echo $giochi[3]['partite']; ?>
            </td>
	  </tr>


		 					 
        </table>

Capito come? Attualmente ce l'ho coi contatori in php-txt qst classica col curl e file_get_contents
 
Ultima modifica:
ciao
qui hai ragione
if($_POST['pagina'] !0""){ mi era sfuggito lo shift
PHP:
if($_POST['pagina'] !=""){
qui non l'ho capita
while($riga=mysql_fetch_array()){ //QUI E' VUOTO, E SEGNA ERRORE il fetch array
il $query c'era
per il resto do un occhio poi spero di saperti dire
 
ciao
questa non l'ho capita
PHP:
$query = mysql_query("SELECT pagina, pagina_num FROM contatoregiochi GROUP BY pagina ORDER BY pagina") //Questa nn l'ho capita, come funziona?
estrae il nome della pagina e il numero riempiendo dinamicamente la <select> con i valori pagina_num e nome pagina, in questa maniera eviti di scrivere nuneri di pagina che non esisono.
poi per il fatto che ti dia errore alla riga
$riga=mysql_fetch_array($query) metti un var_dump che poi toglierai
PHP:
//.....
$query = mysql_query("SELECT pagina, pagina_num FROM contatoregiochi GROUP BY pagina ORDER BY pagina") //Questa nn l'ho capita, come funziona?
var_dump($query);
//...
se il var_dump ti da BOOL FALSE la query non viene eseguita quindi devi verificare che la stringa "SELECT...." sia scritta con i nomi giusti.
sappimi dire
 
Mancava il punto e virgola alla fineeee..
Ok funziona, mi tornerà molto utile grazie :D

PHP:
<?php

??????????????????????    
        
$mysql2 = _get_file_contents contatoregiochi?
$mysql1 = _get_file_contents contatoregiochi?
$mysql3 = _get_file_contents contatoregiochi?

$giochi = array(

array('partite' => "$mysql2",
'linkgioco' => 'http://...mysql2.php',
'titlealt' => 'Gioco mysql2'),

array('partite' => "$mysql1",
'linkgioco' => 'http://...mysql1.php',
'titlealt' => 'Gioco mysql1'),

array('partite' => "$mysql3",
'linkgioco' => 'http://...mysql3.php',
'titlealt' => 'Gioco mysql3'
));

$numgiochi = count($giochi);

rsort($giochi)

?>

Questo è un'array invece ke uso come classifica solo ke la variabile $mysql2 $mysql1 e $mysql3 dovrebbero prendere il valore delle visite praticamente di ogni pagina, in modo ke poi posso mettere in ordine per pagine più visitate, l'array funziona se stampo in html è ok.. anke le tabelle e tutto, il problema è ke nn so uploadare il contenuto dei contatori mysql nelle variabili, solo il campo del conteggio
 
Ultima modifica:
PHP:
<?php
// connessione al database MySQL
mysql_connect("locast", "alessanura", "") or die("Impossibile accedere a MySQL.");
mysql_select_db("ura") or die("Impossibile selezionare il database.");

if(isset($_POST['vedi'])){
    $wh="";
    if($_POST['pagina'] !=0){
        $wh=" WHERE pagina_num=".$_POST['pagina']." ";
    }
    $query = mysql_query("SELECT pagina, SUM(visite) AS tot FROM contatoregiochi $wh GROUP BY pagina ORDER BY count(visite) DESC LIMIT 0, 10");
    echo "<table border=&quot;1&quot;><tr><td>Pagina</td><td>Visite</td></tr>";
    while($riga=mysql_fetch_array($query)){
        $pagina = $riga['pagina'];
        $visite = $riga['tot'];
        echo "<tr><td>$pagina</td><td>$visite</td></tr>";
    }
    echo "</table>";
}
?>

Qualche anima gentile ke mi dice come stampare i primi 10 record in ordine crescente? E' giusto il codice ma nn riesco a far apparire l'output video
 
Ultima modifica:
PHP:
<?php
include("conf.php");
?>

<?php

mysql_select_db($db, $connetti) or die("Impossibile selezionare il database.");


$ip = $_SERVER['REMOTE_ADDR'];
$pagina = $_SERVER['PHP_SELF']; //potrebbe farti comodo per sapere il nome della pagina es gioco_primo.php
$ora = time(); //leggo il momento della visita quindi

//dati di connessione
$query_1 = mysql_query("SELECT * FROM contatoregiochi WHERE nomegioco = $nomegioco AND ip = '$ip'");
if(mysql_num_rows($query_1)== 0){ //non ci sono record per quell'ip e quella pagina
    
    $query_2 = mysql_query("INSERT INTO contatoregiochi(pagina, nomegioco, ip, visite, tempo)
    VALUES('$pagina', '$nomegioco', '$ip', '1', '$ora')");
    
}else{ //il record esiste

    $riga = mysql_fetch_array($query_1);
    //verifico l'intervallo di tempo tra l'ultima visita e l'attuale
    //e lo trasformo in ore
    $intervallo = ($ora - $riga['tempo'])/3600;
    //verifico che siano passate almeno 24 ore dall'ultima visita (ma a te decidere il tempo)
    if($intervallo > 24){ //sono passate più di 24 ore quindi uppo le visite e il tempo, altrimenti non faccio nulla
        $query_3 = mysql_query("UPDATE contatoregiochi SET visite = visite +1, tempo = $ora WHERE nomegioco = $nomegioco AND ip = '$ip'");
    }
}
?>
Funziona tutto e ho implementato la classifica, c'è solo 1 cosa ke nn va e nn capisco, qst è lo script del contatore, ke lo includo nella pagina di ogni gioco, in ogni pagina scrivo - $nomegioco = "blabla" include scriptcontatore.php - solo ke mi segna più volte le persone cn lo stesso ip.. nn capisco dv sia il problema, con $pagina_num funzionava
 
Ultima modifica:
è completo ma mi segna più volte la stessa visita, l'ip, se vai di continuo aumenta di 1 sempre, non funziona la visita unica per ip ogni 24 ore.. manca solo la variabile $nomegioco = gioco1 ke è inserita in ogni pagina di ogni gioco, e il pezzo di script per stampare il risultato. Ma mi memorizza e conteggia più volte lo stesso ip
 
ciao
hai modificato la tabella "contatoregiochi" aggiungendo il campo nomegioco varchar(25), piu di 25 se il nome del gioco è più lungo di 25 caratteri?
poi ho confrontato gli script e non vedo perche non dovrebbe funzionare, l'unica cosa che vedo è alla $query_1 e $query_3 dove mancano gli apici a
.....WHERE nomegioco = '$nomegioco' AND....
gli apici non si mettono solo se la variabile è un numero intero
aggiungili e sappimi dire
 

Discussioni simili