Implode / Explode vraag
Ik ben pas bekend dat er een functie implode en explode bestaat. Na veel gelezen te hebben kom ik er toch niet helemaal uit en kan ik wel wat hulp gebruiken.
Ik schrijf getallen weg naar de database doormiddel van de implode:
Code (php)
Hiermee krijg ik netjes wat ik wil in mijn database.
De checkboxes geven namelijk de nummers aan.
Het word weg geschreven als 1,2,3 enz.
Nu wil ik deze getallen er weer uit halen en er een tekst aan geven.
Oftewel
1 = Naam 1
2 = Naam 3
3 = Naam 4
Deze namen staan ook weer in de database onder ID en NAAM waar het ID dus aansluit op de nummers hierboven.
Hoe kom ik hier precies? Moet ik hier dan weer explode gebruiken? En zoja, hoe precies ( zelf krijg ik het er niet goed uit ).
Alvast bedankt!
Graag volgende keren alle codes tussen de code- of php-tags zetten aub.[/modedit]
Gewijzigd op 06/11/2013 21:10:04 door Nick Dijkstra
Schrijf je nou al die getallen als 1 regel naar de database?
Anders zou je ook af moeten vragen of je dat überhaupt wil.
Ik schrijf ze inderdaad weg als 1 regel.
Waarom? Ik heb enkele checkboxes ( 6 op dit moment ). Hiermee kan een keuze gemaakt worden en die keuzes moeten de database ingezet worden.
Deze checkboxes zijn onderdeel van een beheer systeem waar er extra checkboxes aangemaakt kunnen worden. Zo is het nooit hetzelfde en kunnen de id's veranderen, vermeerderen en verminderen. Vandaar dat ik besloten heb om het in één regel weg te schrijven en bij uitlezen de actuele info uit de database te halen ( oftewel de benamingen die bij de id's / checkboxes horen. )
Heb je eventueel suggesties hoe ik dit anders kan doen als dit geen goede optie lijkt in jou opinie?
Alvast weer bedankt!
Code (php)
Beter is dan om je ID de stempel 'unique' mee te geven in je database, zodat je nooit 2 de zelfde checkboxes krijgt. Hoeveel checkboxes je dan hebt of verwijdert of toevoegt is niet belangrijk.
Gewijzigd op 06/11/2013 15:03:37 door Michael -
PS. voor het normaliseren op database niveau heb je dan waarschijnlijk een koppel tabel nodig.
Gewijzigd op 06/11/2013 15:26:32 door Dos Moonen
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
$main = array();
Foreach {
$sub = array()
$sub['id'] = ;
$sub['naam'] = ;
$main[] = $sub;
}
$datastring = JSON_decode($main);
Op deze manier krijg je een JSON string welke je zo in de database weg kunt schrijven.
Na teruglezen van deze string uit de database kun je met JSON_encode weer de array structuur terug halen en kan je de variabelen weer afvragen m.b.v. de indexes.
Foreach {
$sub = array()
$sub['id'] = ;
$sub['naam'] = ;
$main[] = $sub;
}
$datastring = JSON_decode($main);
Op deze manier krijg je een JSON string welke je zo in de database weg kunt schrijven.
Na teruglezen van deze string uit de database kun je met JSON_encode weer de array structuur terug halen en kan je de variabelen weer afvragen m.b.v. de indexes.
Ik heb mijn checkboxes al in de database staan:
Quote:
id soort
1 Banaan
2 Appel
3 Peer
4 Sinaasappel
5 Meloen
6 Granaatappel
1 Banaan
2 Appel
3 Peer
4 Sinaasappel
5 Meloen
6 Granaatappel
Als ik kies Banaan en meloen word er weg geschreven: 1,5
Nu kan ik ze uitlezen op Michael zijn manier:
Quote:
$getsoorten = $list->soortid;
$getallen = explode(',', $getsoorten);
foreach($getallen AS $getal)
{
echo $getal . '<br />';
}
$getallen = explode(',', $getsoorten);
foreach($getallen AS $getal)
{
echo $getal . '<br />';
}
Dit zet de nummers netjes onder elkaar.
Nu moet ik dus nog Banaan en Meloen terug kunnen krijgen uit het tabel van de checkboxes.
De keuzes zelf die weg geschreven worden als 1,5 worden in een ander tabel weg geschreven dan de checkboxes staan.
Gewijzigd op 06/11/2013 15:49:22 door Allard Keij
Je slaat de opties dus wel als 1 regel op, maar de namen en id's staan vervolgens in een andere tabel?
Code (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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$sql = "SELECT id,name FROM checkboxes";
$res = $mysqli->query($sql);
if($res)
{
while($row = $res->fetch_assoc())
{
$opties[$row['id']] = $row['name'];
}
}
$getsoorten = $list->soortid;
$getallen = explode(',', $getsoorten);
foreach($getallen AS $getal)
{
foreach($opties AS $id=>$name)
{
if($getal == $id)
{
echo $id . ' - ' . $name . '<br />';
}
}
}
?>
$sql = "SELECT id,name FROM checkboxes";
$res = $mysqli->query($sql);
if($res)
{
while($row = $res->fetch_assoc())
{
$opties[$row['id']] = $row['name'];
}
}
$getsoorten = $list->soortid;
$getallen = explode(',', $getsoorten);
foreach($getallen AS $getal)
{
foreach($opties AS $id=>$name)
{
if($getal == $id)
{
echo $id . ' - ' . $name . '<br />';
}
}
}
?>
Geen idee of het werkt. Niet getest. Typefouten voorbehouden :)
Gewijzigd op 06/11/2013 16:04:36 door Michael -
De checkboxes staan in de database zoals in mijn laatste post omschreven weggeschreven.
De keuzen worden vervolgens weg geschreven in een ander tabel in één regel ( 1,3 / 1,5,6 enz. ). Die hoort namelijk bij een laten we het noemen product. Elk product word dus niet aangemaakt en worden checkboxes geselecteerd. Vandaar dat ze lost staan. De checkboxes kunnen namelijk in het admin panel ook toegevoegd worden ( door een nieuw id weg te schrijven + de naam die ingetypt is ).
Gewijzigd op 06/11/2013 15:57:59 door Allard Keij
Allard Keij op 06/11/2013 15:57:14:
Je update tijdens mijn edit. Ik ga het proberen!
De checkboxes staan in de database zoals in mijn laatste post omschreven weggeschreven.
De keuzen worden vervolgens weg geschreven in een ander tabel in één regel ( 1,3 / 1,5,6 enz. ). Die hoort namelijk bij een laten we het noemen product. Elk product word dus niet aangemaakt en worden checkboxes geselecteerd. Vandaar dat ze lost staan. De checkboxes kunnen namelijk in het admin panel ook toegevoegd worden ( door een nieuw id weg te schrijven + de naam die ingetypt is ).
De checkboxes staan in de database zoals in mijn laatste post omschreven weggeschreven.
De keuzen worden vervolgens weg geschreven in een ander tabel in één regel ( 1,3 / 1,5,6 enz. ). Die hoort namelijk bij een laten we het noemen product. Elk product word dus niet aangemaakt en worden checkboxes geselecteerd. Vandaar dat ze lost staan. De checkboxes kunnen namelijk in het admin panel ook toegevoegd worden ( door een nieuw id weg te schrijven + de naam die ingetypt is ).
Ik snap het. Begrijp wel dat dit niet onder 'normaliseren' valt en als je de tabellen mogelijk anders zou opbouwen je deze 'trucjes' als bovenstaand niet hoeft te doen. Dan zou je met een SELECT en JOIN (2 tabellen koppelen) de juiste resultaten al moeten krijgen, maar misschien is dit te hoog gegrepen en moet je dit eens proberen in een volgend project.
Edit:
Gewijzigd op 06/11/2013 16:09:58 door Michael -
Tabel iets_checkboxes:
Query zal iets worden als:
Dos +1 / Like
Ook van mijn kant het keiharde advies om de database te normaliseren en dus anders in te delen zoals Dos Moonen aangeeft. Ik kan ook uitleggen waarom. Later wil je gaan kijken wie checkbox nummer 5 aan had staan. Je moet dan alle records van de database doorlopen en ieder record dan exploden om te zien of checkbox 5 aan of uit is. terwijl je in een goed genormaliseerde database alleen één query hoeft te maken die het werk uit handen neemt.