[PHP] Incremento di un campo numerico in base a incremento campo di testo

LalaGp

Nuovo Utente
1 Mag 2018
3
0
1
45
Ciao a tutti,
Scusate ma sono alle prime armi e mi sono ritrovata a dover creare un sito con PHP (per un gioco di ruolo ) senza averne le basi tecniche.
Ho bisogno di fare in modo che un campo della mia tabella mysql, dal valore numerico, incrementi di 1 ogni volta che un altro campo di tipo testuale raggiunge un determinato numero di caratteri, per un minimo di 4 invii al giorno e fino al raggiungimento di 3 incrementi del campo numerico.

Tizio scrive una frase di 1000 caratteri, per almeno 4 volte nell'arco della giornata =riceve 1 punto (che incrementa il campo numerico). Può ricevere al massimo 3 punti. Tutte le frasi che potrebbero generare punti oltre questo valore, non lo faranno.

Per ora mi è stato consigliato di fare in un modo, il quale però mi risolve unicamente una parte del problema e non mi conteggia il numero di frasi inviate.

PHP:
$PARAMETERS['settings']['exp_by_chat']['number'] = '1000';
 $PARAMETERS['settings']['exp_by_chat']['max_exp'] = '3';

  if($PARAMETERS['mode']['exp_by_chat']=='ON')
    {
      $msg_length = strlen($chat_message);
      $char_needed = gdrcd_filter('num', $PARAMETERS['settings']['exp_by_chat']['number']);
      $exp_bonus = $msg_length>=$char_needed;
    }

        if($PARAMETERS['mode']['exp_by_chat']=='ON')
{

 //definisce $exp_giornaliera per evitare notice nel while
 $exp_giornaliera = 0;
 

 //Query che recupera il numero di caratteri per messaggi del pg delle ultime 24 ore che hanno generato px;
 $query = "SELECT CHAR_LENGTH(testo) AS msg_length";
 $query .= " FROM chat";
 $query .= " WHERE";    //CONDIZIONI
 $query .= " mittente = '".gdrcd_filter_in($_SESSION['login'])."'";    //il mittente è il pg loggato   
 $query .= " AND (tipo = 'P' OR tipo = 'A' OR tipo = 'M')";    //il messaggio è del tipo di quelli che danno px
 $query .= " AND DATE_ADD( ora, INTERVAL 1 DAY ) >= NOW()";    //è meno vecchio di 24h
 $query .= " AND CHAR_LENGTH(testo) > ".gdrcd_filter('num',$PARAMETERS['settings']['exp_by_chat']['number']);    //è della lunghezza minima per generare px
 //echo $query;
 $result = gdrcd_query($query,'result');
 //clalcola l'esperienza accumulata nelle ultime 24h
 while($row = gdrcd_query($result,'fetch'))
 {
 
 $exp_giornaliera = $exp_giornaliera + ($row['msg_length']>=$char_needed);   

 }
 if($exp_giornaliera < $PARAMETERS['settings']['exp_by_chat']['max_exp'])
 {

 if ($m_type == 'A' || $m_type == 'P' || $m_type == 'M')
 gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1");

 }
}
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Scusa la domanda, non sarebbe meglio resettare i contatori al giorno corrente?
$query .= " AND DATE_ADD( ora, INTERVAL 1 DAY ) >= NOW()"; //è meno vecchio di 24h

Oltre questa osservazione potresti provare così, bada bene che non ho verificato e non ho ben capito come calcoli l'esperienza.
PHP:
$query="SELECT SUM(CHAR_LENGTH(test)) as numero_caratteri_totali
        COUNT(test) as numero_chat_inviate
        FROM chat
        WHERE mittente='".gdrcd_filter_in($_SESSION['login'])."' AND tipo IN ('P,A,M'),
            AND DATE(ora) = CURDATE()
            AND CHAR_LENGTH(testo) >= ".gdrcd_filter('num',$PARAMETERS['settings']['exp_by_chat']['number']).";
Ottieni una cosa di questo genere:
PHP:
$result=[
            [
                'numero_caratteri_totali'=>3500,
                'numero_chat_inviate'=>15
            ]
        ];
Cosa significa: L'utente nell'arco temporale imposto dalla query ha scritto 15 chat, con numero totali di caratteri 3500,
La clausola che fa il vero filtro è AND CHAR_LENGTH(testo) >= numero, in qunto non fa contare il numero di chat inviate con caratteri inferiori
rispetto al parametro.
L'esperienza potrebbe essere una cosa del genere:
PHP:
//numero di chat inviate che soddisfano la lunghezza minima di 1000 caratteri
$exp=$result[0]['numero_chat_inviate'];

Se questi postulati sono giusti, ti consiglio, prima di ogni cosa, di verificare attentamente le operazioni e le azioni degli utenti, perchè come dicevo in precedenza, l'esperienza delle ultime 24 ore sembrerebbe una piccola forzatura...
Forse è meglio che lavori con CURDATE().
Buon Lavoro.
 

LalaGp

Nuovo Utente
1 Mag 2018
3
0
1
45
Grazie!
Appena arrivo a casa provo e ti faccio sapere.
In effetti mi sembra decisamente più pulito così. Grazie davvero. Purtroppo sono proprio alle primissime armi e certe cose non mi vengono nemmeno in mente.
 
Discussioni simili
Autore Titolo Forum Risposte Data
A [PHP] Percentuale Incremento e Decremento PHP 2
E php problema incremento e decremento di 2 variabili con click da pulsante PHP 0
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10

Discussioni simili