Avatar billede dj-meisner Nybegynder
19. juli 2005 - 16:49 Der er 38 kommentarer og
1 løsning

Finde et random tal mellem 1-57

Nu har jeg dette.
<?php
$tallene = 57;
$random = mt_rand(1,$tallene);
print $random;
?>

men den skal først tjekke om det  randome tal er i tabellen "brugere" med "feltid"


altså
i min tabel brugere har jeg "feltid" som er det felt de står på, hvordan laver jeg så sådan den laver en random funktion fra 1-57 hvor den ikke tager dem med i tabellen "brugere" plz hjælp!!!
Avatar billede nielle Nybegynder
19. juli 2005 - 17:02 #1
Måske sådan her:

SELECT feltid FROM brugere WHERE feltid<=57 ORDER BY rand() LIMIT 1
Avatar billede hmortensen Nybegynder
19. juli 2005 - 17:07 #2
Jeg forstår det som at tallet IKKE må være i bruger tabellen ?
Avatar billede nielle Nybegynder
19. juli 2005 - 17:15 #3
Det har du jo nok ret i. Jamen så måske med denne her:

<?php
$tallene = 57;

$fundet = false;
do
{
    $random = mt_rand(1, $tallene);

    $SQL = "SELECT count(*) AS antal FROM brugere WHERE feltid=$random";
    $result = mysql_query($SQL);
    $row = mysql_fetch_assoc($result);

    $fundet = ($row["antal"] == 0) ? false : true;
}
while ($fundet);

print $random;
?>
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 17:30 #4
takker, kan du så fortælle mig, hvis jeg har fx.
$left = array();
$top = array();

$left[0] = "200";
$left[1] = "300";

$top[0] == "0";
$top[1] == "100";

?>

Hvordan laver jeg så sådan de tjekker om de er optaget i "brugere" ved kolonnen "left" og "top" ?
Avatar billede nielle Nybegynder
19. juli 2005 - 17:38 #5
Tjekker om et af tallene i arrayet $left er i tabellen:

$SQL = "SELECT count(*) AS antal FROM brugere WHERE left IN (" . implode(", ", $left) . ")"
$result = mysql_query($SQL);
$row = mysql_fetch_assoc($result);
$fundet = ($row["antal"] > 0) ? true : false;

Tjekker om et af tallene i arrayet $left *eller* et af tallene i arryet $top er i tabellen:

$SQL = "SELECT count(*) AS antal FROM brugere WHERE left IN (" . implode(", ", $left) . ") OR top IN (" . implode(", ", $top) . ")"
$result = mysql_query($SQL);
$row = mysql_fetch_assoc($result);
$fundet = ($row["antal"] > 0) ? true : false;

Tjekker om et af tallene i arrayet $left *og* et af tallene i arryet $top er i tabellen:

$SQL = "SELECT count(*) AS antal FROM brugere WHERE left IN (" . implode(", ", $left) . ") AND top IN (" . implode(", ", $top) . ")"
$result = mysql_query($SQL);
$row = mysql_fetch_assoc($result);
$fundet = ($row["antal"] > 0) ? true : false;
Avatar billede hmortensen Nybegynder
19. juli 2005 - 17:42 #6
Der mangler lige et ; efter SQL linjerne.

Og der skal kun et = når du sætter en variabel til en værdi:
$top[0] = "0";
$top[1] = "100";
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 17:47 #7
nielle - og hvad med $top ?? og så læg svar
Avatar billede hmortensen Nybegynder
19. juli 2005 - 17:49 #8
Hvis det skal være en af gangen, ændre du blot i den første, så den passer til top.
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 17:49 #9
forresten, hvad gør count(*) AS antal? Har intet der hedder antal og had skal det bruges til?
Avatar billede hmortensen Nybegynder
19. juli 2005 - 17:52 #10
COUNT(*) er en indbygget funktion i mySQL der tæller forekomster. Når der står AS et-eller-andet, sættes der blot et alias, så den resultat kan fanges med et brugervenligt navn.

Et eksempel på alias:
SELECT x, y, (x+y) AS total FROM tabel

Nu vil total indeholde summen af x og y.
Avatar billede nielle Nybegynder
19. juli 2005 - 18:02 #11
"count(*)" tæller hvor mange rækker der passer til søgekriteriet. "AS antal" opretter et alias sådan at dette bagefter kan findes under navnet "antal":

$row["antal"]

Dette er gennerelt for alle SQL-databaser - ikke kun for MySQL.
Avatar billede nielle Nybegynder
19. juli 2005 - 18:02 #12
... og et svar :^)
Avatar billede hmortensen Nybegynder
19. juli 2005 - 18:03 #13
Pointerede bare at det ikke var en php funktion :)
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 18:07 #14
Nej! - Sorry, men tror jeg har sagt forkert.
Den skal bare lave en simpel random mellem mine $top[] og $left[] også tjekke om de er optaget i databasen, hvis de ikke er skal den bare udskrive:
fx.

echo "$left $top";

- Den skal ikke lægge sammen eller noget.
Avatar billede nielle Nybegynder
19. juli 2005 - 18:15 #15
$left = array();
$top = array();

$left[0] = "200";
$left[1] = "300";

$top[0] = "0";
$top[1] = "100";

<?php
$randomLeft = 0;
$randomTop = 0;

$fundet = false;
do
{
    $randomLeft = mt_rand($left[0], $left[1]);
    $randomTop = mt_rand($top[0], $top[1]);   

    $SQL = "SELECT count(*) AS antal FROM brugere WHERE left=" . $randomLeft ." OR top=" . $randomTop;
    $result = mysql_query($SQL);
    $row = mysql_fetch_assoc($result);

    $fundet = ($row["antal"] == 0) ? false : true;
}
while ($fundet);

echo "$randomLeft $randomTop";
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 18:34 #16
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/virtual/XXXX/xxxxxxx.dk/public_html/fsdfsdfsdf/zx/testfelter.php on line 25
223 94
Avatar billede nielle Nybegynder
19. juli 2005 - 18:36 #17
Prøv - som debug - at udskrive din SQL før at den udføres:

$left = array();
$top = array();

$left[0] = "200";
$left[1] = "300";

$top[0] = "0";
$top[1] = "100";

<?php
$randomLeft = 0;
$randomTop = 0;

$fundet = false;
do
{
    $randomLeft = mt_rand($left[0], $left[1]);
    $randomTop = mt_rand($top[0], $top[1]);   

    $SQL = "SELECT count(*) AS antal FROM brugere WHERE left=" . $randomLeft . " OR top=" . $randomTop;
    echo "DEBUG" . $SQL . "<br>";
    $result = mysql_query($SQL);
    $row = mysql_fetch_assoc($result);

    $fundet = ($row["antal"] == 0) ? false : true;
}
while ($fundet);

echo "$randomLeft $randomTop";
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 18:41 #18
Den skal jo kun randome dem fra $left og $top og ikke fx. 302 222 men fx. 200 0
Avatar billede nielle Nybegynder
19. juli 2005 - 18:43 #19
Ikke forstået?
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 18:46 #20
Den skal randome dem fra $left og $top..
fx.
$left = array();
$top = array();

$left[0] = "200";
$left[1] = "300";
$left[2] = "3923";

$top[0] = "0";
$top[1] = "100";
$top[2] = "333";

så skal den fx. udskrive LEFT: 200, TOP: 333;
Avatar billede hmortensen Nybegynder
19. juli 2005 - 18:49 #21
$randomLeft = mt_rand($left[0], $left[1]);
$randomTop = mt_rand($top[0], $top[1]);

til

$randomLeft = array_rand($left);
$randomTop = array_rand($top);
Avatar billede nielle Nybegynder
19. juli 2005 - 18:50 #22
$left = array();
$top = array();

$left[0] = "200";
$left[1] = "300";
$left[2] = "3923";

$top[0] = "0";
$top[1] = "100";
$top[2] = "333";

<?php
$randomLeft = 0;
$randomTop = 0;

$fundet = false;
do
{
    $randomLeft = array_rand($left, 1);
    $randomTop = array_rand($top, 1);

    $SQL = "SELECT count(*) AS antal FROM brugere WHERE left=" . $randomLeft . " OR top=" . $randomTop;
    echo "DEBUG" . $SQL . "<br>";
    $result = mysql_query($SQL);
    $row = mysql_fetch_assoc($result);

    $fundet = ($row["antal"] == 0) ? false : true;
}
while ($fundet);

echo "$randomLeft $randomTop";
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 18:51 #23
så udskriver den bare "2 1"
den skal udskrive indholdet fra $left og $top og ikke selve tallet..
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 18:51 #24
DEBUGSELECT count(*) AS antal FROM brugere WHERE leftid=0 OR topid=2
DEBUGSELECT count(*) AS antal FROM brugere WHERE leftid=2 OR topid=0
DEBUGSELECT count(*) AS antal FROM brugere WHERE leftid=2 OR topid=0
DEBUGSELECT count(*) AS antal FROM brugere WHERE leftid=2 OR topid=2
DEBUGSELECT count(*) AS antal FROM brugere WHERE leftid=0 OR topid=0
DEBUGSELECT count(*) AS antal FROM brugere WHERE leftid=1 OR topid=0
DEBUGSELECT count(*) AS antal FROM brugere WHERE leftid=2 OR topid=2
DEBUGSELECT count(*) AS antal FROM brugere WHERE leftid=2 OR topid=2
DEBUGSELECT count(*) AS antal FROM brugere WHERE leftid=2 OR topid=1
2 1
Avatar billede hmortensen Nybegynder
19. juli 2005 - 18:55 #25
Det skal også være sådan her:
$SQL = "SELECT count(*) AS antal FROM brugere WHERE left=" . $randomLeft[0] . " OR top=" . $randomTop[0];

da array_rand() returnere et array med index af tilfældig post.
Avatar billede hmortensen Nybegynder
19. juli 2005 - 18:58 #26
Nej nu går det helt galt:
$SQL = "SELECT count(*) AS antal FROM brugere WHERE left=" . $left[$randomLeft[0]] . " OR top=" . $top[$randomTop[0]];
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 19:03 #27
DEBUGSELECT count(*) AS antal FROM brugere WHERE leftid= OR topid=

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/virtual/w******/***/public_html/******/chat/testfelter.php on line 28
0 0
Avatar billede nielle Nybegynder
19. juli 2005 - 19:05 #28
Har du prøvet 19/07-2005 18:58:19?
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 19:05 #29
Den jeg bruger..
Avatar billede nielle Nybegynder
19. juli 2005 - 19:13 #30
Mystisk, den burde ellers virke.

Så prøv denne vaiant:

$left = array();
$top = array();

$left[0] = "200";
$left[1] = "300";
$left[2] = "3923";

$top[0] = "0";
$top[1] = "100";
$top[2] = "333";

$randomLeft = 0;
$randomTop = 0;

$maxIdxLeft = count($left);
$maxIdxTop = count($top);

$fundet = false;
do
{   
    $randomIdx = mt_rand(0, $maxIdxLeft-1);
    $randomLeft = $left[$randomIdx];

    $randomIdx = mt_rand(0, $maxIdxTop-1);
    $randomTop = $top[$randomIdx];

    $SQL = "SELECT count(*) AS antal FROM brugere WHERE left=" . $randomLeft . " OR top=" . $randomTop;
    echo "DEBUG: " . $SQL . "<br>";
    $result = mysql_query($SQL);
    $row = mysql_fetch_assoc($result);

    $fundet = ($row["antal"] == 0) ? false : true;
}
while ($fundet);

echo "$randomLeft $randomTop";
Avatar billede hmortensen Nybegynder
19. juli 2005 - 19:14 #31
Burde ikke have noget at sige, men prøv sådan her. Kan være index'et giver problem når der kun er et resultat.
$SQL = "SELECT count(*) AS antal FROM brugere WHERE left=" . $left[$randomLeft] . " OR top=" . $top[$randomTop];
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 20:26 #32
Perfekt, din løsning virkede, Nielle tak for hjælpen
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 20:59 #33
Nielle, den opdatere ikke $randomTop.. min kode:
<?php

$left = array();
$top = array();

// X-AKSER
$left[0] = "3";
$left[1] = "63";
$left[2] = "123";
$left[3] = "183";
$left[4] = "243";
$left[5] = "303";
$left[6] = "363";
$left[7] = "423";
$left[8] = "483";
$left[9] = "543";

// Y-AKSER
$top[3] = "122";
$top[4] = "162";
$top[5] = "202";
$top[0] = "2";
$top[1] = "42";
$top[2] = "82";




$randomLeft = 0;
$randomTop = 0;

$maxIdxLeft = count($left);
$maxIdxTop = count($top);

$fundet = false;
do
{   
    $randomIdx = mt_rand(0, $maxIdxLeft-1);
    $randomLeft = $left[$randomIdx];

    $randomIdxz = mt_rand(0, $maxIdxTop-1);
    $randomTop = $top[$randomIdxz];

    $SQL = "SELECT count(*) AS antal FROM brugere WHERE leftid=" . $randomLeft . " OR topid=" . $randomTop;
    $result = mysql_query($SQL);
    $row13 = mysql_fetch_assoc($result);

    $fundet = ($row13["antal"] == 0) ? false : true;
}
while ($fundet);
mysql_query("UPDATE brugere SET leftid = '$randomLeft',  topid = '$randomTop' WHERE brugernavn = '$_SESSION[brugernavn]'");
?>
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 21:03 #34
- kun $randomLeft
Avatar billede dj-meisner Nybegynder
19. juli 2005 - 21:15 #35
Kan du hjælpe med det?
Avatar billede nielle Nybegynder
19. juli 2005 - 22:21 #36
Ret:

$randomTop = $top[$randomIdxz];

- til:

$randomTop = $top[$randomIdx];
Avatar billede nielle Nybegynder
19. juli 2005 - 22:37 #37
Hmm, jeg er vist for træt til at se fejlen lige nu. Lover at jeg vil kigge på det i morgen. :^)
Avatar billede nielle Nybegynder
20. juli 2005 - 18:00 #38
Umiddelbart ser det ikke ud til at der er noget galt, men prøv alligeve med denne lettere modificerede kode:

<?php
$left = array();
$top = array();

// X-AKSER
$left[0] = "3";
$left[1] = "63";
$left[2] = "123";
$left[3] = "183";
$left[4] = "243";
$left[5] = "303";
$left[6] = "363";
$left[7] = "423";
$left[8] = "483";
$left[9] = "543";

// Y-AKSER
$top[3] = "122";
$top[4] = "162";
$top[5] = "202";
$top[0] = "2";
$top[1] = "42";
$top[2] = "82";

$randomLeft = 0;
$randomTop = 0;

$maxIdxLeft = count($left);
$maxIdxTop = count($top);

$fundet = false;
do
{
    $randomLeft = $left[mt_rand(0, $maxIdxLeft-1)];
    $randomTop = $top[mt_rand(0, $maxIdxTop-1)];

    $SQL = "SELECT count(*) AS antal FROM brugere WHERE leftid=" . $randomLeft . " OR topid=" . $randomTop;
    $result = mysql_query($SQL);
    $row13 = mysql_fetch_assoc($result);

    $fundet = ($row13["antal"] == 0) ? false : true;
}
while ($fundet);

$SQL = "UPDATE brugere SET leftid=" . $randomLeft . ", topid=" . $randomTop . " WHERE brugernavn='" . $_SESSION[brugernavn] . "'":
echo "DEBUG: " . $SQL . "<br>";
mysql_query($SQL);
?>
Avatar billede nielle Nybegynder
20. juli 2005 - 18:01 #39
Semikolon til sidst i:

$SQL = "UPDATE brugere SET leftid=" . $randomLeft . ", topid=" . $randomTop . " WHERE brugernavn='" . $_SESSION[brugernavn] . "'";
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