Buonasera.
Questo il mio problema.
Ho una tabella nella quale ogni record contiene dati relativi ad un CD musicale (titolo, autore, ecc.). Tra questi è presente anche il valore booleano "attivo".
Tramite apposito codice vengono contati i record presenti nella tabella e viene scelto un numero casuale (random_call).
Dal momento che il record selezionato potrebbe essere non attivo (ovvero attivo==FALSE) faccio una verifica (random_cd_check).
Nel caso in cui l'esito sia positivo, si procede con l'esecuzione del codice, diversamente viene ripetuta la procedura dall'inizio.
Questo il codice:
function random_call($db){
$query_random_cd = "SELECT * FROM compactdisc";
$ris_random_cd = mysql_query($query_random_cd,$db) or die("Errore nella query cd random: ".mysql_error());
$number=mysql_num_rows($ris_random_cd);
$rand_number = mt_rand (1,$number);
$numerello = random_cd_check($rand_number,$db);
echo "numero fortunello funzione random ".$numerello."\n";
return $numerello;
}
//
function random_cd_check($rand_number,$db){
$query_check_random_cd = "SELECT * FROM compactdisc WHERE compactdisc.id='$rand_number' AND
compactdisc.attivo=TRUE";
$ris_check_random_cd = mysql_query($query_check_random_cd,$db) or die("Errore nella query check cd random:
".mysql_error());
$check_random_cd_total=mysql_num_rows($ris_check_random_cd);
if ($check_random_cd_total>=1){
echo "cd attivo!\n";
echo "numero fortunello funzione check ".$rand_number."\n";
return $rand_number;
}else{
echo "cd non attivo!\n";
random_call($db);
}
}
//
$numerello = random_call($db);
echo "numero fortunello ".$numerello."\n";
Dopo una serie di modifiche e tentativi, ho dedotto che il problema risieda in queste righe:
$numerello = random_cd_check($rand_number,$db);
echo "numero fortunello funzione random ".$numerello."\n";
return $numerello;
Questo echo, infatti, non visualizza solo $numerello ricevuto dalla chiamata della funzione random_cd_check (quindi quello corrispondente al record attivo) bensì viene ripetuto per ogni query effettuata, anche quelle che hanno avuto esito negativo.
Se prima del record attivo ne sono stati selezionati casualmente 12 non attivi, il comando echo verrà ripetuto 12 volte anche se solo la prima visualizzazione avrà un valore (ovvero quello ricevuto dalla funzione random_cd_check) poichè gli echo vengono visualizzati in ordine inverso.
Proprio per questo return $numerello non restituisce assolutamente nulla poichè darà l'esito della prima query (il cui esito, nei test che sto effettuando, è quasi sempre negativo poichè tra i record presenti solo uno è attivo, proprio per verificare l'efficienza del codice).
Mi rendo conto di non aver esposto la faccenda nel più chiaro dei modi, mi auguro tuttavia qualcuno riesca a capirci qualcosa e sia in grado di darmi una mano.
Grazie e buona serata.