Avatar billede stig69 Nybegynder
28. december 2004 - 14:27 Der er 11 kommentarer og
2 løsninger

Random tekststykke med session

Jeg mangler et lille system der tilfældigt kan vise tre forskellige tekststykker, men ikke randomize hele vejen igennem. Jeg ønsker at det første tekststykke bliver valgt tilfældigt blandt de tre. Næste gang brugeren reloader siden kan der kun vælges blandt de to tekststykker der ikke blev valgt første gang. Tredje gang brugeren reloader siden bliver sidste tekststykke vist. Fjerde gang siden bliver reloadet starter sceneriet forfra.

Jeg har søgt lidt på eksperten, men ikke rigtig fundet et system endnu. Så vidt jeg har kunne læse mig til skal det laves med session.

Håber på hjælp

-Stig
Avatar billede stefmeister Nybegynder
28. december 2004 - 17:18 #1
du har ikke noget kode som evt. kan rettes til?
Avatar billede stig69 Nybegynder
28. december 2004 - 17:29 #2
ikke rigtig. Men jeg har fundet noget kode som jeg tror kan rettes til fra spg: http://www.eksperten.dk/spm/572738

Det er iss der står for udviklingen:

session_start();

function getImgArr($dir){
    $dir = opendir($dir);
    $i=0;
    while($file = readdir($dir)){
        if (substr($file,0,1)!=".") {
            $arr[$i] = $file;
            $i++;
        }
    }
    return $arr;
}

function getRndImg($arr, $count = 10){
    if (empty($_SESSION['randimd'])) $_SESSION['randimd'] = array();
    if ($count > (count($arr)*.8)) $count = count($arr)-2;
    if (count($_SESSION['randimd'])>$count) {
        array_shift($_SESSION['randimd']);
    }
    $num = count($arr)-1;
    do {
        $rnd = rand(0,$num);
    } while (in_array($rnd, $_SESSION['randimd']));
    $_SESSION['randimd'][] = $rnd;
    $_SESSION['randimg'][] = $rnd;
    $str = $arr[$rnd];
    return $str;
}

echo getRndImg(getImgArr("./test/"), 99);

Jeg har bare lidt svært ved at gennemskue det
Avatar billede iss Novice
29. december 2004 - 02:38 #3
Ikke det der ligner at være testet:
session_start();

$var[] = "tekststykke1";
$var[] = "tekststykke2";
$var[] = "tekststykke3";

echo RndString($var);

function RndString($arr) {
    if (empty($_SESSION['randdata'])) {
        $_SESSION['randdata'] = shuffle($arr);
        $_SESSION['randpos'] = 0;
    }
    $str = $_SESSION['randdata'][$_SESSION['randpos']];
    if (count($_SESSION['randdata']) == $_SESSION['randpos']) $_SESSION['randpos'] = 0;
    $_SESSION['randpos']++;
    return $str;
}

Er ikke hjemme igen før end i det nye år, hvis der er problemer med dette.
Avatar billede farmer Nybegynder
29. december 2004 - 15:27 #4
Heller ikke testet... svarer ikke helt på spørgsmålet, men laver en ny random udvælgelse, så teksstykkerne ikke kører i ring, men en ny randon vælges. Understøtter et vilkårligt antal teksstykker på hver side, dog minimum 2! Ellers skal der laves et hurtigt if-else check for det.

<?php
session_start();
/* Sætter noget teskt ind i et array. Starter fra 1, da count ikke regner plads nummer 0 med. */
$var[1] = "tekststykke1";
$var[2] = "tekststykke2";
$var[3] = "tekststykke3";

/* if: hvis variabel ikke er gemt i session eller den gemte variabel er højere end sidens count(array) vælges ny variabel */
if ((!isset($_SESSION['tekststykke']))||($_SESSION['tekststykke']>count($var)))
{ $_SESSION['tekststykke'] = rand(count($var));
} else {
  $tempTekst = $_SESSION['tekststykke']; /* Laver en kopi af sessionsvariabel */
  while ($tempTekst == $_SESSION['tekststykke']) /* tjekker om kopiens værdi har ændret sig */
  { $tempTekst = rand(count($var)); } /* sætter værdi i kopi til noget nyt */
    $_SESSION['tekststykke'] = $tempTekst; /* overskriver sessionsvariabel med ny variabel */
  }
?>
Avatar billede farmer Nybegynder
29. december 2004 - 15:38 #5
Er testet. Fejl i rand, skal angive min og max, dvs. rand(1,(count($var)))

Altså:...
<?php
session_start();
/* Sætter noget teskt ind i et array. Starter fra 1, da count ikke regner plads nummer 0 med. */
$var[1] = "tekststykke1";
$var[2] = "tekststykke2";
$var[3] = "tekststykke3";

/* if: hvis variabel ikke er gemt i session eller den gemte variabel er højere end sidens count(array) vælges ny variabel */
if ((!isset($_SESSION['tekststykke']))||($_SESSION['tekststykke']>count($var)))
{ $_SESSION['tekststykke'] = rand(1,count($var));
} else {
  $tempTekst = $_SESSION['tekststykke']; /* Laver en kopi af sessionsvariabel */
  while ($tempTekst == $_SESSION['tekststykke']) /* tjekker om kopiens værdi har ændret sig */
  { $tempTekst = rand(1,count($var)); } /* sætter værdi i kopi til noget nyt */
    $_SESSION['tekststykke'] = $tempTekst; /* overskriver sessionsvariabel med ny variabel */
  }
?>
Avatar billede stig69 Nybegynder
30. december 2004 - 09:06 #6
farmer--> if-sætningen kan den ikke ligges ind i en funktion??
Avatar billede iss Novice
30. december 2004 - 12:55 #7
farmer, skriver:
$var[] = "tis";
echo count($var);

0 eller 1 hos dig?
Avatar billede stig69 Nybegynder
30. december 2004 - 13:00 #8
iss --> jeg troede først du kom tilbage i det nye år... Jeg har problemer med din løsning - desværre, men kan godt bruge farmer's selvom den måske ikke er optimal
Avatar billede iss Novice
30. december 2004 - 14:04 #9
Jeg er nu heller ikke hjemme, og det er jeg ikke før d. 2.

Hvad er problemet da?
Avatar billede stig69 Nybegynder
03. januar 2005 - 09:12 #10
iss--> kan ikke få udskrevet noget, måske er det kaldet af funktionen der ikke rigtig fungerer
Avatar billede iss Novice
03. januar 2005 - 13:02 #11
Ja, det hjælper at læse manualen omkring shuffle....

session_start();

$var[] = 'tekststykke1';
$var[] = 'tekststykke2';
$var[] = 'tekststykke3';

echo RndString($var);

function RndString($arr) {
    if (empty($_SESSION['randdata'])) {
    shuffle($arr);
        $_SESSION['randdata'] = $arr;
        $_SESSION['randpos'] = 0;
    }
    $str = $_SESSION['randdata'][$_SESSION['randpos']];
    $_SESSION['randpos']++;
    if (count($_SESSION['randdata']) == $_SESSION['randpos']) $_SESSION['randpos'] = 0;
    return $str;
}
Avatar billede stig69 Nybegynder
03. januar 2005 - 14:23 #12
smukt arbejde. Jeg takker mange gange
Avatar billede iss Novice
03. januar 2005 - 19:06 #13
Velbekommen.....
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