[PHP/HTML] Checkbox Array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WackOo
  • Registratie: Januari 2005
  • Laatst online: 25-08 13:48
Beste Tweakers,

Ik ben bezig met een opdracht, nu zit ik dus vanaf vorige
week vrijdag vast met het volgende probleem.

Ik heb een index.php, waar ik dmv een GET een pagina include.
Die pagina bevat een X aantal leraren die dmv php in een while worden
ge-echod, wanneer ik deze POST en echo dmv print_r() ziet hij wel dat
checkbox bestaat alleen post hij de values niet, als ik de zelfde code
uit de bron kopieer en deze in test.php zet met daarboven in ook een print_r()
dan worden de values wel gepost!.. Ik, M'n beide leraren, mensen op PHPFreakz
en ook hogere jaars zitten voor een raadsel dus wou ik mijn probleem hier toch nog
eens voorleggen om te kijken of hier iemand is die dit vaker gehad heeft en dit mogelijk
heeft opgelost.

PHP:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?PHP
if($included != 1){
    die(header("Location: ../"));
}

echo '<pre>';
print_r($_POST);
echo '</pre>';

echo '<h3>Afspraak Maken</h3>
        <form method="post" action="?pagina=afspraak">
                <table>
                    <tr>';
                $query = "SELECT * FROM `docenten` ORDER BY `id` ASC;";
                $result = mysql_query($query);
                $tr=1;
                $i=1;
                while($fetch = mysql_fetch_assoc($result)){
                    echo "\n\t\t\t\t\t\t".'
                        <td>
                            '.ucwords($fetch['naam']).' ('.$i.')
                        </td>
                        <td>
                            ('.$fetch['afkorting'].')
                        </td>
                        <td>
                            <input name="checkbox[]" type="checkbox" value="'.$fetch['id'].'" />
                        </td>
                        <td style="width: 15px;">
                            
                        </td>';
                            if($tr%3 == 0){
                                echo "\n\t\t\t\t\t".'</tr>';
                                echo "\n\t\t\t\t\t".'<tr>';
                            }
                            $tr++;
                            $i++;
                        }
            echo '
                </table>
            <input type="submit" name="button" value="Selecteer" />
        </form>';
?>


PHP:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?PHP
echo '<pre>';
print_r($_POST);
echo '</pre>';
?>
<form method="post" action="?pagina=afspraak">
                <table>
                    <tr>
                        <td>
                            Piet (0)
                        </td>

                        <td>
                            ()
                        </td>
                        <td>
                            <input name="checkbox[]" type="checkbox" value="1" />
                        </td>
                        <td style="width: 15px;">
                            
                        </td>
                        
                        <td>

                            Kees (1)
                        </td>
                        <td>
                            ()
                        </td>
                        <td>
                            <input name="checkbox[]" type="checkbox" value="2" />
                        </td>
                        <td style="width: 15px;">
                            
                        </td>

                        
                        <td>
                            Geert (2)
                        </td>
                        <td>
                            ()
                        </td>
                        <td>
                            <input name="checkbox[]" type="checkbox" value="3" />
                        </td>
                        <td style="width: 15px;">

                            
                        </td>
                    </tr>
                    <tr>
                        
                        <td>
                            Arthur (3)
                        </td>
                        <td>
                            ()
                        </td>
                        <td>

                            <input name="checkbox[]" type="checkbox" value="4" />
                        </td>
                        <td style="width: 15px;">
                            
                        </td>
                        
                        <td>
                            Marcel (4)
                        </td>
                        <td>
                            ()
                        </td>

                        <td>
                            <input name="checkbox[]" type="checkbox" value="5" />
                        </td>
                        <td style="width: 15px;">
                            
                        </td>
                        
                        <td>
                            Pim (5)
                        </td>
                        <td>

                            ()
                        </td>
                        <td>
                            <input name="checkbox[]" type="checkbox" value="6" />
                        </td>
                        <td style="width: 15px;">
                            
                        </td>
                    </tr>
                </table>
            <input type="submit" name="button" value="Selecteer" />
        </form>

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Druk
eens niet
zo
vaak op
enter
als
je een
bericht typt.

Verder snap ik je vraag niet helemaal. Maar een checkbox die niet is aangevinkt komt sowieso niet terug in je $_POST, die wordt namelijk niet meegezonden door je browser.

Kun je eens een voorbeeld geven van de uitvoer van print_r($_POST); en aangeven wat je verwacht en wat er dus (volgens jou) niet aan klopt?

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 17:23
Ik heb de code even aangepast, maar zie niet wat het probleem is:

PHP:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//if($included != 1){
//    die(header("Location: ../"));
//}

echo '<pre>';
print_r($_POST);
echo '</pre>';

echo '<h3>Afspraak Maken</h3>
        <form method="post" action="?pagina=afspraak">
                <table>
                    <tr>';
                //$query = "SELECT * FROM `docenten` ORDER BY `id` ASC;";
                $docenten = array(
                        array('id' => 1, 'naam' => 'docent 1', 'afkorting' => 'doc1'),
                        array('id' => 2, 'naam' => 'docent 2', 'afkorting' => 'doc2'), 
                        array('id' => 3, 'naam' => 'docent 3', 'afkorting' => 'doc3')
                );
                //$result = mysql_query($query);
                $tr=1;
                $i=1;
                //while($fetch = mysql_fetch_assoc($result)){
                foreach ($docenten as $fetch) {
                    echo "\n\t\t\t\t\t\t".'
                        <td>
                            '.ucwords($fetch['naam']).' ('.$i.')
                        </td>
                        <td>
                            ('.$fetch['afkorting'].')
                        </td>
                        <td>
                            <input name="checkbox[]" type="checkbox" value="'.$fetch['id'].'" />
                        </td>
                        <td style="width: 15px;">

                        </td>';
                            if($tr%3 == 0){
                                echo "\n\t\t\t\t\t".'</tr>';
                                echo "\n\t\t\t\t\t".'<tr>';
                            }
                            $tr++;
                            $i++;
                        }
            echo '
                </table>
            <input type="submit" name="button" value="Selecteer" />
        </form>';
?>


Als ik ze alle 3 aanklik krijg ik:
code:
1
2
3
4
5
6
7
8
9
10
11
Array
(
    [checkbox] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [button] => Selecteer
)


Als ik de eerste aanklik krijg ik:
code:
1
2
3
4
5
6
7
8
9
Array
(
    [checkbox] => Array
        (
            [0] => 1
        )

    [button] => Selecteer
)

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
En wat klopt daar dan niet aan volgens jou? Want dat is precies zoals een checkbox werkt, je krijgt alleen terug wat wel is aangevinkt. Wat je niet aanvinkt, komt ook niet terug in je $_POST.

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Lijkt me gewoon een kwestie van:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
  $checkbox = $_POST['checkbox'];
  if(empty($checkbox)) 
  {
    echo("Niets gekozen");
  } 
  else 
  {
    $N = count($checkbox);

    echo("Je hebt $N checkbox(en) gekozen:");
    for($i=0; $i < $N; $i++)
    {
      echo($checkbox[$i] . " ");
    }
  }
?>


Die $_POST die je include staat voor zover ik kan zien totaal los van het form wat je wil verwerken..

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 17:23
@Huhu: Ik ben niet de topicstarter en ik ben het ook met je eens, ik zie ook wat wat er niet goed zou zijn, want dit is gewoon correcte output. :)

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • WackOo
  • Registratie: Januari 2005
  • Laatst online: 25-08 13:48
Ik snap dat deze alleen gepost wordt als deze aangevinkt is.
Als ik een print_r() op een $_POST doe krijg ik het volgende:
code:
1
2
3
4
5
Array
(
    [checkbox] => 
    [button] => Selecteer
)

Dus de array met id's wordt niet aangemaakt maar de post checkbox bestaat wel, Ik verwacht het volgende resultaat:
code:
1
2
3
4
5
6
7
8
9
10
11
Array
(
    [checkbox] => Array
        (
            [0] => 14
            [1] => 25
            [2] => 27
            [3] => 30
        )
    [button] => Selecteer
)

Acties:
  • 0 Henk 'm!

  • WackOo
  • Registratie: Januari 2005
  • Laatst online: 25-08 13:48
Heb het probleem al opgelost, ik had in mijn index.php dus nog een foreach staan op de $_POST
waardoor hij dus de id's niet poste, bedankt voor de suggesties. Had er niet meer bij stil gestaan
dat die foreach er stond.

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 17:23
Opgelost dus. Waarom post je niet de code die problemen geeft. :?

[ Voor 85% gewijzigd door Jaap-Jan op 14-12-2009 13:53 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Overschrijf je nergens per ongeluk de $_POST['checkbox']? Heb je misschien register_globals aan staan en gebruik je $_SESSION['checkbox'] bijvoorbeeld ook? Heb je nog andere code waar $_POST['checkbox'] gebruikt wordt en heb je daar misschien een = in plaats van een == geschreven? Doe eens een var_dump in plaats van een print_r?

edit:
* NMe moet F5-en voordat hij post. 8)7

[ Voor 8% gewijzigd door NMe op 14-12-2009 13:56 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Jaap-Jan schreef op maandag 14 december 2009 @ 13:42:
@Huhu: Ik ben niet de topicstarter.
Ow... ik keek ff scheef :D.
Pagina: 1