checkboxes opslaan in de database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marc rc is as

Marc rc is as

27/09/2010 16:03:26
Quote Anchor link
In een formulier staan een aantal checkboxes.
De waarde daarvan komt uit een andere tabel en haal ik als volgt op:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
                  $sql
= "SELECT DISTINCT Groep_Naam FROM groep ";
                  $resulaat = mysql_query($sql);
                  while($rij = mysql_fetch_assoc($resulaat)){
                      extract($rij);
            echo "<input type='checkbox' class='check' name='groep[$Groep_Naam]' value='$Groep_Naam'> $Groep_Naam\n";
                        echo "<br \>\n";
                }

                ?>


Na vezenden haal ik de waarde als volgt op:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
foreach($_REQUEST['groep'] as $key => $Groep_Naam) {
        $Groep_Naam . $_REQUEST['groep'][$key];
    }


Het probleem is nu dat als iemand meerdere checkboxes gebruikt alleen de laatste wordt opgelsagen in de datbase in het veld Groep_Naam.

Hoe kan ik er voor zorgen dat alle waarde worden opgeslagen? Wel zodat ik ze later natuurlijk nog kan afzonderlijk kan gebruiken.
Voor elke waarde een veld opnemen is geen optie omdat die groepen regelmatig worden aangepast.
 
PHP hulp

PHP hulp

20/04/2024 14:59:05
 

27/09/2010 16:07:03
Quote Anchor link
- Foutafhandeling.
- Variabelen buiten quotes.
- Extract lijkt mij niet nodig.
- Gebruik $_POST of $_GET, geen $_REQUEST.
- Waar slaat $Groep_Naam . $_REQUEST['groep'][$key] op?
- foreach & array.

Hoe ziet je databasemodel eruit?
Gewijzigd op 27/09/2010 16:07:41 door
 
Marc rc is as

Marc rc is as

27/09/2010 16:33:36
Quote Anchor link
Quote:
-Foutafhandeling.

Bedoel je
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
error_reporting(E_ALL);
?>

Dat staat er in! Geen errors.

Quote:
- Variabelen buiten quotes.


Zo dan?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<tr>
    <td width="175">Behoort tot groep:</td>
    <td width="330"><?php
                  $sqlg
= "SELECT DISTINCT Groep_Naam FROM groep ";
                  $resulaat3 = mysql_query($sqlg);
                  while($rij3 = mysql_fetch_assoc($resulaat3)){
                      extract($rij3);?>

            <input type="checkbox" class="check" name="<?php echo 'groep[$Groep_Naam]'?>" value="<?php echo $Groep_Naam ?>" /><?php echo $Groep_Naam ?>;
                        <br \>
            <?php
                }
                ?>

    </td>
  </tr>


Quote:
- Extract lijkt mij niet nodig.


Hoe dan wel?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
- Gebruik $_POST of $_GET, geen $_REQUEST.

Zal ik doen! Waarom geen $_REQUEST, ik heb dat zo geleerd.

Quote:
- Waar slaat $Groep_Naam . $_REQUEST['groep'][$key] op?



Tja wist ik het maar, ik heb dit van een voorbeeld om het te tonen met echo's. Deze:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
  echo '<ul>';
    foreach($_POST['naam'] as $key => $naam) {
        echo '<li>'.$naam.' - '.$_POST['groep'][$key].'</li>';
    }
    echo '</ul>';


Quote:
Hoe ziet je databasemodel eruit?


Leden: hierin staan alle naw gegevens van de leden.
Groep: hierin staan de groepen waartoe de leden kunnen behoren.

Bijv.
Lid 1 kan behoren tot groep "bestuur" en "feestcommissie"
Lid 2 tot "bestuur" en "activiteitencommissie" enz.
 
- SanThe -

- SanThe -

27/09/2010 16:44:07
Quote Anchor link
Ik denk dat je eerst moet normaliseren en daarin ook een koppeltabel moet zetten.
 
Marc rc is as

Marc rc is as

27/09/2010 16:47:55
Quote Anchor link
Tja, oké en hoe doe ik dat?
 
- SanThe -

- SanThe -

27/09/2010 16:54:10
Quote Anchor link
Door rechts bovenin 'normaliseren' in te tikken en de tutorials te lezen.
 
Marc rc is as

Marc rc is as

27/09/2010 17:32:07
Quote Anchor link
Normaliseren is tot voor deze functie volgens mij wel oké.

Ik denk dat ik nu een tabel moet aanmaken met

LEDEN_GROEP
Lid_ID
Groep_ID

Maar hoe kan ik er voor zorgen dat er uit dat formulier dan ook die twee op slaat.
en dat herhaald bij meerdere groepen per lid.

Onderstaand het complete script. (behalve wat in de <HEAD> en er boven staat)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<?php
            if(!isset($_POST['verzenden'])){
        ?>

<fieldset><legend>Leden toevoegen</legend>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="form1">
<table width="505" border="0">
  <tr>
    <td width="175">Voornaam:</td>
    <td width="330"><input type="text" name="Voornaam" id="Voornaam" /></td>
  </tr>
  <tr>
    <td width="175">Tussenvoegsel:</td>
    <td width="330"><input type="text" name="Tussenvoegsel" id="Tussenvoegsel" /></td>
  </tr>
  <tr>
    <td width="175">Achternaam:</td>
    <td width="330"><input type="text" name="Achternaam" id="Achternaam" /></td>
  </tr>
  <tr>
    <td width="175">Adres:</td>
    <td width="330"><input type="text" name="Adres" id="Adres" /></td>
  </tr>
  <tr>
    <td width="175">Postcode:</td>
    <td width="330"><input type="text" name="Postcode" id="Postcode" /></td>
  </tr>
  <tr>
    <td width="175">Woonplaats:</td>
    <td width="330"><input type="text" name="Woonplaats" id="Woonplaats" /></td>
  </tr>
  <tr>
    <td width="175">Telefoon:</td>
    <td width="330"><input type="text" name="Telefoon" id="Telefoon" /></td>
  </tr>
  <tr>
    <td width="175">GSM:</td>
    <td width="330"><input type="text" name="GSM" id="GSM" /></td>
  </tr>
  
  <tr>
    <td width="175">E-mail:</td>
    <td width="330"><input type="text" name="Email" id="Email" /></td>
  </tr>
   <tr>
    <td width="175">Geboortedatum:</td>
    <td width="330">
    
    <input class="datum1" name="Geboortedag" type="text" id="Geboortedag" size="2" maxlength="2" /> -
    <input class="datum1" name="Geboortemaand" type="text" id="Geboortemaand" size="2" maxlength="2" /> -
    <input class="datum2" name="Geboortejaar" type="text" id="Geboortejaar" size="4" maxlength="4" />
    <em>als 20-05-2012</em>
    </td>
  </tr>
  <tr>
    <td width="175">lid vanaf:</td>
    <td width="330">
    <input class="datum1" name="Liddag" type="text" id="Liddag" size="2" maxlength="2" /> -
    <input class="datum1" name="Lidmaand" type="text" id="Lidmaand" size="2" maxlength="2" /> -
    <input class="datum2" name="Lidjaar" type="text" id="Lidjaar" size="4" maxlength="4" />
    <em>als 20-05-2012</em>
    </td>
  </tr>
  <tr>
    <td width="175">Instrument:</td>
    <td width="330"><select name="Instrument" id="Instrument"><?php
                  $sqli
= "SELECT Instrument_ID, Instrument_Naam
                                        FROM instrument
                                        ORDER BY Instrument_Naam "
;
                  $resulaat1 = mysql_query($sqli);
                  while($rij1 = mysql_fetch_array($resulaat1)){
                      echo '<option value="'. $rij1['Instrument_ID'] . '">' . $rij1['Instrument_Naam'] . '</option>';
                }

                ?>

    </select>
    </td>
  </tr>
  <tr>
    <td width="175">Status:</td>
    <td width="330"><select name="Status" id="Status"><?php
                  $sqls
= "SELECT Status_ID, Status_Status
                                     FROM status "
;
                  $resulaat2 = mysql_query($sqls);
                  while($rij2 = mysql_fetch_array($resulaat2)){
                      echo '<option value="'. $rij2['Status_ID'] . '">' . $rij2['Status_Status'] . '</option>';
                }

                ?>

    </select>
    </td>
  </tr>
  <tr>
    <td width="175">Behoort tot groep:</td>
    <td width="330"><?php
                  $sqlg
= "SELECT DISTINCT Groep_Naam FROM groep ";
                  $resulaat3 = mysql_query($sqlg);
                  while($rij3 = mysql_fetch_assoc($resulaat3)){
                      extract($rij3);?>

            <input type="checkbox" class="check" name="<?php echo 'groep[$Groep_Naam]'?>" value="<?php echo $Groep_Naam ?>" /><?php echo $Groep_Naam ?>;
                        <br \>
            <?php
                }
                ?>

    </td>
  </tr>
  <tr>
               <td width="175">Bijzonderheden:</td>
            <td width="330"><textarea name="Bijzonderheden" id="Bijzonderheden" cols="40" rows="6"></textarea></td>
      </tr>
  <tr>
    <td width="175">&nbsp;</td>
    <td width="330">&nbsp;</td>
  </tr>
  <tr>
    <td width="175"><label>
      <input name="verzenden" type="submit" class="button" id="verzenden" value="Opslaan" />
    </label></td>
    <td width="330"><label>
      <input name="reset" type="reset" class="button" id="reset" value="Wissen" />
    </label></td>
  </tr>
</table>

</form></fieldset>
<?php
        }else{     // hier komt de verwerking van het formulier.
        
        //eerst die datumvelden aan elkaar maken.

        
        $geboortedag = $_POST['Geboortedag'];
        $geboortemaand = $_POST['Geboortemaand'];
        $geboortejaar = $_POST['Geboortejaar'];
        $geboortedatum = $geboortejaar . '-' . $geboortemaand . '-' . $geboortedag;
        
        $liddag = $_POST['Liddag'];
        $lidmaand = $_POST['Lidmaand'];
        $lidjaar = $_POST['Lidjaar'];
        $datumlid = $lidjaar . '-' . $lidmaand . '-' . $liddag;
        
        $Lid_Voornaam = $_POST['Voornaam'];
        $Lid_Tussenvoegsel = $_POST['Tussenvoegsel'];
        $Lid_Achternaam = $_POST['Achternaam'];
        $Lid_Adres = $_POST['Adres'];
        $Lid_Postcode = $_POST['Postcode'];
        $Lid_Woonplaats = $_POST['Woonplaats'];
        $Lid_Telefoon = $_POST['Telefoon'];
        $Lid_GSM = $_POST['GSM'];
        $Lid_Email = $_POST['Email'];
        $Lid_Geboortedatum = $geboortedatum;
        $Lid_Datumlid = $datumlid;
        $Lid_Status = $_POST['Status'];
        $Lid_Instrument = $_POST['Instrument'];
        foreach($_POST['groep'] as $key => $Groep_Naam) {
        $Groep_Naam . $_POST['groep'][$key];
    }

        $Lid_Bijzonderheden = $_POST['Bijzonderheden'];
        
        $sql = "INSERT INTO leden (Lid_ID, Lid_Voornaam, Lid_Tussenvoegsel, Lid_Achternaam, Lid_Adres, Lid_Postcode, Lid_Woonplaats, Lid_Telefoon, Lid_GSM, Lid_Mail, Lid_Geboortedatum, Lid_Datumlid, Status_ID, Instrument_ID, Groep_Naam, Lid_Bijzonderheden) VALUES ('','$Lid_Voornaam', '$Lid_Tussenvoegsel', '$Lid_Achternaam', '$Lid_Adres', '$Lid_Postcode', '$Lid_Woonplaats', '$Lid_Telefoon', '$Lid_GSM', '$Lid_Email', '$Lid_Geboortedatum', '$Lid_Datumlid', '$Lid_Status', '$Lid_Instrument', '$Groep_Naam', '$Lid_Bijzonderheden')";


        if(!mysql_query($sql)){
            echo '<p class="red">Het nieuwe lid werd niet toegevoegd</p>';
        }
else{
            echo '<p>Het nieuwe lid werd correct toegevoegd <br /></p>';
            echo '<a class="normal" href="leden_toevoegen.php">Nog een lid toevoegen</a>';
        }

        mysql_close($db);
        }
    
        ?>
 

27/09/2010 18:46:51
Quote Anchor link
Ikke weet nog steeds niet hoe je datamodel (of ERD w/e) eruit ziet, dus ik kan niet zeggen hoe jij je database moet inrichten.
Jij blijkbaar nu ook niet. Dus is het misschien slim om dat effe te gaan maken zodat je zelf ook kan zien hoe je het moet doen...
 
Marc rc is as

Marc rc is as

27/09/2010 19:16:48
Quote Anchor link
Voor deze gegevens is het volgende aangemaakt.
Ik weet dat die Groep_Naam in de eerste tabel niet is zoals het moet, maar weet niet hoe ik het anders moet aanpakken, vandaar ook deze vraag.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
-- Tabelstructuur voor tabel `leden`
--

CREATE TABLE IF NOT EXISTS `leden` (
  `Lid_ID` int(11) NOT NULL auto_increment,
  `Lid_Voornaam` varchar(25) NOT NULL,
  `Lid_Tussenvoegsel` varchar(10) NOT NULL,
  `Lid_Achternaam` varchar(25) NOT NULL,
  `Lid_Adres` varchar(40) NOT NULL,
  `Lid_Postcode` varchar(7) NOT NULL,
  `Lid_Woonplaats` varchar(25) NOT NULL,
  `Lid_Telefoon` varchar(11) NOT NULL,
  `Lid_GSM` varchar(11) NOT NULL,
  `Lid_Mail` varchar(40) NOT NULL,
  `Lid_Geboortedatum` date NOT NULL,
  `Lid_Datumlid` date NOT NULL,
  `Status_ID` int(11) NOT NULL,
  `Instrument_ID` int(11) NOT NULL,
  `Groep_Naam` varchar(50) NOT NULL,
  `Lid_Bijzonderheden` text NOT NULL,
  PRIMARY KEY  (`Lid_ID`),
  UNIQUE KEY `Lid_ID` (`Lid_ID`)

----------------------------------------------------------------------------

-- Tabelstructuur voor tabel `status`
--

CREATE TABLE IF NOT EXISTS `status` (
  `Status_ID` int(11) NOT NULL auto_increment,
  `Status_Status` varchar(20) character set latin1 NOT NULL,
  PRIMARY KEY  (`Status_ID`)

----------------------------------------------------------------------------
-- Tabelstructuur voor tabel `instrument`
--

CREATE TABLE IF NOT EXISTS `instrument` (
  `Instrument_ID` int(11) NOT NULL auto_increment,
  `Instrument_Naam` varchar(20) NOT NULL,
  PRIMARY KEY  (`Instrument_ID`)

-----------------------------------------------------------------------------

-- Tabelstructuur voor tabel `groep`
--

CREATE TABLE IF NOT EXISTS `groep` (
  `Groep_ID` int(3) NOT NULL auto_increment,
  `Groep_Naam` varchar(20) character set utf8 NOT NULL,
  PRIMARY KEY  (`Groep_ID`)
 

27/09/2010 19:21:57
Quote Anchor link
Je moet nog eens naar dat normaliseren kijken, of een boek zoals sql in de praktijk of inleiding dbms kopen / lenen.
Nu heb je redunantie.
Verder klopt je n:m relatie ook nog niet echt.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.