problema con do while

  • Creatore Discussione Creatore Discussione Valshy
  • Data di inizio Data di inizio

Valshy

Nuovo Utente
14 Mag 2011
23
0
0
Ciao a tutti, vi scrivo per chiedervi aiuto perchè c'è uno script che mi sta facendo impazzire...


Ho una tabella che si chiama codice_utente che è formata da: id ( chiave primaria), utente e codice.
Ho una pagina che dovrebbe generare un codice utente che deve essere diverso da tutti gli altri codici già presenti in tabella.
Ho strutturato lo script in questo modo

$azzeccato=0;

do
{
$numero=(rand(0,9) . rand(0,9) . rand(0,9) . rand(0,9) . rand(0,9))

dopo aver generato il numero casuale controllo la tabella

select count (id) as trovati from codice_utente where codice = $numero

if ($trovati == 0) {$azzeccato = 1} elseif ($trovati > 0) {$azzeccato = 0}

} while ($azzeccato == 1);

In sostanza il codice genera una stringa di numeri casuali finchè non ne trova una non presente nel database... il problema è che quando tento di eseguire lo script mi dice che si è bloccato xke ci ha impiegato troppo x eseguire lo script..qualcuno mi sa suggerire un modo per farlo funzionare?
 
ciao
se vuoi aumentare il tempo di vita dello script metti la seguente istruzione

set_time_limit(tempo_in_secondi);
es.
set_time_limit(240);

poi guarda se puoi modificare lo script per renderlo piu rapido
 
Il problema è che questa tabella è completamente vuota al momento, quindi teoricamente lo script dovrebbe ripetersi una volta sola. Non vorrei che vada in loop per un problema che non riesco a capire...Non è che c0'è un altro modo x fare la stessa cosa?
 
Io userei una funzione ricorsiva:
PHP:
function getId()
{
    $id = rand(0, 9999);

    $sql = 'SELECT * FROM tabella WHERE id = ' . $id;
    $query = mysql_query($sql) or die(mysql_error());

    if (mysql_num_rows($sql) == 0) {
        return $id;
    }

    return getId();
}
 
ciao
oltre a quello che ha postato alex
per provare ad accelerare prova a sostituire la sequenza di rand e modificare il do while in questo modo

PHP:
<?php
//..........
do{
	$numero=(string)rand(100000,999999);
	$numero= substr($numero, 1, 5);// toglie la prima cifra riducendo la stringa a 5 caratteri che possono iniziare anche con 0
	$trovati=mysql_num_rows(mysql_query("SELECT id FROM codice_utente WHERE codice='$numero'"));
	//eventualmente questo
	if($trovati==0){break;}
}while($trovati > 0)
echo $numero; //per vedere se funzia
//...........
?>
 

Discussioni simili