Variabile non nel db...

Ciao a tutti, volevo chiedere una cosa.... io in una tabella, devo mettere un valore variabile. Ma questo dato, non è in database, ma aumenta e diminuisce, a seconda di un altro valore in database.

<? 
$special==0;
if($rs["Esperienza"]>200)
{if($rs["Esperienza"]<400)
{$special=1;}
if($rs["Esperienza"]>400 && $rs["Esperienza"]<600)
{$special=2;}
if($rs["Esperienza"]>600 && $rs["Esperienza"]<800)
{$special=3;}
if($rs["Esperienza"]>800 && $rs["Esperienza"]<1000)
{$special=4;}
if($rs["Esperienza"]>1000 && $rs["Esperienza"]<1200)
{$special=5;}
}
else{$special==0;}
?>
<tr class=tScuro>
  <td>Livello</td>
  <td><?= $special ?>
  </td>
  <td>
  </td>
  </tr>

Io ho questo codice che ho scritto, ma non funza, infatti non mi appare nulla.

Praticamente io vorrei che appaia

1) se il valore va da 0 a 200

2) se il valore va da 201 a 400

3) se il valore va da 401 a 600

4) se il valore va da 601 a 800

5) se il valore va da 801 a 1000

6) se il valore va da 1001 a 1200

7) se il valore va da 1201 a 1400

8) se il valore va da 1401 a 1600

9) se il valore va da 1600 a 2000

10) da 2000 in poi

Valore = Esperienza.

Forse posso essere più chiaro.... io vorrei che mi apparisse, 1,2,....10 a seconda della scaletta che prima ho scritto. Però questo valore, è in continuo cambiamento, in quanto il valore Esperienza, cambia di continuo, o cmq costantemente.

Spero di essermi spiegato.

inviato 10 anni fa
Nik
Nik
1
X 0 X

ho fatto una cosa simile giusto stamattina, prova a vedere se ti può andare:

$arr = array("1"=>"0-200","201-400","401-600","601-800",
   "801-1000","1001-1200","1201-1400","1401-1600","1601-2000");

$max = 10;
$exp =   0;
foreach ($arr as $key=>$value)
      {
         list ($start,$end) = explode("-",$value);
         if($tuoValore >= $start && $tuoValore <= $end )
         {
          $exp = $key;
          break;
         } 
      }//fine foreach ($arr as $key=>$value)
      
      if($exp== 0) 
       $exp = $max;

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
modificato 10 anni fa
X 0 X

si, ma mi deve assumere, valore da 1 a 10...passando per la scala data prima... e poi come tuo valore cosa intendi? devo metterci cosa? e exp=Esperienza?

Grazie

risposto 10 anni fa
Nik
Nik
1
X 0 X

Ciao Nik,

ho modificato seguendo il tuo script iniziale...

Questo script fa sì che vengano assegnati alla variabile $special valori da 1 a 10 a seconda del valore di $rs["Esperienza"] (secondo lo schema che hai postato)...

$arr = array("1"=>"0-200","201-400","401-600","601-800",
"801-1000","1001-1200","1201-1400","1401-1600","1601-2000");

$max = 10;
$special = 0;
foreach ($arr as $key=>$value)
{
list ($start,$end) = explode("-",$value);
if($rs["Esperienza"] >= $start && $rs["Esperienza"] <= $end )
{
 $special = $key;
 break;
} 

}//fine foreach ($arr as $key=>$value)

   
if($exp== 0) 
 $special = $max;

l'ho provato e dovrebbe funzionare...

Provalo, magari assegnando dapprima un valore alla variabile $rs['Esperienza'] ( es $rs['Esperienza'] = 500; )

alla fine stampi il valore di $special e vedi se è corretto...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X
<tr class=tScuro>
  <td width="100">Livello</td>
  <td width="320">
<?
$arr = array("1"=>"0-200","201-400","401-600","601-800",
"801-1000","1001-1200","1201-1400","1401-1600","1601-2000");

$max = 10;
$special = 0;
foreach ($arr as $key=>$value)
{
list ($start,$end) = explode("-",$value);
if($rs["Esperienza"] >= $start && $rs["Esperienza"] <= $end )
{
 $special = $key;
 break;
} 

}//fine foreach ($arr as $key=>$value)

   
if($exp== 0) 
 $special = $max;

       ?>
/10</td>
  </tr>

ecco il pezzo dove ho inserito il codice, ma non funza, alla fine mi da sul server /10 ....

risposto 10 anni fa
Nik
Nik
1
modificato 10 anni fa
X 0 X

prova così:

<tr class=tScuro>
  <td width="100">Livello</td>
  <td width="320">
<?
$arr = array("1"=>"0-200","201-400","401-600","601-800",
"801-1000","1001-1200","1201-1400","1401-1600","1601-2000");

$max = 10;
$rs["Esperienza"] = 500;
$special = 0;
foreach ($arr as $key=>$value)
{
list ($start,$end) = explode("-",$value);
if($rs["Esperienza"] >= $start && $rs["Esperienza"] <= $end )
{
 $special = $key;
 break;
} 

}//fine foreach ($arr as $key=>$value)

   
if($special== 0) 
 $special = $max;

       ?>


<?=$special;?>/10</td>
  </tr>

Visualizzavi  '/10', ma davanti non gli visualizzavi $special...

Inoltre mi sa che ho sbagliato a postarti l'ultimo if, cmq ti ho modificato lo script ed ora dovrebbe funzionare...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

si, ma io ho copèiato il tuo codice, il problema è che mi mette a tutti 3/10 indipendentemente da quanta Esperianza uno abbia.....

risposto 10 anni fa
Nik
Nik
1
X 0 X
si, ma io ho copèiato il tuo codice, il problema è che mi mette a tutti 3/10 indipendentemente da quanta Esperianza uno abbia.....

Per provarlo avevo messo questa riga( guarad all'interno del codice che ti ho postato):

$rs["Esperienza"] = 500;

in cui assegnavo staticamente il valore 500 alla variabile $rs["Esperienza"], quindi era giusto che visualizzasse sempre '3'.

Come ti ho detto, avevo messo quella riga per prova, tu eliminala e dovresti essere a posto...

Fammi sap.

Ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

Grazie mille funziona che è una meraviglia.....

Se per caso io volessi cambiare a ogni livello, un altro campo del db? mi spiego....

Vorrei che al:

 1) livello il MaxMente sia: 20

 2) al secondo 40 e così via....

Lo stesso per un altro valore MaxForza....saresti così gentile da scrivermi come si fa?

risposto 10 anni fa
Nik
Nik
1
X 0 X
Grazie mille funziona che è una meraviglia.....

Di niente... O0

Se per caso io volessi cambiare a ogni livello, un altro campo del db? mi spiego....

Vorrei che al:

 1) livello il MaxMente sia: 20

 2) al secondo 40 e così via....

Lo stesso per un altro valore MaxForza....saresti così gentile da scrivermi come si fa?

Un paio di cose:

1) da dove lo prendi il valore del 'livello'?( via get dall'url, dal Db ???)

2)I dati MaxMente-MaxForza, sono in un Db oppure come nel precedente caso ( $special ) questi dati non risiedono nel Db e bisogna calcolarli dal codice?

Se mi spieghi meglio queste due cose, vediamo cosa si può fare...

ciao

risposto 10 anni fa
Lore
Lore
1
X 0 X

Allora, il livello, lo da il codice che mi hai dato tu, poi, max mente e forza risiedono nel db...

risposto 10 anni fa
Nik
Nik
1
X 0 X
Allora, il livello, lo da il codice che mi hai dato tu, poi, max mente e forza risiedono nel db...

Ok,quindi il livello 'risiederà' nella variabile $special, giusto?

$maxForza = $maxMente = ($special * 20);
/*se $special=1 $maxForza = 1*20 = 20
se $special=2 $maxForza = 2*20 = 40
........
se $special=5 $maxForza = 5*20 = 100
*/

//Poi se devi aggiornare il valore nel DB
$upd = "UPDATE tabella SET maxForza='$maxForza',maxMente='$maxMente'";
mysql_query($upd) or die ("Error: ".mysql_error());

spero di aver capito quello che ti serviva...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

c'è un problema, io voglio che quando in livello ci sia 1 mi metta come MaxForza 20 e per esempio MaxMente 30

se il livello due vorrei mi desse MaxForza 40 e MaxMente 60 e così via fino al 10 livello... questi valori, vorrei fosserro aggiornati ogni qual volta uno cambia di livello.....

risposto 10 anni fa
Nik
Nik
1
X 0 X

c'è un problema, io voglio che quando in livello ci sia 1 mi metta come MaxForza 20 e per esempio MaxMente 30

se il livello due vorrei mi desse MaxForza 40 e MaxMente 60 e così via fino al 10 livello... questi valori, vorrei fosserro aggiornati ogni qual volta uno cambia di livello.....

Se vuoi fare una cosa del genere:

livello1  forza: 20  mente: 30

livello2  forza: 40  mente: 60

livello3  forza: 60  mente: 120

puoi fare una cosa analoga a quella di prima:

$arrMente = array(1=>30,60,120,240...);

$maxForza = ($special*20);
$maxMente = $arrMente[$special];

Se ho capito male l'equazione per calcolare i valori di:

$arrMente = array(1=>30,60,120,240...);

Basta che sostituisci tu i valori che ti servono nell'array, ad esempio:

$arrMente = array(1=>30,60,90,120,150,240...);

mettendo quello che seve a te...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X
$maxForza = $maxMente = ($special * 20);
/*se $special=1 $maxForza = 1*20 = 20
se $special=2 $maxForza = 2*20 = 40
........
se $special=5 $maxForza = 5*20 = 100
*/

//Poi se devi aggiornare il valore nel DB
$upd = "UPDATE tabella SET maxForza='$maxForza',maxMente='$maxMente'";
mysql_query($upd) or die ("Error: ".mysql_error());

ho usato questo, lo messo nella mia pagine prima che i valori MaxMente MaxForza dovessero essere visualizzati, ma mi rispondono 0.....eppure dovrebbero darmi 200 no???(se il livello è 10)

risposto 10 anni fa
Nik
Nik
1
X 0 X
ho usato questo, lo messo nella mia pagine prima che i valori MaxMente MaxForza dovessero essere visualizzati, ma mi rispondono 0.....eppure dovrebbero darmi 200 no???(se il livello è 10)

Sì, in teoria facendo così dovrebbero assumere entrambi il valore 200...

Non è che magari hai messo quel pezzo di codice prima di calcolare il valore di $special?

Cioè,se fai

echo "Livello n°: ".$special;

$maxForza = $maxMente = ($special * 20);

echo "forza: ".$maxForza." mente: ".$maxMente;

che valore ti visualizza?

PS cmq è buona norma che prima di eseguire le query, verificare che siano corrette,quindi prima di fare direttamente da codice:

//Poi se devi aggiornare il valore nel DB
$upd = "UPDATE tabella SET maxForza='$maxForza',maxMente='$maxMente'";
mysql_query($upd) or die ("Error: ".mysql_error());

magari è meglio che stampi la query e solo quando sei sicuro di avere i valori desiderati continui con l'aggiornamento, perchè se dovessi lavorare su dei dati importanti ed andassi ad inserire/aggiornare una mole notevole di record con valori sbagliati, potrebbero insorgere problemi...

ciao

risposto 10 anni fa
Lore
Lore
1
X 0 X

Livello n°: forza: 0 mente: 0 ecco mi dice questo....

risposto 10 anni fa
Nik
Nik
1
X 0 X
Livello n°: forza: 0 mente: 0 ecco mi dice questo....

Non è che magari hai messo quest'ultimo pezzo di codice prima di calcolare $special ??

Quel pezzo di codice va dopo, altrimenti, non essendo valorizzata la variabile special, è giusto che non ti stampi niente, quindi controlla che il blocco per calcolare $special venga PRIMA di quello per calcolare $maxMente e $maxForza...

risposto 10 anni fa
Lore
Lore
1
X 0 X

Ora si, grazie di tutto........se vuoi il mio msn

nicholaszone@hotmail.it

Mille grazie ancora....

risposto 10 anni fa
Nik
Nik
1
X 0 X

Ora si, grazie di tutto........se vuoi il mio msn

nicholaszone@hotmail.it

Mille grazie ancora....

Di niente...

Ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

scusa se rompo ancora....vorrei chiedere una cosa.......io allora in max forza e maxmente mi assegna livello*20......però io ho un dato in in DB che si chiamano Mente e Forza.... io vorrei che qui valori non posssano superare il valore max mente o max forza(visto che sono uguali)

risposto 10 anni fa
Nik
Nik
1
X 0 X
scusa se rompo ancora....vorrei chiedere una cosa.......io allora in max forza e maxmente mi assegna livello*20......però io ho un dato in in DB che si chiamano Mente e Forza.... io vorrei che qui valori non posssano superare il valore max mente o max forza(visto che sono uguali)

Non ho capito niente  :giveup:

Allora,tu in un'altra tabella del DB hai 2 campi Mente e Forza con due valori e non vuoi che

$maxForza e $maxMente che calcoli tramite php superino quei valori, è corretto?

Se è così:

/*estrpoli i valori Mente e Forza dal DB:*/
$mente = "valoreDB";
$forza = "valoreDB";

//e dopo aver calcolato 
$maxForza e $maxMente 
//fai:

if($maxForza > $forza)
 $maxForza = $forza;

if($maxMente > $mente)
 $maxMente = $mente;


/*
Esempio pratico:
valori massimi del DB:
$FORZA = 50;
$MENTE = 40;

Dopo i calcoli:
$maxForza = 60;      [$special = 3 => 3*20 = 60]
$maxMente = 20;     [$special = 3 => 3*20 = 60]

if( $maxForza > $FORZA ) 
 $maxForza = $FORZA =====>$maxForza = 50;

if($maxMente > $MENTE)
 $maxMente = $MENTE; =====> $maxMente = 40;

*/

spero di essere stato chiaro...

PS cmq prima di postare, prova a buttare giù tu un po' di codice....

risposto 10 anni fa
Lore
Lore
1
X 0 X

no, io ho nella stessa tabella 4 campi MaxForza MaxMente e mente e forza....

Io vorrei che forza e mente non superino MaxMente e MaxForza.....

risposto 10 anni fa
Nik
Nik
1
X 0 X

Estrapoli i valori mente e forza, li salvi in 2 variabili, controlli che non siano maggiori di maxMente maxForza, nel caso fossero maggiori, li setti come questi due e lanci l'update di questi 4 campi...

Prova a buttare giù il codice...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X
<? 
/*estrappolo mente e forza*/
$mente = "[$Mente]";
$forza = "[$Forza]"

/*calcolo max forza e max mente*/
$MaxForza = $MaxMente = ($special * 30);

/*aggiorno i dati nel dump di DB*/
$upd = "UPDATE Personaggio SET MaxForza='$MaxForza',MaxMente='$MaxMente'";
mysql_query($upd) or die ("Error: ".mysql_error());

/*se è maggiore li setto in db come massimalli*/
if($maxForza > $forza)
 $maxForza = $forza;

if($maxMente > $mente)
 $maxMente = $mente;

/*riaggiorno il db, mettendo i dati mente e forza giusti*/
$upd = "UPDATE Personaggio SET Mente ='$Mente',Forza='$Forza'";
mysql_query($upd) or die ("Error: ".mysql_error());

/*chiudo*/
?>
risposto 10 anni fa
Nik
Nik
1
modificato 10 anni fa
X 0 X

no, io ho nella stessa tabella 4 campi MaxForza MaxMente e mente e forza....

Io vorrei che forza e mente non superino MaxMente e MaxForza.....

Da come mi hai detto in queto post è un po' il contrario di quello che hai messo nell'ultimo post...

Da quanto ho capito,come ho detto prima:

"Estrapoli i valori mente e forza, li salvi in 2 variabili, controlli che non siano maggiori di maxMente maxForza, nel caso fossero maggiori, li setti come questi due e lanci l'update di questi 4 campi..."

Prova a buttare giù il codice da 0 prendendo come spunto quello che ti ho scritto...

Ora sto uscendo e non so quando riuscirò a leggerlo, cmq tu fai diverse prove, non dovrebbe essere difficile...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

ok

risposto 10 anni fa
Nik
Nik
1
X 0 X

Sono tornato ora...

Allora tornando al tuo problema, prova così:

<? 
/*estrappolo mente e forza*/
$res = mysql_query("SELECT Mente,Forza FROM Personaggio") or die("Error: ".mysql_error());
$row = mysql_fetch_array($res);
$mente = $row['mente'];
$forza = $row['forza'];

/*calcolo max forza e max mente*/
$MaxForza = $MaxMente = ($special * 30);

if($mente > $maxMente)
 $mente = $maxMente;

if($forza > $maxForza)
 $forza = $maxForza;

/*aggiorno i dati nel dump di DB*/
$upd = "UPDATE Personaggio SET MaxForza='$MaxForza',MaxMente='$MaxMente',
Mente ='$mente',Forza='$forza'";
mysql_query($upd) or die ("Error: ".mysql_error());
?>

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

si, il problema, è che io ho(essendo a livello 10) max forza e max mente a 300.....

Soltanto che quando visualizzo uno che ha 30 anche lui assume valore di 300??? poi se aggiorno, torna a 30 come è giusto che sia, ma non vorrei che andasse a mio discapito....

risposto 10 anni fa
Nik
Nik
1
X 0 X

si, il problema, è che io ho(essendo a livello 10) max forza e max mente a 300.....

Soltanto che quando visualizzo uno che ha 30 anche lui assume valore di 300??? poi se aggiorno, torna a 30 come è giusto che sia, ma non vorrei che andasse a mio discapito....

Se ho capito bene è un problema di refresh, allora, quando lanci l'update, fai ricarica la pagina...

Ex:

$upd = "UPDATE.....";
if(mysql_query(......))
{
  header("Location: pagina_da_ricaricare");
  exit();
}

o cmq una cosa del genere, occhio però che prima dell'header non devi madnare nex output (ech,print, codice html ecc...)

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

Nel tuo codice, non ci ho capito molto.....cmq, non so perchè, ma mettendo, il tuo codice di prima,

<?

/*estrappolo mente e forza*/

$res = mysql_query("SELECT Mente,Forza FROM Personaggio") or die("Error: ".mysql_error());

$row = mysql_fetch_array($res);

$mente = $row['mente'];

$forza = $row['forza'];

/*calcolo max forza e max mente*/

$MaxForza = $MaxMente = ($special * 30);

if($mente > $maxMente)

 $mente = $maxMente;

if($forza > $maxForza)

 $forza = $maxForza;

/*aggiorno i dati nel dump di DB*/

$upd = "UPDATE Personaggio SET MaxForza='$MaxForza',MaxMente='$MaxMente',

Mente ='$mente',Forza='$forza'";

mysql_query($upd) or die ("Error: ".mysql_error());

?>

ecco, mi da sempre valore di mente e forza = 0??O.o

risposto 10 anni fa
Nik
Nik
1
X 0 X

prova così:

.....
if($mente > $MaxMente)
 $mente = $MaxMente;

if($forza > $MaxForza)
 $forza = $MaxForza;
.....

CMQ se le cose non vanno, prova a fare un po' di debug da te,ok?

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

ora mi da il valore, ma se mente supera il MaxMente,  mente non mi assume valore di MaxMente......

risposto 10 anni fa
Nik
Nik
1
X 0 X
ora mi da il valore, ma se mente supera il MaxMente,  mente non mi assume valore di MaxMente......

Prova a dare un po' di debug!!!

Che ne so, proav a controllare il valore $MaxMente, $mente, controlla se entra nell' if($mente > $MaxMente)

o cose del genere per vedere dove può essere l'errore...

ciao

risposto 10 anni fa
Lore
Lore
1
X 0 X

Ok, li mi arrangio io, mi potresti spiegare meglio il codice del refresh di prima per cortesia??? scusa se ti rompo^ ^ ....

risposto 10 anni fa
Nik
Nik
1
X 0 X

Ti posto il ink del manuale ufficiale:

http://it2.php.net/manual/it/function.header.php

Questo spiega gli headers, ci sono anche gli esempi per il rerindirizzamento header("Location: .....");

Ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

gRAZIE MILLE

risposto 10 anni fa
Nik
Nik
1
X 0 X

ciao, io mi sono letto il tuo link, ma ahimè non ci ho capito nulla....se io metto il tuo codice

<?

$upd = "UPDATE.....";

if(mysql_query(......))

{

  header("Location: pagina_da_ricaricare");

  exit();

}

?>

cosa devo cambiare?

pagina_da_ricaricare= scheda.php      giusto?????

e basta???

risposto 10 anni fa
Nik
Nik
1
X 0 X

ciao, io mi sono letto il tuo link, ma ahimè non ci ho capito nulla....se io metto il tuo codice

<?

$upd = "UPDATE.....";

if(mysql_query(......))

{

  header("Location: pagina_da_ricaricare");

  exit();

}

?>

cosa devo cambiare?

pagina_da_ricaricare= scheda.php      giusto?????

e basta???

pagina_da_ricaricare = pagina che tu dovrai andare a ricaricare, non so come l'hai chiamata...

CMQ una cosa, non prenderla male, ma dovresti provare a fare quaclosa da solo, se non capisci cosa c'è scritto nel link, puoi fare una ricerca sul forum, su internet, su qualche manuale prima di postare...

Conta che sicuramente prima di te qualcuno avrà già avuto quel problema, quindi ti consiglio, anche per un tornaconto personale di ceracre di risolvere da solo...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

vABBè, AVEVO INIZIATO IL DISCORSO CONTE.....CMQ GRAZIE, TI CHIEDO L'ULTIMA COSA, IO METTO SOLO scheda o scheda.php(il file è in php e si chiama scheda) e poi non devo cambiare più nulla? e come mi hai detto tu lo metto all'inizio, prima di tutto.....

risposto 10 anni fa
Nik
Nik
1
X 0 X

Se devi ricaricare la pagina scheda.php fai:

header("Location: scheda.php");

exit;

e lo metti dove devi lanciare il refresh, se è ad inizio pagina lo metti lì, altrimenti nella posizione corretta...

Io ti ho detto che dev'essere messo priam di qualsiasi outpu, altrimenti da errore, se è imprescindibile il fatto che ci debbano essere output prima dell'header, risolvi mettendo ob_start(); in testa alla pagina...

vABBè, AVEVO INIZIATO IL DISCORSO CONTE.....

CMQ il discorso che ti facevo io non era sul fatto di aiutarti o meno, quello non c'è problema,il fatto è che prima di postare potresti fare almeno delle prove per vedere se riesci da solo...

Anche ora, avresti potuto provare, se dava errore voleva dire che c'erano problemi, o avresti potuto fare una ricerca su google ad esempio:

http://www.google.it/search?hl=it&q=header%28%22Location%3A%22&btnG=Cerca&meta=

o all'interno del forum...

E' quello che ti voglio dire, di provare da solo prima di postare a raffica...uno perchè dopo un po' qualcuno potrebbe non risponderti +( come hai visto non è il mio caso) due perchè la prossima volta che ti ritrovi a fare una cosa del genere, dato che è uno script che ti è stato fatto, ti troveresti ad avere gli stessi problemi...

Non ti incazzare, era solo una considerazione...

Ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

ok, ciao  e grazie mille di tutto

risposto 10 anni fa
Nik
Nik
1
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda