phpBB Italia chiude!
phpBB Italia ringrazia tutti gli utenti che hanno dato fiducia al nostro progetto per ben 9 anni, e che, grazie al grande lavoro fatto da tutto lo Staff (rigorosamente a titolo gratuito), hanno portato il portale a diventare il principale punto di riferimento italiano alla piattaforma phpBB.

Purtroppo, causa motivi personali, non ho più modo di gestirlo e portarlo avanti. Il forum viene ora posto in uno stato di sola lettura, nonché un archivio storico per permettere a chiunque di fruire di tutte le discussioni trattate.

Il nuovo portale di assistenza per l'Italia di phpBB diventa phpBB-Store.it, cui ringrazio per aver deciso di portare avanti questo grande progetto.

Grazie ancora,
Carlo - Amministratore di phpBB Italia

Impedire il conteggio delle visite da parte dell'admin

Supporto per phpBB 3.1.x.
Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Impedire il conteggio delle visite da parte dell'admin

Messaggio da Micogian » 03/06/2016, 9:15

Io credo di averti spiegato come si dovrebbe fare, non capisco perchè tu insista sull'uso della variabile "$pagina" se abbiamo detto che la soluzione migliore è usare il campo "id".
Ribadisco l'inutilità della query INSERT.
Tu hai una tabella che contiene dei records che sono:
id, pagina, visite_users, visite_ospiti
A questa tabella non hai bisogno di aggiungere records, devi semplicemente modificare un campo con la query UPDATE ed estrarre i dati con la query SELECT.
In entrambe le query il valore di riferimento del record da modificare o da selezionare è "id", non "pagina"
Se la pagina viene richiamata da un utente o un visitatore avviene la modifica del relativo campo "visite_users" o "visite_ospiti" del record che ha quello specifico ID.
Se la pagina la visiti tu non avviene nessuna modifica nella tabella ma i dati vengono prelevati con la query SELECT per mostrare il numero delle visite.
Più chiaro di così non saprei come spiegarlo.

Avatar utente
frank
Utente
Utente
Messaggi: 1908
Iscritto il: 25/11/2014, 8:02
Sesso: Maschio
Versione: 3.1.7-PL1
Server: UNIX/Linux
PHP: 5.5.29
Database: MySQL(i) 5.5.43-log

Re: Impedire il conteggio delle visite da parte dell'admin

Messaggio da frank » 03/06/2016, 9:51

Per me va bene anche mettere l'id, ora almeno funziona. Se tolgo INSERT non mette i dati nel db LA PRIMA VOLTA. Allora mettiamo l'id e tolgo inserti, vediamo.

Così non funziona e non so perché:
Schermata 2016-06-03 alle 09.43.05.png

Codice: Seleziona tutto

// Identificativo della pagina 
$pagina = "a-istinti-del-body";  
$id_cor = 1;

//Contavisite, connessione al db tramite i parametri in config.php
$link = mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname);
if (!$link) {
	die ("Non riesco a connettermi:" . mysqli_error());
}

// Aggiorna il contatore 
if($user->data['user_id'] <> 314 ) { // Il 314 è l'ID admin (il mio), non viene conteggiato
if ($user->data['user_id'] == 1 ) { // Conteggia solo gli Utenti Registrati e gli Ospiti   
     mysql_query("UPDATE phpbb_contatore SET visite_ospiti = visite_ospiti + 1 WHERE id = $id_cor");
   } else {
      // Aggiorna il contatore generale e quello degli Utenti Registrati
     mysql_query("UPDATE phpbb_contatore SET visite_users = visite_users + 1 WHERE id = $id_cor");
   }
}

// Estrae i dati dal DB 
$res = mysqli_query($link,"SELECT visite_tot FROM phpbb_contatore WHERE id_cor like $id_cor");   
$tot_visite = mysqli_fetch_assoc($res);

if ( $tot_visite['visite_tot'] == 1) {
    $volte = "volta"; 
}
else {
    $volte = "volte"; 
}
// Crea la variabile-echo che viene poi richiamata nel template e nel file articoliX.html
$template->assign_vars(array(
    'CONTA_VISITE1' => "<span class=\"letto\">Letto </span><span class=\"number\">". $tot_visite['visite_tot'] ."</span> <span class=\"letto\">". $volte ."</span>",
)); 

page_footer();
?>
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Impedire il conteggio delle visite da parte dell'admin

Messaggio da Micogian » 03/06/2016, 11:12

Ma lascia "id" il nome del campo nella tabella, $id_cor è un'altra cosa.
Hai cambiato il nome del campo da "id" a "id_cor" ma poi nella query fai così:

Codice: Seleziona tutto

mysql_query("UPDATE phpbb_contatore SET visite_ospiti = visite_ospiti + 1 WHERE id = $id_cor");
Che spiegato in parole semplici vuol dire "modifica il campo "visite_ospiti" aggiungendo 1 al valore precedente nel record il cui campo "id" sia uguale al valore di $id_cor. Ovvio che il campo "id" nella tabella non esiste perchè l'hai cambiato in id_cor.
Lascia "id" nella tabella (io avevo consigliato "id_articolo" ma non importa il nome).
Poi stabilisci qual'è il record da selezionare indicando il valore di $id_cor

Codice: Seleziona tutto

$id_cor = 1; // che è l'id del record corrispondente alla pagina
A questo punto la query è corretta

Codice: Seleziona tutto

mysql_query("UPDATE phpbb_contatore SET visite_ospiti = visite_ospiti + 1 WHERE id = $id_cor");
Stessa cosa per la query SELECT.

Semplificando, la query UPDATE deve essere fatta in questo modo:

Codice: Seleziona tutto

mysql_query("UPDATE nome_tabella SET nome_campo_da_modificare = nuovo_valore WHERE nome_del_campo_del_record_da_selezionare = valore_da_cercare");

Avatar utente
frank
Utente
Utente
Messaggi: 1908
Iscritto il: 25/11/2014, 8:02
Sesso: Maschio
Versione: 3.1.7-PL1
Server: UNIX/Linux
PHP: 5.5.29
Database: MySQL(i) 5.5.43-log

Re: Impedire il conteggio delle visite da parte dell'admin

Messaggio da frank » 03/06/2016, 11:24

O che sbaglio io, non va. Ho modificato la tabella da id_cor a id, ora è cosi:

id
pagina
visite_tot
visite_users
visite_ospiti

e ho messo così:

Codice: Seleziona tutto

$id = 1;

if($user->data['user_id'] <> 314 ) { // Il 314 è l'ID admin (il mio), non viene conteggiato
if ($user->data['user_id'] == 1 ) { // Conteggia solo gli Utenti Registrati e gli Ospiti   
     mysql_query("UPDATE phpbb_contatore SET visite_ospiti = visite_ospiti + 1 WHERE id = $id");
   } else {
      // Aggiorna il contatore generale e quello degli Utenti Registrati
     mysql_query("UPDATE phpbb_contatore SET visite_users = visite_users + 1 WHERE id = $id");
   }
}

$res = mysqli_query($link,"SELECT visite_tot FROM phpbb_contatore WHERE id like $id");   
...

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Impedire il conteggio delle visite da parte dell'admin

Messaggio da Micogian » 03/06/2016, 13:35

Ho più volte detto che like si usa per le stringhe, non per i numeri.
A parte quello il resto va bene, anche se mi pare che non hai capito il senso di usare "id" come nome del campo e $id_cor per il valore dell'id corrente ma quello è irrilevante, funziona anche così.
Faccio un esempio banale per far capire che la variabile usata non deve necessariamente chiamarsi come il campo della tabell:

Codice: Seleziona tutto

$pippo = 1;
 mysql_query("UPDATE phpbb_contatore SET visite_ospiti = visite_ospiti + 1 WHERE id = $pippo");
Per provare che valori escono aggiungi delle righe echo, almeno puoi vedere che risultato ti danno (le righe echo vengono messe all'inizio della pagina, ma sono solo per provare:

Codice: Seleziona tutto

$id = 1;

if($user->data['user_id'] <> 314 ) { // Il 314 è l'ID admin (il mio), non viene conteggiato
if ($user->data['user_id'] == 1 ) { // Conteggia solo gli Utenti Registrati e gli Ospiti   
     mysql_query("UPDATE phpbb_contatore SET visite_ospiti = visite_ospiti + 1 WHERE id = $id");
echo "aumenta il numero delle visite_ospiti per il record id=" . $id . "<br />";
   } else {
      // Aggiorna il contatore generale e quello degli Utenti Registrati
     mysql_query("UPDATE phpbb_contatore SET visite_users = visite_users + 1 WHERE id = $id");
echo "aumenta il numero delle visite_users per il record id=" . $id . "<br />";
   }
}

$res = mysqli_query($link,"SELECT visite_tot FROM phpbb_contatore WHERE id = $id");   
echo "estrae il valore del numero delle visite_toto per il record id=" . $id . " visite_tot=" . $visite_tot . "<br />";
...
Ma l'ultimo echo, quello del SELECT devi metterlo dopo la parte che estrai i dati.

Mi pare poi superfluo dire che se l'operazione la fai tu non c'è nessuna variazione nel numero delle visite.

Avatar utente
frank
Utente
Utente
Messaggi: 1908
Iscritto il: 25/11/2014, 8:02
Sesso: Maschio
Versione: 3.1.7-PL1
Server: UNIX/Linux
PHP: 5.5.29
Database: MySQL(i) 5.5.43-log

Re: Impedire il conteggio delle visite da parte dell'admin

Messaggio da frank » 03/06/2016, 14:04

Le prove le faccio come ospite. Ho modificato l'id così id_pagina = 1; e anche nella tabella e nelle query seguendo il tuo esempio. Stampa questo:

aumenta il numero delle visite_ospiti per il record id=1
estrae il valore del numero delle visite_toto per il record id=1 visite_tot=

[phpBB Debug] PHP Warning: in file [ROOT]/*a-contatori.php on line 32: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

Codice: Seleziona tutto

// Estrae i dati dal DB 
$res = mysqli_query($link,"SELECT visite_tot FROM phpbb_contatore WHERE id = $id_pagina");
echo "estrae il valore del numero delle visite_toto per il record id=" . $id_pagina . " visite_tot=" . $visite_tot . "<br />";   
$tot_visite = mysqli_fetch_assoc($res);
...

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Impedire il conteggio delle visite da parte dell'admin

Messaggio da Micogian » 03/06/2016, 14:20

Cosa vuol dire questo?
Ma l'ultimo echo, quello del SELECT devi metterlo dopo la parte che estrae i dati.
In pratica così:

Codice: Seleziona tutto

// Estrae i dati dal DB
$res = mysqli_query($link,"SELECT visite_tot FROM phpbb_contatore WHERE id = $id_pagina");
$tot_visite = mysqli_fetch_assoc($res);
$visite_tot = $tot_visite['visite_tot'];

echo "estrae il valore del numero delle visite_tot per il record id=" . $id_pagina . " visite_tot=" . $visite_tot . "<br />";   

Avatar utente
frank
Utente
Utente
Messaggi: 1908
Iscritto il: 25/11/2014, 8:02
Sesso: Maschio
Versione: 3.1.7-PL1
Server: UNIX/Linux
PHP: 5.5.29
Database: MySQL(i) 5.5.43-log

Re: Impedire il conteggio delle visite da parte dell'admin

Messaggio da frank » 03/06/2016, 14:28

Avevo già provato lì, da lo stesso risultato

Codice: Seleziona tutto

...
// Crea la variabile-echo che viene poi richiamata nel template e nel file articoliX.html
$template->assign_vars(array(
    'CONTA_VISITE1' => "<span class=\"letto\">Letto </span><span class=\"number\">". $tot_visite['visite_tot'] ."</span> <span class=\"letto\">". $volte ."</span>",
)); 
echo "estrae il valore del numero delle visite_tot per il record id=" . $id_pagina . " visite_tot=" . $visite_tot . "<br />";   

page_footer();
?>

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Impedire il conteggio delle visite da parte dell'admin

Messaggio da Micogian » 03/06/2016, 16:19

Il problema è che l'aggiornamento avviene ma il SELECT non visualizza i dati aggiornati, bisognerebbe chiudere la connessione e riaprirla.
La soluzione è questa:
1) eseguire un SELECT per estrarre il numero delle visite attuali.
2) creare una variabile che aggiunga 1 alle visite attuali
3) eseguire la query UPDATE per aggiornare la tabella.

quindi:

Codice: Seleziona tutto

$id_pagina = 1;

// Estrae i dati dal DB
$res = mysqli_query("SELECT * FROM phpbb_contatore WHERE id = $id_pagina");
$tot_visite = mysqli_fetch_assoc($res);
$visite_tot = $tot_visite['visite_tot'];
$visite_users = $tot_visite['visite_users'];
$visite_ospiti = $tot_visite['visite_ospiti'];

// elaborare la modifica del record
if($user->data['user_id'] <> 314 ) { // Il 314 è l'ID admin (il mio), non viene conteggiato
if ($user->data['user_id'] == 1 ) { // Conteggia solo gli Utenti Registrati e gli Ospiti 
     $visite_tot = $visite_tot + 1 ; 
     $visite_ospiti = $visite_ospiti + 1 ; 
     mysql_query("UPDATE phpbb_contatore SET visite_tot = visite_tot + 1, visite_ospiti = visite_ospiti + 1 WHERE id = $id");
   } else {
      // Aggiorna il contatore generale e quello degli Utenti Registrati
     $visite_tot = $visite_tot + 1 ; 
     $visite_users = $visite_users + 1 ; 
     mysql_query("UPDATE phpbb_contatore SET visite_tot = visite_tot + 1,visite_users = visite_users + 1 WHERE id = $id");
   }
}
A questo punto la tabella è aggiornata e puoi usare le variabili $visite_tot, $visite_ospiti, $visite_users che contengono i nuovi valori mentre la query SELECT ti mostrerebbe i valori precedenti.

Avatar utente
frank
Utente
Utente
Messaggi: 1908
Iscritto il: 25/11/2014, 8:02
Sesso: Maschio
Versione: 3.1.7-PL1
Server: UNIX/Linux
PHP: 5.5.29
Database: MySQL(i) 5.5.43-log

Re: Impedire il conteggio delle visite da parte dell'admin

Messaggio da frank » 03/06/2016, 17:45

Non inserisce nel db, mette a video, inoltre da 2 errori

PHP Warning: in file [ROOT]/a-istinti-del-body.php on line 52: mysqli_query() expects at least 2 parameters, 1 given
PHP Warning: in file [ROOT]/a-istinti-del-body.php on line 53: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given

Codice: Seleziona tutto

// Identificativo della pagina 
$id_pagina = 1;

// elaborare la modifica del record
if($user->data['user_id'] <> 314 ) { // Il 314 è l'ID admin (il mio), non viene conteggiato
if ($user->data['user_id'] == 1 ) { // Conteggia solo gli Utenti Registrati e gli Ospiti 
     $visite_tot = $visite_tot + 1 ; 
     $visite_ospiti = $visite_ospiti + 1 ; 
     mysql_query("UPDATE phpbb_contatore SET visite_tot = visite_tot + 1, visite_ospiti = visite_ospiti + 1 WHERE id = $id_pagina");
   } else {
      // Aggiorna il contatore generale e quello degli Utenti Registrati
     $visite_tot = $visite_tot + 1 ; 
     $visite_users = $visite_users + 1 ; 
     mysql_query("UPDATE phpbb_contatore SET visite_tot = visite_tot + 1,visite_users = visite_users + 1 WHERE id = $id_pagina");
   }
}

// Estrae i dati dal DB 
$res = mysqli_query("SELECT * FROM phpbb_contatore WHERE id = $id_pagina");
$tot_visite = mysqli_fetch_assoc($res);
$visite_tot = $tot_visite['visite_tot'];
$visite_users = $tot_visite['visite_users'];
$visite_ospiti = $tot_visite['visite_ospiti'];

if ( $tot_visite['visite_tot'] == 1) {
    $volte = "volta"; 
}
else {
    $volte = "volte"; 
}

// Crea la variabile-echo che viene poi richiamata nel template e nel file articoliX.html
$template->assign_vars(array(
    'CONTA_VISITE1' => "<span class=\"letto\">Letto </span><span class=\"number\">". $tot_visite['visite_tot'] ."</span> <span class=\"letto\">". $volte ."</span>",
)); 
   
page_footer();
?>

Rispondi

Torna a “[3.1.x] Forum di Supporto”

Chi c’è in linea

Visitano il forum: Nessuno e 40 ospiti