controllo questo sconosciuto
controllo questo sconosciuto postato il 24/06/2010 20:04:27 nel forum programmazione, open source e hosting e modificato da gemini il 24/06/2010 20:32:27
Ciao a tutti, sto diventando scemo con un controllo in php proprio per la mia land, in base ad una formula matematica io do un tot di punti e si possono spendere nelle abilità, ora quello che mi interesserebbe fare è la somma di tutte le abilità comprese quelle che sono rimaste a 0 e confrontarla con il totale dei punti, se è sbagliato sia in eccesso sia in difetto altrimenti dovrebbe registrarne le abilità nella tabella abilità...
$punti_base = 6;
$ris = $punti_base + $bonus;
$tot = $ris * 4;
echo "QUESTI SONO I PUNTI ABILITÀ CHE PUOI SPENDERE IN TOTALE ".$tot;
$creatore = $_POST['creatore'];
$login = $_POST['login'];
$AppPol = $_POST['AppPol'];
$schivare = $_POST['schivare'];
$bianca = $_POST['bianca'];
$impropria = $_POST['impropria'];
$contundente = $_POST['contundente'];
$leggere = $_POST['leggere'];
$medie = $_POST['medie'];
$pesanti = $_POST['pesanti'];
$comando = $_POST['comando'];
$artigianaliesp = $_POST['artigianaliesp'];
$industrialiesp = $_POST['industrialiesp'];
$packsur = $_POST['packsur'];
$orientali = $_POST['orientali'];
$occidentale = $_POST['occidentale'];
$percezione = $_POST['percezione'];
$intimidazione = $_POST['intimidazione'];
$artigianato = $_POST['artigianato'];
$equilibrio = $_POST['equilibrio'];
$nuotare = $_POST['nuotare'];
$trapart = $_POST['trapart'];
Queste sono tutte le variabili che vengono importate tramite un form dove si possono inserire esclusivamente i numeri
<?php
if(!isset($tot==$abtot)) {
[MODERAZIONE].....UN'ALTRA INFRAZIONE DEL GENERE (BESTEMMIA) E SCATTA IL BAN!.......[/MODERAZIONE]
exit();
}
else {
require_once("regABcombattente.php");
$obj = new Register();
$obj->abilita($_POST['creatore'], $_POST['login'], $_POST['AppPol'], $_POST['schivare'],
$_POST['bianca'], $_POST['impropria'], $_POST['contundente'], $_POST['leggere'],
$_POST['medie'], $_POST['pesanti'], $_POST['comando'], $_POST['artigianaliesp'],
$_POST['industrialiesp'], $_POST['packsur'], $_POST['orientali'],
$_POST['occidentale'], $_POST['percezione'], $_POST['intimidazione'], $_POST['artigianato'],
$_POST['equilibrio'], $_POST['nuotare'], $_POST['trapart']);
}
?>
Ora, la variabile $abtot ho provato a farla un po' in tutti i modi sia come $abtot = $_POST['bianca'] + $_POST['leggere']......
sia come $abtot = $bianca + $leggere ecc...
Come si può impostare questo controllo secondo voi? Ringrazio tutti quanti fin d'ora per l'aiuto che vorrete darmi, sono due settimane che ci provo in tutti i modi
Pagine → 1 2
24/06/2010 20:13:20 e modificato da iko93 il 25/06/2010 01:52:42
Per questo Forum mi sa che la terza riga del secondo spezzone di codice non va proprio a pennello!
Appena posso ci do un' occhiata comunque promesso xD
24/06/2010 20:18:55 e modificato da blancks il 24/06/2010 20:20:10
Io ti consiglio di cancellare tutto quello che hai fatto e ripartire da capo, impostando una logica piu' semplice ed evitando di usare un oggetto (che fra le altre cose non sappiamo neppure cosa combina visto che non pesca nel costruttore il totale dei punti possibili per un confronto).
In ogni caso io te la suggerirei piu' semplice di quello che mostri (dove ci sono cose che non capisco ne come e ne perchè xD).
Ad esempio di sommare tutti i valori che arrivano da form in una variabile
$tot_ab += (int)$_POST['abilita1'];
$tot_ab += (int)$_POST['abilita2'];
// etc etc..
Per farne successivamente il raffronto col totale:
/* Spero non ci sia bisogno di spiegarlo questo controllo.. */
if ( ($tot_ab-$tot_punti) == 0)
{
// ok, registra.
}else
{
// l'utente ha gravi carenze matematiche
}
Semplice ed efficace.
Poi vabe se vuoi rifinire fai inviare i dati numerici da input già in un array così esegui la somma col foreach e invece di scrivere bilioni di righe di codice per la somma risolvi con sole due.
Edit: evitiamo di pubblicare esplicite imprecazioni, grazie :)
24/06/2010 20:34:01
blancks ha scritto:
Edit: evitiamo di pubblicare esplicite imprecazioni, grazie :)
Concordo.
Ho modificato la frase in questione, ma che non si ripeta o scatta il ban per direttissima.
25/06/2010 17:48:38
Ragazzi, io mi scuso con tutto questo forum per l'increscioso episodio che non accadrà mai più
26/06/2010 03:46:59 e modificato da takkero il 26/06/2010 03:53:41
che inutile spreco di CPU ed allocazione ram per le variabili..
basta 1 riga di codice:
if(array_sum($_POST) == (($bonus+6)* 4)){echo "OK";}else{echo "KO";}
fatto >_>"
p.s. funziona ovviamente anche se ci sono string nell'array.
26/06/2010 10:40:02
takkero ha scritto: che inutile spreco di CPU ed allocazione ram per le variabili..
basta 1 riga di codice:
if(array_sum($_POST) == (($bonus+6)* 4)){echo "OK";}else{echo "KO";}
fatto >_>"
p.s. funziona ovviamente anche se ci sono string nell'array.
E se ci sono altri dati numerici nel superglobale $_POST che non c'entrano una mazza col calcolo che deve fare :D ? Facciamo la sottrazione ? E allora dove sta questa abnorme differenza prestazionale e di risorse che fai sembrare scusa xD ?
Non sono provocatorio, parlo seriamente, sono solo curioso di sapere dove credi che php allochi i risultati dei calcoli che fai nell'if per il raffronto.
26/06/2010 18:48:36
while (list($key,$value) = each($_POST)){
if(substr($key,0,1)=="_"){$tot += $value;}
}
if($tot == (($bonus+6)* 4)){echo "OK";}else{echo "KO";}
tho...ecco sistemato il tuo "superglobale" array... basta che nei nomi degli input metti un _ davanti al nome per riconoscere quali lavorare e quali no..
26/06/2010 19:47:26
Si, ma il punto che mi è ancora oscuro e che ti ho chiesto cortesemente di chiarire è perchè questa soluzione:
foreach ($_POST['abilita'] as $value)
$tot += (int)$value;
if ($tot-$max_punti == 0)
{
// si
}else
{
// no
}
la consideri un..
inutile spreco di CPU ed allocazione ram per le variabili...
Rispetto a quanto da te proposto:
while (list($key,$value) = each($_POST)){
if(substr($key,0,1)=="_"){$tot += $value;}
}
if($tot == (($bonus+6)* 4)){echo "OK";}else{echo "KO";}
Seriamente, l'argomento mi interessa :)
27/06/2010 15:47:20
$somma = $schivare + $bianca + $impropria + $contundente + $leggere + $medie + $pesanti + $comando + $artigianaliesp + $industrialiesp + $urbansur + $orientali + $occidentale + $percezione + $intimidazione $artigianato + $equilibrio + $nuotare + $trapart;
Questa dovrebbe essere la somma delle abilità, però quando lo provo in remoto l'errore è il seguente:
Parse error: syntax error, unexpected T_VARIABLE in C:xampphtdocssito egistrazioneinfiltratore_tattico.php on line 158
È la riga dove si trova appunto la somma, ora se non posso fare la somma dei punteggi come faccio? Ma soprattutto, dove si trova l'errore?
Grazie ancora a tutti quanti
27/06/2010 16:11:42
Non so se sia un errore di trascrizione sul forum, ma tra $intimidazione e $artigianato manca un + ^^"
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
The Coven ↗
AlterEgo ↗
Fallen Gods ↗
Hero Wars ↗
Enlisted ↗
Seconda Era ↗
Crossout ↗
Raja Dunia ↗