Avatar billede spike. Nybegynder
04. maj 2003 - 19:36 Der er 8 kommentarer og
1 løsning

Roll script, lidt mere advanceret..

Jeg har et roll script (som ikke virker):
                elseif(eregi("^!roll", $msg)){
                $db = mysql_connect("localhost", "root" , "");
              mysql_select_db("botdb", $db);
              $foresps = mysql_query("SELECT * FROM roll order by 'id' desc limit 0,1");
              while($datu = mysql_fetch_array($foresps))
              {
                $numb = $datu[0];¨
                $winnum = rand(1, $numb);
                  }
              $db = mysql_connect("localhost", "root" , "");
              mysql_select_db("botdb", $db);
              $foresp = mysql_query("SELECT * FROM roll where id = '$winnum'");
              while($data = mysql_fetch_array($foresp))
                {
                    GuildMessage($color["lgrey"] . ":: ". $color["lblue"]. "The winning number was ". $color["blue"]. $winnum . $color["lblue"].". Winner: " . $color["blue"].$data[1] .$color["lblue"]. "! Grats! (The list was dispanded)");
                $insertSQL = "TRUNCATE TABLE roll";
                mysql_query($insertSQL); 

                }

              }


Det der sker er:
Jeg har en tabel folk bliver added til:
[id] [name]
1    test
2    test2
3    test3


[id] er auto_increment.

Det der sker er at den først finder hvor mange der er i listen og så roller den fra 1, (max nummer) hvor den så finder et tal. Den person hvor id = det tal vinder så. Det virker bare ikke.. hvis der er nogen der kender en smartere (der er jo altid en eller anden smart php funktion :) ville det være rart :)

Jeg har prøvet at få det her til at virke, men jeg har ikke kunne finde ud af det, og scriptet bliver bare mere og mere uoverskueligt og hullet :)
Avatar billede spike. Nybegynder
04. maj 2003 - 19:37 #1
Som man kan se connecter jeg 2 gange til db'en. Første gang finder den hvor mange der er i databasen. anden gang finder den personen med vinder id'en.
Avatar billede jakoba Nybegynder
04. maj 2003 - 19:53 #2
Du behøver kun at connecte igen hvis du specifikt har lukket din connection med
  mysql_close( $db );
hvis ikke selv lukker forbliver din connection åben indlit scriptet slutter.

Men det skulle nu heller ikke skade noget.

hold ORDEN i dine indrykninger. Det er fristende ikke at regulere når man 'lige skal prøve en rettelse' men den eneste det går ud over er dig selv.

er du sikker på der ikke er blevet slettet nogen rækker fra tabellen? det ville give huller i rækkefølgen af id værdier.

nedenstående skulle virke selvom der er huller i rækkefølgen:

          elseif(eregi("^!roll", $msg)) {
              $db = mysql_connect("localhost", "root" , "");
              mysql_select_db("botdb", $db);

              $foresps = mysql_query("
                  SELECT COUNT(*)
                  FROM roll
              ");  // få antallet af rækker
              $datu = mysql_fetch_row($foresps));    // der er kun een
              $numb = $datu[0];¨
              $winnum = rand(0, $numb-1);            // tilfældigt tal 

              $foresp = mysql_query("
                  SELECT *
                  FROM roll
                  LIMIT $winnum,1
              ");                                    // returnerer række nummer $winnum

              $data = mysql_fetch_array($foresp);

              GuildMessage($color["lgrey"] . ":: ". $color["lblue"]. "The winning number was ". $color["blue"]. $winnum . $color["lblue"].". Winner: " . $color["blue"].$data[1] .$color["lblue"]. "! Grats! (The list was dispanded)");

              $insertSQL = "TRUNCATE TABLE roll";    // Hvad gør du her ?
              mysql_query($insertSQL);

          }

mvh JakobA
Avatar billede jakoba Nybegynder
04. maj 2003 - 19:59 #3
det var et svar.
Avatar billede spike. Nybegynder
04. maj 2003 - 20:03 #4
$datu = mysql_fetch_row($foresps));    // der er kun een
skal lige være
$datu = mysql_fetch_row($foresps);    // der er kun een

tester det nu. Og tag for de gode tips :)
Avatar billede spike. Nybegynder
04. maj 2003 - 20:03 #5
*tak =/
Avatar billede spike. Nybegynder
04. maj 2003 - 20:07 #6
TRUNCATE TABLE roll
Sletter alle indtastninger i tabellen og sætter id til at være 0 (auto_increment)
Avatar billede spike. Nybegynder
04. maj 2003 - 20:10 #7
<?

                      $db = mysql_connect("localhost", "root" , "");
                      mysql_select_db("botdb", $db);
     
                      $foresps = mysql_query("SELECT COUNT(*)FROM roll");  // få antallet af rækker
                      $data = mysql_fetch_row($foresps);    // der er kun een
                      $antal = $data[0];¨
                      $winnum = rand(0, $antal-1);            // tilfældigt tal 
     
                      $foresp = mysql_query("SELECT * FROM roll LIMIT $winnum,1");                                    // returnerer række nummer $winnum
   
                      $data = mysql_fetch_array($foresp);
   
                          GuildMessage($color["lgrey"] . ":: ". $color["lblue"]. "The winning number was ". $color["blue"]. $winnum . $color["lblue"].". Winner: " . $color["blue"].$data[1] .$color["lblue"]. "! Grats! (The list was dispanded)");
   
                      $insertSQL = "TRUNCATE TABLE roll";                      mysql_query($insertSQL);

?>


Parse error: parse error, unexpected T_VARIABLE in c:\phpweb\test.php on line 9
og linie 9:                       $winnum = rand(0, $antal-1);            // tilfældigt tal 

Jeg fik det samme problem før også.
Avatar billede jakoba Nybegynder
04. maj 2003 - 20:27 #8
kik på linien ovenover: forenden efter ; står der '¨'  det skal væk.
Avatar billede spike. Nybegynder
04. maj 2003 - 20:47 #9
Ah ja, den var svær at se i 1600x1200 i ultra edit :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester