Avatar billede hojgaard Nybegynder
24. januar 2003 - 22:09 Der er 12 kommentarer og
1 løsning

Gemme array

Hej,

Jeg skal have overført et 2 dim. array fra 1 side til 1 anden. Er det muligt at gemme et array i en fil?

Hvis ja: hvordan gemmer og henter jeg arrayet?

Hvis nej: hvordan kan jeg så gøre det?

Meget interesseret i et kodeeks. :-)

Tak for hjælpen!
Avatar billede caturn Nybegynder
24. januar 2003 - 22:14 #1
$fil = fopen("text.txt","w");
for ($nr1 = 0 ; $nr1 < count($array) ; $nr1++) {
  for ($nr2 = 0 ; $nr2 < count($array[$nr1]) ; $nr2++) {
    fwrite($fil, $array[$nr1][$nr2] . "\n");
  }
}


Er uafprøvet.
Den gemmer hver del data i vher sin linie.
Hvis den også skal huske hvilken førstedimension den lå i må den lige skrive $nr1 før.
Avatar billede tipsen Nybegynder
24. januar 2003 - 22:14 #2
Måske noget i retning af:

<?php
  $tmpvar = serialize($arraynavn);
  echo 'a href="http://www.server.dk/filnavn.php?varnavn='.$tmpvar.'">link</a>';
?>

og i filnavn.php:

<?php
  $arrayvar = unserialize($_GET['varnavn']);
  print_r($arrayvar);
?>
Avatar billede caturn Nybegynder
24. januar 2003 - 22:14 #3
fclose($fil);

Manglede lige.
Avatar billede caturn Nybegynder
24. januar 2003 - 22:15 #4
På min.
Avatar billede tipsen Nybegynder
24. januar 2003 - 22:15 #5
Mit gemmer ikke i en fil men overfører bare via url'en - kan evt. også gemmes i en session-variabel og overføres på den måde.
Avatar billede hojgaard Nybegynder
24. januar 2003 - 22:34 #6
Hej tipsen,

Den optimale løsning vil helt klart være at undgå filerne.
Jeg har prøvet dit eksempel, men kan ikke få det til at køre.
Her er hvad jeg har testet med:

1.php:
------------------------------------------------
<?
  $varer[0][0] = "A";
  $varer[0][1] = "B";
  $varer[0][2] = "C";
  $varer[1][0] = "D";
  $varer[1][1] = "E";
  $varer[1][2] = "F";
       
  $tmpvar = serialize($varer);
  echo '<a href="2.php?varnavn='.$tmpvar.'">link</a>';
?>

2.php:
------------------------------------------------
<?
  $arrayvar = unserialize($_GET['varnavn']);

  echo "[0][0]: ".$arrayvar[0][0]."<br>";
  echo "[0][1]: ".$arrayvar[0][1]."<br>";
  echo "[0][2]: ".$arrayvar[0][2]."<br>";
  echo "[1][0]: ".$arrayvar[1][0]."<br>";
  echo "[1][1]: ".$arrayvar[1][1]."<br>";
  echo "[1][2]: ".$arrayvar[1][2]."<br>";
?>

Hvad har jeg gjort forkert?
Avatar billede tipsen Nybegynder
24. januar 2003 - 22:47 #7
hojgaard:

Et par mindre "detaljer" som jeg fandt i kommentarerne på php.net:

Brug urlencode, så strengen er klar til at blive smidt i url'en:

<?
  $varer[0][0] = "A";
  $varer[0][1] = "B";
  $varer[0][2] = "C";
  $varer[1][0] = "D";
  $varer[1][1] = "E";
  $varer[1][2] = "F";

  $tmpvar = urlencode(serialize($varer));
  echo '<a href="nr2.php?varnavn='.$tmpvar.'">link</a>';
?>

Brug stripslashes inden unserialize: (mystisk nok skal urldecode ikke bruges...)

<?
  $arrayvar = unserialize(stripslashes($_GET['varnavn']));
  echo "[0][0]: ".$arrayvar[0][0]."<br>";
  echo "[0][1]: ".$arrayvar[0][1]."<br>";
  echo "[0][2]: ".$arrayvar[0][2]."<br>";
  echo "[1][0]: ".$arrayvar[1][0]."<br>";
  echo "[1][1]: ".$arrayvar[1][1]."<br>";
  echo "[1][2]: ".$arrayvar[1][2]."<br>";
?>
Avatar billede hojgaard Nybegynder
24. januar 2003 - 23:06 #8
hmmm... kan ikke få side 2 til at udskrive arrayet.
Det eneste jeg får er:

[0][0]:
[0][1]:
[0][2]:
[1][0]:
[1][1]:
[1][2]:
Avatar billede tipsen Nybegynder
25. januar 2003 - 02:12 #9
Mystisk - jeg testede det og det fungerede fint...

Prøv at rette 2'eren til:

<?
  $arrayvar = unserialize(stripslashes($_GET['varnavn']));
  print_r($arrayvar);
  echo "[0][0]: ".$arrayvar[0][0]."<br>";
  echo "[0][1]: ".$arrayvar[0][1]."<br>";
  echo "[0][2]: ".$arrayvar[0][2]."<br>";
  echo "[1][0]: ".$arrayvar[1][0]."<br>";
  echo "[1][1]: ".$arrayvar[1][1]."<br>";
  echo "[1][2]: ".$arrayvar[1][2]."<br>";
?>

for at se, hvad $arrayvar indeholder!

-jeg ved ikke om din php-konfiguration måske ikke automatiserer de samme ting, som min konfiguration herhjemme gør - dette kan måske forklare forskellen.
Avatar billede hojgaard Nybegynder
25. januar 2003 - 13:53 #10
Tak for hjælpen tipsen.
Nu virker det endelig!
Avatar billede tipsen Nybegynder
26. januar 2003 - 01:25 #11
Hvad ændrede du!?
Avatar billede hojgaard Nybegynder
26. januar 2003 - 10:22 #12
Faktisk slet ingen ting... pludselig ville det virke alligevel :-)
Koden er præcis som du skrev den ovenfor.

Nu er jeg rendt ind i et andet problem. I løsningen du laver, sker der:

$tmpvar = urlencode(serialize($varer));
echo '<a href="nr2.php?varnavn='.$tmpvar.'">link</a>';

men jeg skulle gerne bruge det sammen med en <form>. Jeg har prøvet med:

<input type="hidden" name="varnavn" value="<? $tmpvar = urlencode(serialize($varer)); echo $tmpvar; ?>"></input>

men det virker ikke. Så urlencoder den ikke arrayet.

Har du også en løsning på det?
Avatar billede tipsen Nybegynder
28. januar 2003 - 01:29 #13
Jeg kan huske jeg læste en kommentar om, at det skulle behandles anderledes når det skulle bruges i et hidden-field i en form (no shit!) et sted i brugerkommentarerne på php.net, men jeg kan ikke finde det igen...

Jeg fandt dog:

Short version:

PAGE 1:
$array=rawurlencode(serialize($array));

PAGE 2:
$array=unserialize(urldecode(stripslashes($array)));

This just cost me two hours. Hope it helps.

-og så læste jeg at base64_encode / -decode vist med fordel kan bruges i stedet for urlencode / -decode...

Eller evt. rawurlencode() i stedet - prøv dig lidt frem og se på, hvad de forskellige funktioner og vurder selv om det er noget der kan overføres via en url!
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