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

incrementare automaticamente una tabella

Area di discussione relativa al linguaggio di programmazione web più conosciuto. Il forum è dedicato anche a MySQL, la piattaforma di database più utilizzata con il PHP.
Avatar utente
alex75
phpBB Expert
phpBB Expert
Messaggi: 943
Iscritto il: 31/03/2012, 23:46
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.37
Database: MySQL 5.6.39
Località: palermo
Contatta:

Re: incrementare automaticamente una tabella

Messaggio da alex75 » 02/11/2016, 18:21

Funziona! :wink: :danza:
Grazie :wink:

Avatar utente
alex75
phpBB Expert
phpBB Expert
Messaggi: 943
Iscritto il: 31/03/2012, 23:46
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.37
Database: MySQL 5.6.39
Località: palermo
Contatta:

Re: incrementare automaticamente una tabella

Messaggio da alex75 » 02/11/2016, 20:06

per onorare il titolo del topic e i consigli ricevuti, ho voluto provare a fare a meno dell'estensione (ma anche perchè mi piace studiare e capire :mrgreen: ).
Come già detto in precedenza la tabella userlastvisit non è molto reattiva (se mi collego al forum essendo già loggato da browser il mio timestamp resta a ieri... ho dovuto disconnettermi e riconnettermi perchè si aggiornasse).
Ecco il codice attuale funzionante senza bisogno di altre tabelle/estensioni (a parte la tabella "attivo" che serve a me ad altri scopi):

Codice: Seleziona tutto

<?php
// Mi connetto al database mysql
$dbi = mysqli_connect("localhost", 'root', '', 'sbg');

$sql = "SELECT user_id, group_id, user_lastvisit, attivo
FROM " . USERS_TABLE . " 
WHERE attivo = 1
AND DATE(FROM_UNIXTIME (user_lastvisit)) = CURDATE()
ORDER BY user_lastvisit DESC ";
       
$result = $db->sql_query($sql);
$i = 0;
while ($row = $db->sql_fetchrow($result))
{
$template->assign_block_vars('lista_connessi',array(
'USER_CONN'    => $idconn[$i],
));
$i = ++$i ;
$idconn[$i] = $row['user_id'];
// Aggiungo 100 punti al contatore
$req = mysqli_query($dbi, "UPDATE `phpbb_users` SET cont_punti = cont_punti + 100 WHERE user_id = '$idconn[$i]'; ");
}
?>
Tutto funziona, ma manca sempre il capo espiatorio... quando e come far partire tutto?
L'idea è di lanciare la query alle 23:59... e questo è fattibile sempre tramite timestamp, ma servirebbe sempre qualcuno che inneschi il processo (aprendo una pagina o cliccando qualcosa).
Inoltre potrebbe comunque succedere che in quel minuto in 50 inneschino il processo...
Credo che siamo tornati al problema dei cron alla quale da cpanel non ho accesso.
Dovrei quindi usare i cron di phpbb.
Dico bene o avete altri consigli?

Avatar utente
alex75
phpBB Expert
phpBB Expert
Messaggi: 943
Iscritto il: 31/03/2012, 23:46
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.37
Database: MySQL 5.6.39
Località: palermo
Contatta:

Re: incrementare automaticamente una tabella

Messaggio da alex75 » 02/11/2016, 22:00

alex75 ha scritto: Inoltre potrebbe comunque succedere che in quel minuto in 50 inneschino il processo...
O che nessuno sia connesso per poterlo innescare...

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: incrementare automaticamente una tabella

Messaggio da Micogian » 03/11/2016, 8:45

Ma perchè è importante lanciare la procedura alle 23.59? basterebbe far partire la procedura al primo accesso dopo quell'ora.
Nel mio Forum ho la lista delle ultime immagini del forum che si aggiorna con il primo accesso di qualsiasi utente.

Avatar utente
alex75
phpBB Expert
phpBB Expert
Messaggi: 943
Iscritto il: 31/03/2012, 23:46
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.37
Database: MySQL 5.6.39
Località: palermo
Contatta:

Re: incrementare automaticamente una tabella

Messaggio da alex75 » 03/11/2016, 11:37

l'orario è solo ipotetico... dico le 23:59 per essere sicuro che si aggiorni una sola volta al giorno per tutti. Ma forse hai ragione, mi sto complicando la vita.
a me interessa che questo contatore incrementi 100 punti 1 sola volta al giorno e soltanto agli utenti che si siano connessi al forum. In pratica ti assegno 100 punti soltanto se visiti ogni giorno il forum.
Forse potrei reimpostare tutto meglio, assegnando i punti al singolo utente a patto che il suo timestamp sia di oggi... quindi al suo login (e fin qui nell'ultimo codice ci siamo già arrivati).
Mi resta soltanto da trovare una soluzione per evitare che se l'utente si disconnette e riconnette non abbia altri 100 punti.

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: incrementare automaticamente una tabella

Messaggio da Micogian » 03/11/2016, 13:09

alex75 ha scritto: Mi resta soltanto da trovare una soluzione per evitare che se l'utente si disconnette e riconnette non abbia altri 100 punti.
Tu dovresti memorizzare il timestamp relativo alla connessione dell'utente, se l'ultima connessione è precedente al timestamp delle ore 00 gli assegni i 100 punti e aggiorni il timestamp della connessione, se il timestamp associato al'utente è successivo a quelle delle ore 00 vuol dire che l'utente si è già connesso e non gli dai il punteggio.
In pratica

Codice: Seleziona tutto

if (timestamp_delle_ore_00 > timestamp_ultima_connessione)
{ 
// significa che è la prima connessione dopo le ore 00
// assegni il punteggio e aggiorni il timestamp della connessione
}else{
// se il timestamp dell'ultima connessione è superiore al timestamp delle ore 00 l'utente si è già connesso
// non assegni il punteggio ma aggiorni il timestamp ultima_connessione
}
Ricapitolando devi avere 3 valori di timestamp:
1) timestamp dell'ultima connessione (memorizzata)
2) timestamp della connessione corrente (il momento della connessione corrente)
3) timestamp delle ore 00

Avatar utente
alex75
phpBB Expert
phpBB Expert
Messaggi: 943
Iscritto il: 31/03/2012, 23:46
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.37
Database: MySQL 5.6.39
Località: palermo
Contatta:

Re: incrementare automaticamente una tabella

Messaggio da alex75 » 03/11/2016, 18:29

Sto seguendo questa strada e credo che stavolta ci siamo...
creo una nuova tabella dove segnare gli user_id già premiati oggi (la chiamerò id_prem).
ad ogni utente che si collega assegno i punti e registro il suo user_id nella tabella id_prem.
quindi metterò la clausola assegna i punti agli user_id con timestamp di oggi ma che non siano già nella tabella " id_prem".
In fine se nella tabella " id_prem" il timestamp dell'user_id è precedente a quello di oggi... cancello l'user_id , Così il giorno successivo sarà nuovamente possibile assegnargli i punti.

Avatar utente
alex75
phpBB Expert
phpBB Expert
Messaggi: 943
Iscritto il: 31/03/2012, 23:46
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.37
Database: MySQL 5.6.39
Località: palermo
Contatta:

Re: incrementare automaticamente una tabella

Messaggio da alex75 » 03/11/2016, 19:28

Così come lho pensata... il codice sembrerebbe ridursi all'osso, ma non sta funzionando, evidentemente ho è sbagliato il mio pensiero oppure sbaglio qualcosa nel codice.

Codice: Seleziona tutto

<?php
// Mi connetto al database mysql
$dbi = mysqli_connect("localhost", 'root', '', 'sbg');

// Azzero la tabella id_prem degli user_id che non si sono ancora connessi oggi... così se si connetteranno potranno ricevere i punti.
$req = mysqli_query($dbi, "UPDATE `phpbb_users` SET id_prem = '1' WHERE DATE(FROM_UNIXTIME (user_lastvisit)) < CURDATE(); ");
// Aggiungo 100 punti al contatore degli user_id con timestamp di oggi
$req1 = mysqli_query($dbi, "UPDATE `phpbb_users` SET cont_punti = cont_punti + 100 WHERE id_prem = '1' AND attivo = '1' AND DATE(FROM_UNIXTIME (user_lastvisit)) == CURDATE(); ");
// dopo aver assegnato i punti porto il valore di id_prem a 2 così per oggi non potrà ricevere altri punti
$req2 = mysqli_query($dbi, "UPDATE `phpbb_users` SET id_prem = '2' WHERE DATE(FROM_UNIXTIME (user_lastvisit)) == CURDATE(); ");
?>
in pratica la tabella id_prem si aggiorna ma i punti non vengono assegnati

Avatar utente
alex75
phpBB Expert
phpBB Expert
Messaggi: 943
Iscritto il: 31/03/2012, 23:46
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.37
Database: MySQL 5.6.39
Località: palermo
Contatta:

Re: incrementare automaticamente una tabella

Messaggio da alex75 » 03/11/2016, 20:42

alex75 ha scritto:Così come lho pensata... il codice sembrerebbe ridursi all'osso, ma non sta funzionando, evidentemente ho è sbagliato il mio pensiero oppure sbaglio qualcosa nel codice.
Leggasi:
alex75 ha scritto:Così come l'ho pensata... il codice sembrerebbe ridursi all'osso, ma non sta funzionando, evidentemente o è sbagliato il mio pensiero oppure sbaglio qualcosa nel codice.
:oops: 2 errori in una solo rigo (giuro ero distratto perchè mentre scrivevo pensavo al codice e rimodificavo il testo :mrgreen: )

Edit:
Trovato l'errore nel codice.
C'era un segno = di troppo qui:

Codice: Seleziona tutto

DATE(FROM_UNIXTIME (user_lastvisit)) == CURDATE()
Sto facendo dei controlli incrociati... ma sembra che tutto funzioni a dovere

Questo è il codice attuale e funzionante come volevo:

Codice: Seleziona tutto

<?php
// Mi connetto al database mysql
$dbi = mysqli_connect("localhost", 'root', '', 'sbg');

// Azzero la tabella id_prem degli user_id che non si sono ancora connessi oggi... così se si connetteranno potranno ricevere i punti.
$req = mysqli_query($dbi, "UPDATE `phpbb_users` SET id_prem = '1' WHERE DATE(FROM_UNIXTIME (user_lastvisit)) < CURDATE(); ");
// Aggiungo 100 punti al contatore degli user_id con timestamp di oggi
$req1 = mysqli_query($dbi, "UPDATE `phpbb_users` SET cont_punti = cont_punti + 100 WHERE attivo = '1' AND id_prem = '1' AND DATE(FROM_UNIXTIME (user_lastvisit)) = CURDATE(); ");
// dopo aver assegnato i punti porto il valore di id_prem a 2 così per oggi non potrà ricevere altri punti
$req2 = mysqli_query($dbi, "UPDATE `phpbb_users` SET id_prem = '2' WHERE DATE(FROM_UNIXTIME (user_lastvisit)) = CURDATE(); ");
?>

Rispondi

Torna a “PHP - MySQL”

Chi c’è in linea

Visitano il forum: Nessuno e 74 ospiti