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

LalaGp

Nuovo Utente
1 Mag 2018
3
0
1
42
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.323
88
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
42
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
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 0
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2
Z Video protetto con PHP PHP 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
I Eecuzione di javascript in ciclo foreach php. PHP 7
S Libreria PHP per creare file dwg o dxf PHP 0
A [cerco - retribuito] Sviluppatore Php freelance per progetti vari Offerte e Richieste di Lavoro e/o Collaborazione 2
L Google chart php mysql PHP 2
R Download file multipli da directory php PHP 0
F pagina dinamica PHP PHP 3
P Rimozione automatica url da sitemap.xml con PHP PHP 1
L php tinymce mi duplica la classe label PHP 3
S Errore PHP - Notice: Undefined index ... PHP 14
N file manager da php 5 a 7 PHP 15
M Utilizzare la funzione mysql_num_rows() in PHP 5 PHP 3
elpirata Update dinamico informazioni scritte in una pagina php jQuery 11

Discussioni simili