Avatar billede page Nybegynder
18. januar 2007 - 23:47 Der er 19 kommentarer og
1 løsning

Slette enkelt række i session array

Hey,

Forleden dag lykkedes det mig at lave et flere dimentionelt _SESSION. http://www.eksperten.dk/spm/756634
Og det virker perfekt. Nu er det sådan at jeg ønsker at kunne vælge en eller flere rækker i arrayet som jeg ønsker at slette.

ved hver session/række er der tilføjet en checkbox, som man kan krydse af og så trykke slet. Og så er meningen at den skal slette den eller de valgte sessions.

Det ser sådan ud:
for($i = 0; $i < sizeof($_SESSION['products']); $i++)
{
$sessions_id = $_SESSION['products'][$i]['prod_unikt'];
echo "<input type='checkbox' name='num' value='$i'>" . $_SESSION['products'][$i]['prod_style'] . "-" . $_SESSION['products'][$i]['prod_size'] . "" ;

Hver checkbox bliver tildelt værdien $i.

Som det er nu, så sletter den det hele.

<?php
session_start();

session_unset ($_SESSION['products']);

?>

Håber i forstår.
Avatar billede dennismp Nybegynder
19. januar 2007 - 02:05 #1
Næsten rigtigt. Session er et array, så derfor:

unset($_SESSION['products']);
Avatar billede page Nybegynder
19. januar 2007 - 09:52 #2
Ja, men sjovt nok så virker:
unset($_SESSION['products']);
ikke. Det skal være
session_unset ($_SESSION['products']);

Den sletter det hele. Hvordan sletter jeg en enkelt række?
Avatar billede sw_red_6 Nybegynder
19. januar 2007 - 09:57 #3
du skal huske at det er et multidimensionelt array så prøv med
<?php
session_start();
$num = $_POST[num];
unset($_SESSION['products'][$num]);
?>
Avatar billede mcgoat Nybegynder
19. januar 2007 - 09:57 #4
http://dk2.php.net/array_splice

noget du kan bruge?
Avatar billede mcgoat Nybegynder
19. januar 2007 - 10:00 #5
Noget jeg brugte til en indkøbskurv når man skulle slette noget.

$_SESSION['products'][$update_id] = ''; // Nulstil plads i session som skal slettes
array_splice($_SESSION['products'], $update_id ,1); // Sletter plads og reindekserer
Avatar billede page Nybegynder
19. januar 2007 - 10:07 #6
sw_red_6
19/01-2007 09:57:48
Det virkede tildels. Da jeg sender det via en form, ændrede jeg det så den kom til at se sådan her ud:

unset($_SESSION['products'][$num]);

Så langt, så godt.

Men hvordan får jeg den til at køre det antal jeg har krydset af, igennem funktionen?
Jeg kan jo regne ud at det er noget med en løkke. Men jeg kan ikke helt styr på hvordan jeg finder ud af hvor mange jeg har krydset af. Og dermed hvormange gange løkken skal køre.
Avatar billede mcgoat Nybegynder
19. januar 2007 - 10:11 #7
Remember that checkboxes with the same name work in a group, and the form will pass their value as an array. However, in your form you should tell explicitly that the checkboxes should pass their value as an array.
For example:


<input type="checkbox" name="state[]" value="NE">

<input type="checkbox" name="state[]" value="IA">

<input type="checkbox" name="state[]" value="MO">


So in your case your script should loop through all the elements in the area to see if the box was checked or not.

For example:


<?php
$state=$_POST['state'];
foreach ($state as $statename)
{
echo "$statename is checked";
}

?>


en lille guide :)
Avatar billede sw_red_6 Nybegynder
19. januar 2007 - 10:13 #8
så skal du have ændret lidt på din checkbox så de alle har et unikt navn.
f.eks.
echo "<input type='checkbox' name='num_$i' value='$i'>" .

og så kan du jo lave en foreach på $_POST eller $_GET, alt efter om du bruge post eller get i din form
Avatar billede sw_red_6 Nybegynder
19. januar 2007 - 10:14 #9
du kan selvf. også gøre som mcgoat foreslår, det kan måske være en bedre måde at gøre tingene på..
Avatar billede page Nybegynder
19. januar 2007 - 10:30 #10
mcgoat 10:11:43
Jeg får en fejl når jeg forsøger mig med det.
Warning: Invalid argument supplied for foreach() in min/sti  on line 11

min checkbox
<input type='checkbox' name='num[]' value='$i'>

og foreach
$num=$_POST['num'];
foreach ($num as $statename)
{
echo "$statename is checked";
}
Avatar billede sw_red_6 Nybegynder
19. januar 2007 - 10:35 #11
har du krydset nogen checkboxe af?
Der mangler lige et tjek af om $num indeholder noget.
prøv med
if(is_array($num)) {
// kør foreach
}
Avatar billede page Nybegynder
19. januar 2007 - 10:48 #12
Det virker.
Efter jeg tilføjede if(is_array($num)) {
// kør foreach
}

Først indsatte jeg
$_SESSION['products'][$num] = ''; // Nulstil plads i session som skal slettes
array_splice($_SESSION['products'], $num ,1); // Sletter plads og reindekserer

i foreach, men det gav en fejl.

så indsatte jeg unset($_SESSION['products'][$statename]);

og det virker perfekt.

I må meget gerne begge smide et svar da i begge har bidraget til det.
Avatar billede mcgoat Nybegynder
19. januar 2007 - 10:51 #13
:)
Avatar billede sw_red_6 Nybegynder
19. januar 2007 - 11:01 #14
ok
Avatar billede page Nybegynder
19. januar 2007 - 11:08 #15
hov
kan man kun acceptere et svar, en gang? :S
Avatar billede sw_red_6 Nybegynder
19. januar 2007 - 11:09 #16
du skal huske at markere alle navne du vil give point i den der boks
Avatar billede mcgoat Nybegynder
19. januar 2007 - 11:09 #17
Du skulle have markeret begge navne og trykket accepter. Laver lige nogle point til sw_red_6
Avatar billede mcgoat Nybegynder
19. januar 2007 - 11:10 #18
Avatar billede page Nybegynder
19. januar 2007 - 11:26 #19
he, tak.
Avatar billede dennismp Nybegynder
19. januar 2007 - 14:47 #20
Har du testet om løsningen virker til at slette mere end et produkt ad gangen? Løsningen har også et problem, den antager at de checkboxes står i samme rækkefølge som i session. Men med forbehold og et par antagelser - virker det vel :)
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