Den skal finde et random tal mellem 1-49. Så er MySQL-tabellen "online_users" fyldt med nogle rækker, hvor felt_id indeholder et tal. Det samme med MySQL-tabellen "locked_field", hvor felt_id et et tal.
Så skal den tjekke om det random'e tal som var mellem 1-49 er "optaget" i tabellerne "online_users" og "locked_field" !
du kan så gøre $tal = rand(1,49); // Finder et vilkårligt tal mellem 1 og 49, begge inclucive. $query_users = "SELECT * FROM online_users WHERE felt_id = $tal "; $query_locked = "SELECT * FROM locked_field WHERE felt_id = $tal ";
$result_users = mysql_query( $query_users ); if( !$result_users ) { echo "Databasenfejl"; }elseif( mysql_num_rows( $result_users ) > 0 ) { echo "Tallet $tal findes i tabelen online_users"; }else echo "Tallet $tal findes ikke i online_users";
$result_locked = mysql_query( $query_locked ); if( !$result_locked ) { echo "Databasenfejl"; }elseif( mysql_num_rows( $result_locked ) > 0 ) { echo "Tallet $tal findes i tabelen locked_field"; }else echo "Tallet $tal findes ikke i locked_field";
Det kan gøre med en while løkke, men så kommer du nok til at forespørge databasen en del gange. En anden idé vil måske være at finde ud af hvilke tal som findes i databasen og så derefter finde et tilfældigt tal som ikke er mellem dem.
$query_users = "SELECT felt_id FROM online_users "; $query_locked = "SELECT felt_id FROM locked_field ";
Det passer nu altså ikke helt hvad det er du siger, den kode jeg viste dig sidst finder et tal som ikke er i databasen.
Pas på dem at få en function til at kalde sig selv, når du ikke har styr over hvor mange gange den vil kalde sig selv. Det kan give dig resourseproblemer.
ja det frygtede jeg.. men kan du ikke forkalre din kode bedre så og bruge tuborg rammer i stedet for ? synes det er lidt rodet og forstår ikke en meter af det...!?
Jo det kan jeg da godt. Grunden til at jeg ikke bruger { og } i while-løkker er at når jeg kun har en linie kode, så behøver jeg det ikke. Men det ændre jeg lidt på så. :-)
$query_users = "SELECT felt_id FROM online_users "; $query_locked = "SELECT felt_id FROM locked_field ";
// Finder de tal som er i tablerne $result_users = mysql_query( $query_users ); $result_locked = mysql_query( $query_locked );
// Ligger tallene fra online_users i et array while( $row = mysql_fetch_assoc($result_users)) { $userno[] = $row['felt_id']; }
// Ligger tallene fra Locked_field i et array while( $row = mysql_fetch_assoc($result_locked)) { $lockedno[] = $row['felt_id']; }
// Laver et tilfældigt tal $tal = rand(1,49);
// Sålænge $tal er i et eller begge array kører while-løkken, som bare finder et // nyt tilfældigt tal. Whileløkken stopper når et tal, som ikke er en del af de // to arrays er fundet. while( !in_array($tal, $userno) && !in_array($tal,$lockedno) ) { $tal = rand(1,49); }
// Udskriver det fundne tal echo "Tallet $tal findes ikke i tabellerne";
Håber du forstå det lidt bedre nu, ellers bare spørg.
Jo det er hele ideen med while. Men jeg har lige lavet lidt forkert kan jeg se. Typisk mig. Ret while til: while( in_array($tal, $userno) || in_array($tal,$lockedno) ) { $tal = rand(1,49); }
Jeg fik lige bytte rundt på sandt og falsk, lidt uheldigt.
Sålænge in_array($tal, $userno) && in_array($tal,$lockedno) er sandt, dvs $tal er i en af de to arrays, så kører while-løkken forfra. Den tjekker $tal hver gang indtil $tal har en værdi som gør at in_array($tal, $userno) || in_array($tal,$lockedno) er falsk, så stopper while-løkken og koden fortsætter.
for at gøre det kort, gør den følgende: tjekker om in_array($tal, $userno) || in_array($tal,$lockedno) er sandt hvis, laver den et nyt tal. tjekker om in_array($tal, $userno) || in_array($tal,$lockedno) er sandt hvis, laver den et nyt tal. og sådan fortætter den indtil in_array($tal, $userno) || in_array($tal,$lockedno) er falsk.
$query_users = "SELECT felt_id FROM online_users "; $query_locked = "SELECT felt_id FROM locked_field ";
// Finder de tal som er i tablerne $result_users = mysql_query( $query_users ); $result_locked = mysql_query( $query_locked );
// Ligger tallene fra online_users i et array while( $row = mysql_fetch_assoc($result_users)) { $userno[] = $row['felt_id']; }
// Ligger tallene fra Locked_field i et array while( $row = mysql_fetch_assoc($result_locked)) { $lockedno[] = $row['felt_id']; }
// Laver et tilfældigt tal $tal = rand(1,49);
// Sålænge $tal er i et eller begge array kører while-løkken, som bare finder et // nyt tilfældigt tal. Whileløkken stopper når et tal, som ikke er en del af de // to arrays er fundet. while( in_array($tal, $userno) || in_array($tal,$lockedno) ) { $tal = rand(1,49); }
// Udskriver det fundne tal echo "Tallet $tal findes ikke i tabellerne";
Jeg har lige testet denne kode, dog med nogle fiktive tal i de to arrays, men det virker helt fint hos mig
Jeg prøvede med følgende kode: <?php $userno = array(1,2,3,4,5,9,46,23,36,27); $lockedno = array(6,7,8,10,11,12,25,27,17,15,31,34,39,49,44);
$tal = rand(1,49);
// Sålænge $tal er i et eller begge array kører while-løkken, som bare finder et // nyt tilfældigt tal. Whileløkken stopper når et tal, som ikke er en del af de // to arrays er fundet. while( in_array($tal, $userno) || in_array($tal,$lockedno) ) { echo "Tallet $tal findes i tabellerne"; $tal = rand(1,49); }
// Udskriver det fundne tal echo "Tallet $tal findes ikke i tabellerne"; ?> og fik ud: Tallet 49 findes i tabellerne Tallet 46 findes i tabellerne Tallet 28 findes ikke i tabellerne
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.