[PHP]checkboxes

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 21:33
Ik heb het volgende probleem.
Ik heb een pagina met daarop een aantal checkboxes.
De waarde van deze checkboxes moeten worden opgeslagen in een array en gepost worden.
Daarnaast hoort er nog veel meer informatie bij, maar om het simpel te houden laten we zeggen een id.


Nu is het vreemde dat op het moment dat je een checkbox niet meer selecteerd, het bij het weergeven wel opgemerkt wordt dat er een minder aanwezig is. maar dit gebeurd niet op de juiste plaats.
Ergens gaat er iets fout in de array voorraad.

Ik word er echt helemaal gek van.
Hier het betrefende formulier + post

test.html
<html>
<head>
<title>Weird checkbox test</title>
</head>
<body>
<table>
<form method=post action=test.php >
<tr>
<td>
<input type=submit value=submit class=button>
</td>
</tr>
<tr>
<td>
<INPUT TYPE=checkbox name=voorraad[] value=on checked>
</td>
<td>
<INPUT TYPE=text name=id[] value=1>
</td>
</tr>
<tr>
<td>
<INPUT TYPE=checkbox name=voorraad[] value=on checked>
</td><td>
<INPUT TYPE=text name=id[] value=2>
</td>
</tr>
<tr>
<td>
<INPUT TYPE=checkbox name=voorraad[] value=on checked>
</td><td>
<INPUT TYPE=text name=id[] value=3>
</td>
</tr>
<tr>
<td>
<INPUT TYPE=checkbox name=voorraad[] value=on checked>
</td><td>
<INPUT TYPE=text name=id[] value=4>
</td>
</tr>
<tr>
<td>
<INPUT TYPE=checkbox name=voorraad[] value=off>
</td><td>
<INPUT TYPE=text name=id[] value=5>
</td>
</tr>
</table>
</form>
</body>
</html>


POSTformulier is het volgende:
<?
for($i=0;$i<sizeof($voorraad);$i++) {
echo "<BR>" . $id[$i];
if(!is_null($voorraad[$i])) {
echo "isset<BR>";
}
else {
echo "not set <BR>";
}
echo "<HR>";
}
?>

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.


Acties:
  • 0 Henk 'm!

  • pimlie
  • Registratie: November 2000
  • Laatst online: 00:01
Volgens mij kan je sowieso de "value=" bij die checkboxen weghalen, daar gebeurt nix mee en volgens mij kent ie dat niet eens.

Verder doe je sizeof($voorraad). Dit returned het aantal keys in de array $voorraad. Als je dit gebruikt om te kijken wat de grootste key is die je hebt moet je wel ff er eentje van af trekken, keys beginnen altijd bij 0 ;)

Acties:
  • 0 Henk 'm!

  • dirkpostma
  • Registratie: Juni 2001
  • Laatst online: 18-09 21:13
Hetvoglende werkt bij mij wel:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>
    <body>
        <form action="test.php" method=post>
            <input type=checkbox name=box[] value=1>nr 1<br>
            <input type=checkbox name=box[] value=2>nr 2<br>
            <input type=checkbox name=box[] value=3>nr 3<br>
            <input type=checkbox name=box[] value=4>nr 4<br>
            <input type=submit name="go!" value="go!">
        </form>
<p>


<?php

    for ($i=0; $i<count($box); $i++)
        echo "Value of box[$i] = " . $box[$i] . "<br>";
?>

    </body>
</html>

Zie http://www.telecomvergelijker.nl/checkboxtest01.php

Acties:
  • 0 Henk 'm!

  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 21:33
Weet je wat het gekke is,
Als ik nu sizeof($voorraad) vervang door sizeof($id)
En zo moest het er eigenlijk staan, dan zie je dat er alleen wat in voorraad wordt opgeslagen als er een checkbox is geselecteerd.
maw hij slaat dus niet de null op, heel apart

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.


Acties:
  • 0 Henk 'm!

  • dirkpostma
  • Registratie: Juni 2001
  • Laatst online: 18-09 21:13
NB: alleen de elementen die zijn aangevinkt komen in de array.

Acties:
  • 0 Henk 'm!

  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 21:33
en dat is nu het lastige eraan.
Ik moet ze erin hebben , ook met null.
Ik heb namelijk nog 10 andere variabelen in een array met daarin een productbeschrijving.
Ik moet dus op kunnen vragen als ik bij $id[23] zit of hij wel of niet op voorraad is met $voorraad[23]

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.


Acties:
  • 0 Henk 'm!

  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 21:33
maar ik weet nu denk ik wel de oplossing, ik kan gewoon lomp het id als value meegegeven bij de voorraad en dan if(containsvar($voorraad),"54")) dan weet ik of hij wel of niet op voorraad is.
Jongens bedankt.

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.


Acties:
  • 0 Henk 'm!

  • dirkpostma
  • Registratie: Juni 2001
  • Laatst online: 18-09 21:13
of: zet in je form het aantal checkboxen; gebruik deze vervoglens in je for loop, zie onderstaande code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<html>
    <body>
        <form action="checkboxtest02.php" method=post>
            <input type=hidden name="n" value=4>
            <input type=checkbox name="box[0]" value=0>nr 0

            <input type=checkbox name="box[1]" value=1>nr 1

            <input type=checkbox name="box[2]" value=2>nr 2

            <input type=checkbox name="box[3]" value=3>nr 3

            <input type=submit name="go!" value="go!">
        </form>





<?php

    for ($i=0; $i<$n; $i++)
        echo "Value of box[$i] = " . $box[$i] . "
";
?>

    </body>
</html>


Acties:
  • 0 Henk 'm!

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Op maandag 06 augustus 2001 16:14 schreef pimlie het volgende:
Volgens mij kan je sowieso de "value=" bij die checkboxen weghalen, daar gebeurt nix mee en volgens mij kent ie dat niet eens.
wrong... u gaat niet door voor het koffiezet-apparaat ;)

wat je kan doen (tenminste als dat is wat je nodig hebt) is de $id van het 'veld' als waarde van de input gebruiken.

De binnengekomen array kan je joinen met een komma en daarmee een update uitvoeren:

update tabel set voorraad='ja' where id in (1,4,5,20)
update tabel set voorraad='nee' where id not in (1,4,5,20)

er zijn natuurlijk meerdere variaties hierop te bedenken die misschien net iets handiger zijn voor jou applicatie, maar dat mag je zelf uitzoeken.
bijv de $id als array key gebruiken en bijhouden welke keys in gebruik zijn (tweede array die altijd meekomt bijvoorbeeld, hidden inputs ofso). Alle gevulde array elementen zijn dan op voorraad (key = id) en niet gevulde (null) elementen zijn niet op voorraad.

edit:

werken en got-ten is niet echt bevordelijk voor de post-snelheid merk ik wel weer.
de functie in_array() is misschien ook wat voor je.

Today's subliminal thought is:


Acties:
  • 0 Henk 'm!

  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 21:33
zo werkt ie nu bij mij.
in de test.html bij de values in de checkboxes de value van het bijbehorende id plaatsen.
De test.php wordt als volgt:
<?
for($i=0;$i<sizeof($id);$i++) {
echo "<BR>" . $id[$i];
if(in_array($id[$i],$voorraad)) {
echo "isset<BR>";
}
else {
echo "not set <BR>";
}
echo "<HR>";
}
?>

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.


Acties:
  • 0 Henk 'm!

  • dirkpostma
  • Registratie: Juni 2001
  • Laatst online: 18-09 21:13
Die werkt alleen niet als alle vakjes afgevinkt zijn... Dan bestaat de array niet en krijg je een error;

solution:
code:
1
2
3
4
5
6
7
8
9
10
11
<?
    if (!isset($voorraad)) $voorraad = Array();
    for($i=0;$i<sizeof($id);$i++)
    {
        echo "<br>" . $id[$i];
        if(in_array($id[$i],$voorraad))
            echo " isset<br>";
        else
            echo " not set <br>";
}
?>

Acties:
  • 0 Henk 'm!

  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 21:33
je hebt gelijk, mijn dank is groot

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.

Pagina: 1