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:

incrementare automaticamente una tabella

Messaggio da alex75 » 30/10/2016, 15:16

Salve ragazzi, Vi spiego cosa vorrei fare.
Ho una tabella chiamata "punti" già funzionante e che incremento tramite alcune query in base a diverse situazioni.
Vorrei aggiungere un incremento giornaliero automatizzato di 100 punti, così da assegnare all'utente questi 100 punti come se fossero dei punti fedeltà per intenderci.
Avete dei suggerimenti oltre all'uso dei cronjob?

Avatar utente
Barrnet
Leader Moderatori
Leader Moderatori
Messaggi: 3124
Iscritto il: 04/07/2010, 23:31
Sesso: Maschio
Versione: 3.0.10
Server: UNIX/Linux
PHP: 5.3.10
Database: MySQL 5.1.61-community-log
Contatta:

Re: incrementare automaticamente una tabella

Messaggio da Barrnet » 30/10/2016, 19:30

La soluzione più ovvia è utilizzare dei cronjob. Oppure metti lo script a fondo pagina ma salvi l'ultima interazione da qualche parte (che so, una tabella con user_id e timestamp dell'ultima interazione) e metti un controllo a monte per vedere se eseguire o meno la porzione di codice.

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 » 01/11/2016, 10:46

Ho avuto un'idea...
Trattandosi di punti fedeltà (l'utente che si logga al sito/forum ogni giorno) potrei inserire un semplicissimo pulsante che tramite variabile $_GET lasci libero arbitrio all'utente di assegnarsi i 100 punti giornalieri.
Restano però 2 problemi:
1) Il bottone una volta cliccato deve sparire fino al giorno successivo (idee ? :mrgreen: )
2) L'utente non deve vedere/conoscere l'indirizzo del file php cliccato, altrimenti si divertirebbe ad aprirlo diverse volte. Ma questo credo che si possa ovviare usando $_post invece di $_get... ma anche in questo caso non ci vuole molto a reperire il codice sorgente della pagina ( :? idee? )

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 » 01/11/2016, 12:00

Secondo me con il pulsante non hai dati certi, l'utente potrebbe dimenticarsi di cliccare, potrebbe non essere interessato e quindi non avresti una corretta situazione.
Meglio un contatore automatico con la condizione che siano passate almeno 24 ore dall'ultimo accesso. Per farlo ci vuole una tabella che memorizzi user_id, punteggio assegnato e data sotto forma di timestamp.
Se l'intervento dell'utente è di 24 ore successivo al precedente intervento avviene l'aggiornamento della tabella.
Devi solo decidere se aggiornare il record dell'utente o creare un nuovo record.
Con la prima soluzione hai un totale di punteggio ma non sai quando l'utente si è collegato (hai solo l'ultimo collegamento), con record separati hai una visione più completa delle connessioni e il totale dei punti è facilmente recuperabile.

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 » 01/11/2016, 14:57

Non mi interessa molto di avere ulteriori conferme su chi e quando abbia ricevuto i punti, perché alla base c'è un forum phpbb, quindi ho già diversi riscontri.
Riguardo al timestamp dovrebbe essere di tipo @daily e non orario altrimenti se l'utente si collegasse di sera, il giorno successivo dovrebbe attendere lo stesso orario, per ricevere i punti.
La tabella degli utenti collegati nella giornata di oggi l'ho già. Comprende l'user_id, il nickname ed il timestamp dell'ultimo collegamento. La tabella si svuota ogni giorno a mezzanotte. Mi resta il mistero di come si legga il timestamp (che per me sono dei numeri senza senso) e come impostare la clausola where per assegnare i punti una sola volta al giorno.

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 » 01/11/2016, 16:34

Tempo fa avevo messo nel Wiki alcuni esempi su come utilizzare timestamp, vedi http://wiki.phpbbitalia.net/Timestamp

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 » 01/11/2016, 16:41

Ottimo grazie ;-) me lo studio e vediamo cosa viene fuori...
In pratica il "timestamp" rappresenta il numero di secondi trascorsi dalle ore 00:00 del

Già questo mi ha reso più comprensibili quei numeri :D

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 » 01/11/2016, 17:11

Se capisci il meccanismo diventa tutto molto semplice.
Ad esempio questo codice ti da il timestamp del momento corrente:

Codice: Seleziona tutto

$timestamp_cor = time(); 
Se vuoi trovare il timestamp alle ore 00 del giorno corrente fai così:

Codice: Seleziona tutto

// recuperiamo i valori di anno, mese, giorno della data odierna
$aa = date(Y);
$mm = date(m);
$dd = date(d);
 
$data_start = mktime(0, 0, 0, $mm, $dd, $aa); // timestamp alle ore 00:00 del giorno corrente
A questo punto hai il timestamp alle ore 00 e quindi puoi controllare se l'intervento dell'utente è precedente o successivo a questo valore.

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 » 01/11/2016, 22:18

Grazie! La tua spiegazione sul wiki è davvero semplice ed intuitiva.
Ho fatto anche qualche test con esito positivo; ma a questo punto la sfrutterò allo step successivo.
sto sfruttando l'estensione "chi è stato qui" che mi crea già una tabella degli utenti connessi oggi dalle 00:00 alle 24:00, questo mi evita tante rogne di cui tener conto, come ad esempio fusorari e/o ora legale etc. oltre che ho notato che la tabella user_lastvisit non è molto reattiva (non si aggiorna facilmente se non fai determinate azioni).
Quindi userò il timestamp solo successivamente per decidere quando far partire la query.
Adesso sono fermo ad un altro stupido problema. Ho scritto un file php che mi estrae gli id degli utenti nella tabella wwh (estensione chi è stato qui) e sul template ottengo la lista completa e corretta degli user id connessi oggi; mentre sul php ne ricevo soltanto 1 come mai? ho avuto conferma di questo perchè il contatore aggiornato è sempre e soltanto 1 (l'ultimo della lista) ed anche con echo ricevo un solo user_id.
questo è il codice:

Codice: Seleziona tutto

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

$sql = "SELECT ut.user_id, wt.user_id
FROM " . USERS_TABLE . " ut, " . WWH_TABLE . " wt 
WHERE ut.user_id = wt.user_id ";
        
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$template->assign_block_vars('lista_connessi',array(
'USER_CONN'    => $row['user_id'],
$idconn = $row['user_id'],
));
}
// Aggiungo 100 punti al contatore degli utenti collegati oggi
$req = mysqli_query($dbi, "UPDATE `phpbb_users` SET cont_punti = cont_punti + 100 WHERE user_id = '$idconn'; ");
echo $idconn;
?>

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 » 02/11/2016, 8:12

Per avere la lista completa prova così:

Codice: Seleziona tutto

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

$sql = "SELECT ut.user_id, wt.user_id
FROM " . USERS_TABLE . " ut, " . WWH_TABLE . " wt 
WHERE ut.user_id = wt.user_id ";
        
$result = $db->sql_query($sql);
$i = 0;
while ($row = $db->sql_fetchrow($result))
{
$idconn[$i] = $row['user_id'];
// echo $idconn[$i] . "<br />"; //se vuoi visualizzare il risultato
$template->assign_block_vars('lista_connessi',array(
'USER_CONN'    => $idconn[$i],
));
$i = ++$i ;
}
In questo modo hai un array $idconn[] che puoi estarrre con un ciclo for o foreach.

Rispondi

Torna a “PHP - MySQL”

Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti