Avatar billede dr_demento Nybegynder
21. januar 2006 - 14:40 Der er 9 kommentarer og
1 løsning

find de checkboxes som IKKE er checked

Hej eksperter.
Jeg har et lille spørgsmål, yet tricky.

Lidt baggrundsviden: Jeg er igang med at lave en shoppingcart. Når man går ind og kigger sin bestilling i "min kurv", er der en "checked" checkbox ud for hver vare, som symbol på at man vil købe den.

Samtidig skal man ha mulighed for at opdatere kurven, og hvis man unchecker checkboxen ud for en vare og trykker "opdater" skal alle de vare som IKKE er checked, slettes.

Men jeg kan ikke lige komme på, hvordan man får fat i de inputs, som ikke er checked?

so far ser det sådan her ud:

<input type="checkbox" name="buy_item[<?=$row['itemId']?>]" value="<?=$row['itemId']?>" checked></td>


//Check om varer skal fjernes
foreach($_GET[buy_item] as $key => $check)
{
if ($check == 0) {
mysql_query("delete from cart where cookieId = '$cart_id' and itemId = $key"); }
}
Avatar billede roenving Novice
21. januar 2006 - 15:06 #1
Kan du ikke bare tjekke om de varer, der ligger i kurven stadig er checked ?-)
Avatar billede dr_demento Nybegynder
21. januar 2006 - 16:30 #2
Hey igen, tænkte du ikke på noget i stil med:

//Check om varer skal fjernes
$row = mysql_fetch_array($result);

  foreach($_GET['buy_item'] as $key => $check) {
  foreach($row['itemId'] as $vare_key => $vare_id) {

if($check == $vare_id) { } 
else { mysql_query("delete from cart where cookieId = '$cart_id' and itemId = '$vare_id'"); }
}
}

Men det virker desværre ikke...
Avatar billede rednex Nybegynder
22. januar 2006 - 00:22 #3
Mon ikke noget i denne stil kan gøre det:

$checked = implode(',', array_keys($_GET['buy_item']));
mysql_query("DELETE FROM `cart` WHERE `cookieId`=$cart_id AND `itemId` NOT IN ($checked)");

Husk at prøvekøre det på en test database først.
Avatar billede dr_demento Nybegynder
22. januar 2006 - 18:04 #4
Hej rednex og tak for dit forslag.

Nu virker det næsten, den sletter korrekt de varer som bliver unchecked. Dog kan man ikke slette en vare, hvis der kun er ét produkt i kurven.

Hvordan kan det være?
Avatar billede rednex Nybegynder
22. januar 2006 - 18:11 #5
det er nok fordi $_GET['buy_item'] er tom (burde også ske hvis du har flere varer og unchecker dem allesammen). Det kan heldigvis nemt fikses:

if(isset($_GET['buy_item']))
{
// Hvis der statig er krydset nogen varer af...
$checked = implode(',', array_keys($_GET['buy_item']));
mysql_query("DELETE FROM `cart` WHERE `cookieId`=$cart_id AND `itemId` NOT IN ($checked)");
}
else
{
// ...ellers må det være tegn på at vognen skal tømmes
mysql_query("DELETE FROM `cart` WHERE `cookieId`=$cart_id");
}
Avatar billede dr_demento Nybegynder
22. januar 2006 - 18:22 #6
Hej igen.
Jeg tror carten er lidt utilfreds med elsen

$_GET['buy_item'] bliver kun sat hvis kurven bliver opdateret. Hvis man f.eks. tilføjer en vare, vil $_GET['buy_item'] ikke blive sat, og så bliver varen da ædt af else, gør den ik?
Avatar billede rednex Nybegynder
22. januar 2006 - 18:43 #7
Jo, det er rigtigt. Du er nødt til at have en eller anden form for indikator der fortæller hvornår du piller ved varerne i kurven. Du kan f.eks. smide et hidden felt ind i afkrydsningsformen, som du bruger til at checke om der skal slettes fra kurven.
Avatar billede dr_demento Nybegynder
22. januar 2006 - 21:11 #8
Så fik jeg det til at virke. Takker for den lærerige hjælp!
Smid et svar og pointene er dine.

Nu får jeg godt nok en ret lang query string, er der en måde at skjule den på? ellers gør det vel ik noget, det ser bare ikke så kønt ud...
Avatar billede rednex Nybegynder
22. januar 2006 - 22:28 #9
Bruger du ikke POST i form method? Så ser du det ikke i query string.
Avatar billede rednex Nybegynder
22. januar 2006 - 22:29 #10
Doh, det gør du ikke (du bruger jo $_GET). Ret form method til POST, og hiv variablerne ud af $_POST i stedet for $_GET. Så skulle den være der.
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

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