Checkboxen
Ik heb een database waar ik uit haal via 1 of 0 of iemand admin is of niet. Dan wil ik dit in een checkbox echo'en. Dit lukt. Dan wil ik dat als ik die checkbox uit zet via een query dat laten veranderen in de database.
Het probleem:
Ik krijg niet in een variable of de checkbox gecheckt is of niet.
Ik heb hierop gegoogled en ben op een stukje code uitgekomen dat bij mij gewoon niet werkt, maar ik denk dat het wel zou moeten werken...
Wat is er mis met deze code:
$nieuwsbrief = 1;
echo '<input type="checkbox" name="nieuwsbrief"';
if($nieuwsbrief == 1) {
echo ' checked';
}
echo ' />';
if(isset($_POST['nieuwbrief'])) {
$nieuwsbrief = 1;
} else {
$nieuwsbrief = 0;
}
if ($nieuwsbrief == 1){
echo "hoi";
}
else {
echo "doei";
}
Dit is even voor mezelf om te kijken of die POST werkt, maar dat doet hij dus duidelijk niet. Hij echo'd gewoon domweg "doei". Als ik weet waarom dit niet werkt kan ik het in mijn eigen code toepassen.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
Gewoon checked kan ook. Dat maakt niets uit heb ik gemerkt. De checkbox verschijnt ook wel gewoon goed en is gecheckt als ik de pagina laadt. Het probleem zit hem in de variable uit de checkbox halen om te kunnen gebruiken in bijvoorbeeld een echo, of wat ik eigelijk wil om te kunnen versturen als 1 of 0 naar mijn database.
Code (php)
checken.
Overigens is checked="checked" XHTML valid en iets anders niet.
Mijn code heb ik even aangepast en dit is het nu:
Code (php)
Wat klopt er dan nog niet?
Gewijzigd op 01/01/1970 01:00:00 door Menno Ridder
Dus weet iemand wat ik hier fout doe?
De fout jouw code is dat je geen formulier hebt aangemaakt. In ieder geval: die is niet te zien in jouw code.
Code (php)
$_POST['nieuwsbrief'] zal pas bestaan als je het formulier verzonden hebt. Maar ik zie in jouw scriptje nergens een submit knop staan die daarvoor kan zorgen?
Bedankt iedereen!
Bumpen::
SanThe.
Code (php)
1
2
3
4
2
3
4
<?php
$checked = $row['Admin'] == 1 ? 'checked="checked"' : '';
echo '<input type="checkbox" name="admin" '.$checked.' />';
?>
$checked = $row['Admin'] == 1 ? 'checked="checked"' : '';
echo '<input type="checkbox" name="admin" '.$checked.' />';
?>
Je controleert dus eerst of iemand een admin is door te kijken of $row['Admin'] gelijk is aan 1. Als dat zo is, zorg je dat de checkbox aangevinkt is...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
while ($row = mysql_fetch_array($result)){
echo " {$row['users']}";
$adminchecked = $row['Admin'] == 1 ? "checked='checked'" : '';
$systeemchecked = $row['Systeembeheer'] == 1 ? "checked='checked'" : '';
echo " <tr>";
echo " <td><input type='checkbox' '.$adminchecked.' /><br /></td>";
echo " <td><input type='checkbox' '.$systeemchecked.' /><br /></td>";
echo " <td><a href='?act=edit&id=".$row[0]." '>[bewerken]</a></td>";
echo " </tr>";
}
?>
while ($row = mysql_fetch_array($result)){
echo " {$row['users']}";
$adminchecked = $row['Admin'] == 1 ? "checked='checked'" : '';
$systeemchecked = $row['Systeembeheer'] == 1 ? "checked='checked'" : '';
echo " <tr>";
echo " <td><input type='checkbox' '.$adminchecked.' /><br /></td>";
echo " <td><input type='checkbox' '.$systeemchecked.' /><br /></td>";
echo " <td><a href='?act=edit&id=".$row[0]." '>[bewerken]</a></td>";
echo " </tr>";
}
?>
Jij gebruikt dubbele quotes voor je echo, dus dan zul je ook dubbele quotes moeten gebruiken om de variabelen buiten quotes te halen. Verder is het ook erg slim om je checkboxen een naam te geven, zeker als je ze later nog in een formulier wilt verzenden.
PS. ik disable de checkboxen, gebruik ze verder niet. Is alleen maar voor een admin panel, eigelijk meer voor de layout zodat mensen geen eentjes en nulletjes te zien krijgen maar een nette checkbox.
je kan wellicht ook een mooi img checkboxje gebruiken...als je hem toch disabled. is maar een tip ;-).
Wel bedankt voor de tip, volgende keer ga ik daar zeker aan denken.
Jan Koehoorn schreef op 07.06.2008 20:09:
De waarde van een checkbox wordt niet verzonden als hij niet aangevinkt is.
@Jan
Je zegt dat de waarde niet wordt verzonden, dus dan is de inhoud van de POST variabele bij die checkbox gewoon Leeg (NULL).
Kan je dan niet beter met de empty functie controleren of de checkbox is aangevinkt, zoals hieronder:
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
@Robert: een checkbox wordt alleen met het formulier meegezonden als deze aangevinkt is. Van een checkbox die niet aangevinkt is, zul je dus ook helemaal niets in de POST array tegenkomen. De functie isset() kun je hier dus ook prima gebruiken ;-)
Maar 'k heb het even getest, isset() is inderdaad ook prima :)