Avatar billede heyn Nybegynder
30. juni 2006 - 13:41 Der er 5 kommentarer og
1 løsning

At lægge arrays i cookies

Jeg ønsker at placere flere variable i en cookie. Jeg skriver f.eks.:

setcookie("min_cookie[tal_1]",1);
setcookie("min_cookie[tal_2]",5);
setcookie("min_cookie[tal_3]",57);

Fint nok - det fungerer.
Problemet er bare at mine værdier er gemt i et array.
Jeg har altså tidligere skrevet:

$tal[1] = 1;
$tal[2] = 5;
$tal[3] = 57;

Må man godt skrive følgende?

setcookie("$tal[1]",$tal[1]);
setcookie("$tal[2]",$tal[2]);
setcookie("$tal[3]",$tal[3]);

og vil følgende så være muligt?

$tal[1] = $_COOKIE['$tal[1]'];

Mvh Christian
Avatar billede gizmo-gizmo Nybegynder
30. juni 2006 - 14:03 #1
Hvad med noget i tetning af:

$tal = array(1, 5, 57);
setcookie("minetal", serialize($tal));

Og så få fat i cookien med:
$tal_fra_cookie = unserialize(stripslashes($_COOKIE['tal']));
Avatar billede gizmo-gizmo Nybegynder
30. juni 2006 - 14:04 #2
Sådan at du gemmer hele arrayet i én cookie
Avatar billede heyn Nybegynder
30. juni 2006 - 15:59 #3
Du har helt sikkert fat i det rigtige men hvorfor virker følgende test ikke?
Jeg får besked om at der er fejl i unserialize.

<?php
if (isset($_COOKIE['test'])){
    foreach ($_COOKIE['test'] as $navn => $value){
        $indhold[$navn] = $value;
    }
    $bil = array(); $ejer = array();
    $antal = $indhold["antal"];
    $bil = unserialize($indhold["bil"]); $ejer = unserialize($indhold["ejer"]);
    for ($i=0;$i<$antal;$i++){ echo $ejer[$i]." ejer en ".$bil[$i]."<br>\n"; }
}
else{
    $antal = 2; $bil[0] = "Volvo"; $bil[1] = "Skoda";
    $ejer[0] = "Søren"; $ejer[1] = "Peter";
    setcookie("test[antal]",$antal,time()+60);
    setcookie("test[bil]",serialize($bil),time()+60);
    setcookie("test[ejer]",serialize($ejer),time()+60);
    echo "Nu laves en cookie...";
    echo "<form action=\"index.php\"><input name=\"lav_cookie\" type=\"submit\" value=\"lav_cookie\"></form>";
}
?>

Jeg kan ikke rigtig greje den.

Hilsen Christian
Avatar billede gizmo-gizmo Nybegynder
30. juni 2006 - 16:19 #4
Det er fordi den af en eller anden grund backslasher alle " tegn når man gemmer det serialized array i en cookie. Erstat:

$bil = unserialize($indhold["bil"]); $ejer = unserialize($indhold["ejer"]);

med:

$bil = unserialize(stripslashes($indhold["bil"])); $ejer = unserialize(stripslashes($indhold["ejer"]));
Avatar billede heyn Nybegynder
01. juli 2006 - 20:13 #5
Mange tak.

Først og fremmest: Der er brug for et SVAR.

Dette med serialize løste iøvrigt et stort problem for mig.
Arrays i min cookies er faktisk data hentet ud af nogle klasser. Jeg ser nu på php's hjemmeside at man også kan lave serialize på objekter af klasser. Derved er følgende muligt.

<?php
class bil{ var $maerke; function bil($_maerke){ $this->maerke = $_maerke; } }
class ejer{
    var $navn; var $bil;
    function ejer($_navn,$_bil){ $this->ejer = $_navn; }
    function ejerskab(){ echo $this->ejer." er ejer af en ".$this->bil->maerke.".<br>\n"; }
}

if (isset($_COOKIE['test'])){
    foreach ($_COOKIE['test'] as $navn => $value){ $indhold[$navn] = $value; }
    $bil = array(); $ejer = array();
    $antal = $indhold["antal"]; $bil = unserialize(stripslashes($indhold["bil"])); $ejer = unserialize(stripslashes($indhold["ejer"]));
    for ($i=0;$i<$antal;$i++){ $ejer[$i]->bil = $bil[$i]; $ejer[$i]->ejerskab();}
}
else{
    $antal = 2; $bil[0] = new bil("Volvo"); $bil[1] = new bil("Skoda");
    $ejer[0] = new ejer("Søren",$bil[0]); $ejer[1] = new ejer("Peter",$bil[1]);
    setcookie("test[antal]",$antal,time()+60);
    setcookie("test[bil]",serialize($bil),time()+60);
    setcookie("test[ejer]",serialize($ejer),time()+60);
    echo "Nu laves en cookie...";
    echo "<form action=\"index.php\"><input name=\"lav_cookie\" type=\"submit\" value=\"lav_cookie\"></form>";
}
?>

Bemærk dog at alle relationer skal genoprettes. Derfor er man nødt til at genopretten relationen mellem ejer og bil ($ejer[$i]->bil = $bil[$i]).
$ejer[$i]->bil er jo en relationel variabel på samme vis som variable af typen &$en_variabel.

God sommer Christian
Avatar billede gizmo-gizmo Nybegynder
01. juli 2006 - 20:30 #6
Velbekomme, og god sommer ;)
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