PHP Problema php

Stato
Discussione chiusa ad ulteriori risposte.

-Luigi23-

Utente Electrum
13 Giugno 2012
157
23
12
107
Ultima modifica:
Ciao a tutti, ho un problema con delle variabili random in php...
Allora per non fare un giro di parole vi inserisco il codice:
PHP:
// Dichiarazioni variabili
$num1= rand(1, 10); 
$num2= rand(1, 10);
$num3= $num1 + $num2;

// Altro codice usato per ricavare i dati dal form
$numero = mysql_real_escape_string($_POST['verifica']);

// Verifica della risposta
if($numero == $num3) { 

echo "<p>Giusto!</p>";

} else {
echo "<p>Sbagliato! Ritenta.</p>"
}
Il problema che sono riuscito a riscontrare è quello che nella dichiarazione delle variabili $num1 e $num2 è tutto apposto, ma poi quando faccio la somma nella variabile $num3 viene rieffettuata l'estrazione random nelle variabili da sommare...
Come faccio a non far succedere questo? Aiutatemi pls...
 
Allora,
Il problema è che $num1 e $num2 cambiano ogni volta al caricamento della pagina, perché te hai specificato che queste variabili siano il risultato della funzione rand(che appunto viene eseguita al caricamento della pagina).

Lo script com'è ora fa questo: Dopo che l'utente invia il form, viene generato un numero random da 2 a 20, poi si controlla se il campo verifica coincida a questo numero casuale e in ambi i casi fa apparire un messaggio.

Piccoli accorgimenti,

scrivere $num1 = rand(1,10); $num2 = rand(1,10); $num3 = $num1 + $num2;
equivale a scrivere $num = rand(2,20);


$numero = mysql_real_escape_string($_POST['verifica']);
Qui la funzione mysql_real_escape_string è usata in malo modo, dato che non c'è nessun database in gioco(e quindi rischi di sql injection). La funzione più appropriata è htmlspecialchars();


Se non mi specifichi cosa vuoi che faccia il tuo script, non posso aiutarti. Quindi per favore fallo <,<
 
Ultima modifica:
Allora,
Il problema è che $num1 e $num2 cambiano ogni volta al caricamento della pagina, perché te hai specificato che queste variabili siano il risultato della funzione rand(che appunto viene eseguita al caricamento della pagina).

Lo script com'è ora fa questo: Dopo che l'utente invia il form, viene generato un numero random da 2 a 20, poi si controlla se il campo verifica coincida a questo numero casuale e in ambi i casi fa apparire un messaggio.

Piccoli accorgimenti,

scrivere $num1 = rand(1,10); $num2 = rand(1,10); $num3 = $num1 + $num2;
equivale a scrivere $num = rand(2,20);


$numero = mysql_real_escape_string($_POST['verifica']);
Qui la funzione mysql_real_escape_string è usata in malo modo, dato che non c'è nessun database in gioco(e quindi rischi di sql injection). La funzione più appropriata è htmlspecialchars();


Se non mi specifichi cosa vuoi che faccia il tuo script, non posso aiutarti. Quindi per favore fallo <,<
No i dati vengo immessi in un database ne ho estrapolato solo i codici importanti, voglio che l'utente debba eseguire una somma di due numeri casuali e quindi dare la risposta e verificare risposta se è esatta o no...
Cioè alla fine mi serve per verificare se è un robot(inteso come software che si autoiscrive) o no.
Non so se hai capito... XD
 
Beh allora prima di tutto, anche se i dati vengono immessi nel db, devi filtrare con htmlspecialchars per evitare xss injection. Comunque è abbastanza facile quello che vuoi fare, basta usare le sessioni.

All'inizio del tuo file ,dov'è presente il form html, scrivi:
Codice:
session_start();
$num1 = rand(1,10);
$num2 = rand(1,10);
$_SESSION['num1'] = $num1;
$_SESSION['num2'] = $num2;

Poi in qualche parte sopra il field dove l'utente dovrà mettere il risultato fai:
Codice:
<?php echo $num1 . "+". $num2;?>

e infine nel file che processerà il form, al posto di scrivere:
Codice:
$num1 = rand(1,10);
$num2 = rand(1,10);
scrivi
Codice:
$num1 = $_SESSION['num1'];
$num2 = $_SESSION['num2'];
(devi mettere session_start() all'inizio del file)
e poi per il resto vedi tu cosa devi fare
 
MrWeb ha gia detto tutto, perche i valori corrispondano devi avviare delle sessioni o cookie sennò non lo indovinerai mai xD
 
Qualche errore o qualcosa?
(Hai messo session_start(); all'inizio dei due file?)

PS: mi sono scordato di dirti di unsettare la sessione alla fine del file di processo (session_unset();)
 
allora, ho capito che quando invio i dati dal form la pagina si aggiorna quindi vengono ricaricate le variabili ma con numeri diversi! se volote posso postare l'intero codice sorgente... XD
 
o.o nel file che processa basta che cancelli le prime 3 righe e al posto di quelle scrivi
Codice:
session_start();
$num1 = $_SESSION['num1'];
$num2 = $_SESSION['num2'];
$num3 = $num1 + $num2;

e nel form html scrivi
Codice:
<?php
session_start();
$num1 = rand(1,10);
$num2 = rand(1,10);
$_SESSION['num1'] = $num1;
$_SESSION['num2'] = $num2;
?>
<form action="blabla.php" method="post">
<?php echo $num3; ?><br>
<input type="text" name="verifica">
<input type="submit" value="Invia">
</form>
un qualcosa di simile(non ce nessun filtro o robe aggiuntive, è solo per farti capire
 
Ho risolto, non c'era nessuno errore solo che dovevo dividere le pagine del form e quella in cui l'elaborava...

- - - Updated - - -

Grazie per tutto, Grazie...
 
Stato
Discussione chiusa ad ulteriori risposte.