Stom checkbox probleem
Code (php)
Bij het invoeren van de diversen onderdelen heb ik de modellen waarop een onderdeel past, ook gebruikmakend van checkboxen, ingevoerd in een many-to-many tafel (onderdeel_modellen):
Code (php)
1
2
3
4
2
3
4
foreach ($model_id as $model)
{
$this->onderdelen->onderdeel_modellen_toevoegen($onderdeel_id, $model);
}
{
$this->onderdelen->onderdeel_modellen_toevoegen($onderdeel_id, $model);
}
Deze gegevens haal ik vervolgens ten behoeve van de update pagina uit de database:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
public function get_onderdeel_modellen($onderdeel_id)
{
$sql = "SELECT *
FROM onderdeel_modellen
WHERE onderdeel_id = ?";
$stmt = $this->pdo->prepare($sql);
$stmt->execute(array($onderdeel_id));
return $stmt->fetchAll();
}
{
$sql = "SELECT *
FROM onderdeel_modellen
WHERE onderdeel_id = ?";
$stmt = $this->pdo->prepare($sql);
$stmt->execute(array($onderdeel_id));
return $stmt->fetchAll();
}
Waar ik nu mee worstel is hoe ik het juiste aantal checkboxen in de bovenstaande loop gechecked krig op basis van de bovenstaande query. Ik heb een aantal dingen geprobeerd zoals:
Code (php)
Maar ik krijg het niet werkend
Gewijzigd op 11/12/2015 09:07:52 door Donald Boers
Je value is nu $model['model_id'], zou dat niet de 'id' van tabel onderdeel_modellen moeten zijn?
Jan de Laet op 11/12/2015 09:36:06:
Je value is nu $model['model_id'], zou dat niet de 'id' van tabel onderdeel_modellen moeten zijn?
Nee alleen de model_id's die in onderdeel_modellen staan en bij het betreffende product horen dienen gecheked te zijn.
Dit is de data in de tafel modellen die ik gebruik voor het genereren van de model checkboxen:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
INSERT INTO `modellen` (`model_id`, `model`) VALUES
(1, 'A35'),
(2, 'Flexer'),
(3, 'PackR'),
(4, 'Revival'),
(5, 'Standaard'),
(6, 'Youngster');
(1, 'A35'),
(2, 'Flexer'),
(3, 'PackR'),
(4, 'Revival'),
(5, 'Standaard'),
(6, 'Youngster');
en dit is een voorbeeld van data in tafel onderdeel_modellen:
Code (php)
1
2
3
4
2
3
4
INSERT INTO `onderdeel_modellen` (`id`, `onderdeel_id` `model_id`) VALUES
(7, 1, 213),
(8, 2, 213),
(9, 3, 213);
(7, 1, 213),
(8, 2, 213),
(9, 3, 213);
dus bij product 213 dienen alleen de eerste drie van de totaal zes checkboxen gechecked te zijn.
Maakt dit het wat duidelijker
Toevoeging op 11/12/2015 11:45:07:
Ik heb het geprobeerd met een ingesloten foreach loop:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php foreach ($modellen as $model): ?> // foreach loop voor het genereren van de checkboxen
<?php
$checked = array();
foreach ($selected_modellen as $selected):
$checked[] = $selected['model_id'];?>
<?php endforeach; ?>
<input name="model_id[]" type="checkbox" value="<?php echo $model['model_id']; ?>" <?php if ($checked == $model['model_id']): ?>checked<?php endif; ?>>
<?php endforeach; ?>
<?php
$checked = array();
foreach ($selected_modellen as $selected):
$checked[] = $selected['model_id'];?>
<?php endforeach; ?>
<input name="model_id[]" type="checkbox" value="<?php echo $model['model_id']; ?>" <?php if ($checked == $model['model_id']): ?>checked<?php endif; ?>>
<?php endforeach; ?>
Maar helaas zonder resultaat. Wat zie ik over het hoofd?
Gewijzigd op 11/12/2015 10:24:09 door Donald Boers
Zou je voor mij eens een opzet van de arrays '$modellen' en '$selected_modellen' kunnen laten zien?
Dan kan ik er even naar kijken.
PS: conventie tip: in het scriptje waar je de input genereert met daarbij of deze selected is of niet, gebruik je veel < ?php. Persoonlijk zou ik alles in 1 < ?php zetten en de input dus printen / echo'en. Dit is on-the-long-run een stuk efficienter omdat de PHP parser niet voor elke regel moet kijken of hij PHP of HTML voorgeschoteld krijgt en opnieuw moet parsen.
Max
Gewijzigd op 11/12/2015 12:59:14 door Max Vaessen
//Model modellen
//Model onderdeel_modellen
In de Controller
Code (php)
1
2
3
2
3
$onderdeel_id = filter_input(INPUT_POST, 'onderdeel_id', FILTER_SANITIZE_NUMBER_INT);
$selected_modellen = $this->artikelen->get_selected_modellen($onderdeel_id);
$modellen = $this->artikelen->get_modellen_dropdown();
$selected_modellen = $this->artikelen->get_selected_modellen($onderdeel_id);
$modellen = $this->artikelen->get_modellen_dropdown();
Waarbij $selected_modellen en $modellen uiteraard naar de view gaan. Is dit voldoende info?
Gewijzigd op 11/12/2015 13:29:48 door Donald Boers
Bij 213 is onderdeel en 1 is model_id
Gewijzigd op 11/12/2015 13:41:48 door Jan de Laet
Zou je voor mij eens een print_r(); willen doen van de arrays die je in je controller hebt staan? Dan kan ik de situatie iets gemakkelijker nabootsen, dan op wat uitleg afgaan (foutgevoelig, ook van mijn kant) :)
Max Vaessen op 11/12/2015 13:42:24:
Hoi Donald,
Zou je voor mij eens een print_r(); willen doen van de arrays die je in je controller hebt staan? Dan kan ik de situatie iets gemakkelijker nabootsen, dan op wat uitleg afgaan (foutgevoelig, ook van mijn kant) :)
Zou je voor mij eens een print_r(); willen doen van de arrays die je in je controller hebt staan? Dan kan ik de situatie iets gemakkelijker nabootsen, dan op wat uitleg afgaan (foutgevoelig, ook van mijn kant) :)
Hoi Max. Ik ben er uit. In de Controller heb ik met de resultaten van de selected_modellen een nieuwe array samengesteld:
Code (php)
1
2
3
4
5
2
3
4
5
$id = array();
foreach ($selected_modellen as $selected)
{
$id[] = $selected['model_id'];
}
foreach ($selected_modellen as $selected)
{
$id[] = $selected['model_id'];
}
en vervolgens de $id array naar de view gestuurd inplaats van $selected_modellen en dan in de view:
Code (php)
Hartelijk dank voor je tijd en input. Heeft me reuze geholpen
Gewijzigd op 11/12/2015 14:40:40 door Donald Boers
Zo veel had ik nog niet gedaan :), maar fijn dat je geholpen bent!
Succes!
Gewijzigd op 11/12/2015 14:47:39 door Max Vaessen