Avatar billede sacredone Nybegynder
08. oktober 2004 - 10:12 Der er 21 kommentarer

gemme checkboxe i 3d-array

Hvordan gøres dette?

Jeg har på en side en masse checkboxe, som er parents med childs, fx:

[]name="parent_id[$id]"
  []name="sub_id[$id]"
  []name="sub_id[$id]"
  []name="sub_id[$id]"
[]name="parent_id[$id]"
  []name="sub_id[$id]"
  []name="sub_id[$id]"
[]name="parent_id[$id]"
  []name="sub_id[$id]"
  []name="sub_id[$id]"

Disse forskellige parents og sub arrays vil jeg gerne gemme på næste side når man submitter, i et 3d-array (eller en anden måde hvis der er noget smartere) som skal gemmes i en session.

Hvordan gøres dette?

På forhånd tak.
Avatar billede sacredone Nybegynder
08. oktober 2004 - 10:20 #1
Må gerne gemmes i stil med:

foo = array(
      "parent_id[1]" => array(
            "sub_id[42]" => array(),
            "sub_id[7]" => array()
      ),
      "parent_id[4]" => array(
            "sub_id[9]" => array()
      )
);
Avatar billede sacredone Nybegynder
08. oktober 2004 - 10:22 #2
...hvis det er en smart måde altså :) har ikke prøvet denne slags før.
Avatar billede detox Nybegynder
08. oktober 2004 - 10:41 #3
Du skal ikke bruge de første klammer:

name="parent_id[$id]"
name="sub_id[$id]"
name="sub_id[$id]"
name="sub_id[$id]"
name="parent_id[$id]"
name="sub_id[$id]"
name="sub_id[$id]"
name="parent_id[$id]"
name="sub_id[$id]"
name="sub_id[$id]"
Avatar billede sacredone Nybegynder
08. oktober 2004 - 10:43 #4
de første klammer var for at illustrere mine checkboxes i outputtet.

[]
  []
  []
  []
[]
  []
  []
[]
  []
  []

Parents har navent parent_id[$id] og childs har sub_id[$id]
Avatar billede detox Nybegynder
08. oktober 2004 - 10:46 #5
Aha, men hvad er så problemet. Vil du ha' de enkelte array's til at indeholde nye array's?
Avatar billede sacredone Nybegynder
08. oktober 2004 - 10:52 #6
Hvordan skal jeg få fat i de valgte checkboxe og gemme dem i et sådan array? Og hvordan skal array'et gemmes i en session?
Avatar billede detox Nybegynder
08. oktober 2004 - 11:02 #7
Jeg forstår bare ikke helt, i dit eksempel ser det ud til du vil have array's som værdier. For så bliver det lidt mere kringlet. Eller skal de bare have almindelige værdier?
Avatar billede detox Nybegynder
08. oktober 2004 - 11:05 #8
Hvis det bare er alm. værdier, ligger du dem i en session med:

<?php
session_start();
if (isset($_POST['submit'])) {
  $_SESSION['parent_id'] = $_POST['parent_id'];
  $_SESSION['child_id'] = $_POST['child_id'];
}
....osv
Avatar billede sacredone Nybegynder
08. oktober 2004 - 11:08 #9
ehm, det vil ikke gemme noget array i min session? Det vil blot gemme det id der er sidst tilføjet, session variablen vil blive overskrevet for hver ny værdi.

Skal gemme et tredimensionelt array i en session.
Avatar billede detox Nybegynder
08. oktober 2004 - 11:11 #10
Mener du ikke et todimensionelt array? Eller skal de enkelte array's indeholde nye array's?
Avatar billede sacredone Nybegynder
08. oktober 2004 - 11:11 #11
Har muligvis taget fejl af begreberne, de skal gemmes sådan:

foo = array(
      "parent_id[1]" => array(
            "sub_id[42]" => array(),
            "sub_id[7]" => array()
      ),
      "parent_id[4]" => array(
            "sub_id[9]" => array()
      )
);
Avatar billede detox Nybegynder
08. oktober 2004 - 11:16 #12
Ok så, men mener du ikke:

foo = array(
      "parent_id[1]" => array(
            "sub_id[42]" => 'værdi',
            "sub_id[7]" => 'værdi'
      ),
      "parent_id[4]" => array(
            "sub_id[9]" => 'værdi'
      )
);
Avatar billede detox Nybegynder
08. oktober 2004 - 11:21 #13
Så vil jeg mene du skal lave formen i den her stil:

name="parent_id[1][42]"
name="parent_id[1][7]"
name="parent_id[4][9]"
Avatar billede detox Nybegynder
08. oktober 2004 - 11:29 #14
Her er et eksempel:

<?php
session_start();
$form = "<form action='' method='post'>\n";
$i = 0;
while ($i<5) {
    $form .= "parent $i:<br />";
    $j = 0;
    while ($j<5) {
    $form .= "child $j: <input type='checkbox' name='parent_id[$i][$j]' value='ja' ";
    $form .= "/>\n";
    $j++;
    }
    $form .= "<br />\n";
    $i++;
}
$form .= "<input type='submit' name='submit' value='Opdater'>\n";
$form .= "</form>\n";
echo $form;

if (isset($_POST['submit'])) {   
    $_SESSION['parent_id'] = $_POST['parent_id'];
    echo "parent_id's:<br />\n";
    foreach ($_SESSION['parent_id'] as $key=>$array) {
        echo "Key: $key<br />\n";
        print_r($array);
        echo "<br />\n";
    }
}
?>
Avatar billede detox Nybegynder
08. oktober 2004 - 11:32 #15
Og jo array ligger i SESSION variablen ;o)
Avatar billede sacredone Nybegynder
08. oktober 2004 - 11:34 #16
at lave mit input felt på den måde, giver da en helt anden struktur?

Jeg vil mene at den måde jeg skrev, var korrekt.

foo = array(
      "parent_id[1]" => array(
            "sub_id[42]" => array(),
            "sub_id[7]" => array()
      ),
      "parent_id[4]" => array(
            "sub_id[9]" => array()
      )
);



"parent_id[1]" => array(
            "sub_id[42]" => array(),
            "sub_id[7]" => array()
      ),


Et array med arrays tilhørende arrays indeni.
Avatar billede sacredone Nybegynder
08. oktober 2004 - 11:35 #17
Værdien jeg skal gemme (value="") == id'et.
Avatar billede detox Nybegynder
08. oktober 2004 - 11:37 #18
Det bliver så osse resultatet af mit eksempel. Nu har jeg bare brugt nøglerne 0-4 i mit eksempel, men de kan selvfølgelig sagtens hentes fra et andet array eller en database.
Avatar billede sacredone Nybegynder
08. oktober 2004 - 11:40 #19
Jeg misforstår muligvis, men du vil have mig til at mine input felter skal navngives: name="parent_id[4][9]" ?

Dette kan ikke lade sig gøre.
Avatar billede detox Nybegynder
08. oktober 2004 - 11:59 #20
Hvorfor kan det ikke lade sig gøre?
Avatar billede detox Nybegynder
08. oktober 2004 - 12:03 #21
Her er et eksempel:

<?php
session_start();
$form = "<form action='' method='post'>\n";
$ids = array(1=>array(7,42),4=>array(9)); // Her indsætter du så div. parent/child id's
foreach ($ids as $i=>$arr) {
    $form .= "parent $i:<br />";
    foreach ($arr as $j) {
        $form .= "child $j: <input type='checkbox' name='parent_id[$i][$j]' value='ja' ";
        $form .= "/>\n";
    }
    $form .= "<br />\n";
}
$form .= "<input type='submit' name='submit' value='Opdater'>\n";
$form .= "</form>\n";
echo $form;

if (isset($_POST['submit'])) {   
    $_SESSION['parent_id'] = $_POST['parent_id'];
    echo "parent_id's:<br />\n";
    foreach ($_SESSION['parent_id'] as $key=>$array) {
        echo "Key: $key<br />\n";
        print_r($array);
        echo "<br />\n";
    }
}
?>
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