Newsgroup: it.comp.www.php
Titolo: numero casuale rigenerato identico

ogni volta che un utente entra nell'applicazione, genero un numero casuale:
   mt_srand((double)microtime*100000);
   $Urc=mt_rand();
Il problema è che in realtà anche per l'utente successivo il numero resta lo
stesso... oppure $Urc non viene riassegnata.
in pratica, se la pagina viene ri-eseguita il numero resta lo stesso, non
cambia come vorrei che facesse...
Mi sono spiegato?
Come posso fare?
Grazie, Cristiano.


Guarda, non te lo dico ;-)
Ma ti do un consiglio, prova a mettere nel php.ini
   error_reporting=E_ALL
e vedrai subito l'errore.
Se non risolvi posti di nuovo con l'errore generato.
OK?

non mi dà nessun errore, semplicemente rigenera lo stesso numero...

 non mi dà nessun errore, semplicemente rigenera lo stesso numero...
se metti error_reporting(E_ALL) non ti da nessun errore?
Dai...

 wrote in message
news:nEEL8.10353$K4.2...@twister2.libero.it...

L'errore sara':
   Use of undefined constant microtime ...
error_reporting puo' salvare 598872 ore di lavoro. Fidatevi.
Boh, non capisco l'ostilita' di NON metterlo sempre a E_ALL
Non dico a te, ma in genere noto che non si usa mai il massimo
dei warning, generando veramente tanti errori difficili da trovare,
se volete creare dei sistemi _seri_ non potete a meno. Se vedo un
collaboratore a mettere su un sistema senza lo DENUNCIO per SABOTAGGIO.
;-)

ho scritto questo codice, come esempio.
 si deve fermare quando il primo numero generato ($Z) è uguale al successivo
in sequenza($y)
in realtà però genera la stessa sequenza sempre, senza dare errori.
se commento la linea con mt_srand(()....)
ed invece tolgo il commento a rand()
funziona benissimo.
<?
  mt_srand((double)microtime*100000000);
  #rand();
  $Z=mt_rand(3,80);
  echo ("$Z \n");
  while ($y!=$Z)
   {
    $y=mt_rand(3,80);
    if ($y==$Z)
     {
      echo "$y ";
     }
    else
     {
      echo "$y ";
     }
   }
?>

 funziona benissimo.
Testa dura eh?
Allora, microtime come scritto da te e' una costante
(con error_reporting(E_ALL) ti avrebbe detto che cosa succede).
Mancano le parentesi:
  mt_srand((double)microtime()*100000000);
                            ^^

moolto dura.
ok, grazie, adesso funziona
la riga in questione del php.ini (attenzione perň: per ora lavoro sotto win)
č la seguente:
error_reporting = E_ALL & ~E_NOTICE
dovrebbe andare bene, no?
Grazie, Cristiano

 wrote in message
news:5aFL8.10462$K4.2...@twister2.libero.it...

si e no...
meglio:
  error_reporting = E_ALL
e cosi finalmente si vedono tutti gli errori
silenziosi che possono creare GRAVI problemi (come l'omessa del tuo
microtime)
esempio di un errore grave (molto teorico):
function checkPassword() {
  global $user; // cattivo stile cmq...
  if ($user==....)
[...]
  return 0; // return 0 on success
}
if (!checkPassword)
{
    echo "access granted, thank you";
}
Testando ti darebbe sempre access granted. Con error_reporting E_ALL (quindi
con il E_NOTICE) ti accorgi subito. Magari ti dimentichi di testare con una
password sbagliata, e track: exploit totale.
Questo e' un caso estremo, ma ci sono dei casi piu' sottili.

stesso... 
Ovvero 1898087491? :-)
Leonardo using undefined constant
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.