Implode / Explode vraag

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Allard Keij

Allard Keij

06/11/2013 14:45:22
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
foreach ($_POST['soort'] as $_soort)
    {

        $checksoort[] = $_soort;
    }
  
    $soort = implode(',', $checksoort);
?>


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
 
PHP hulp

PHP hulp

23/11/2024 14:11:01
 
Michael -

Michael -

06/11/2013 14:51:07
Quote Anchor link
Persoonlijk vind ik je vraag wat onduidelijk.
Schrijf je nou al die getallen als 1 regel naar de database?
Anders zou je ook af moeten vragen of je dat überhaupt wil.

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
<?php
$str
= '1,2,3,4,5,6,7,8,9';

/*
explode() maakt van een string een Array()
*/

$getallen = explode(',', $str);

/*
Om deze Array() uit te kunnen lees kun je bijvoorbeeld foreach gebruiken
*/

foreach($getallen AS $getal)
{

    echo $getal . '<br />';
}

?>
 
Allard Keij

Allard Keij

06/11/2013 14:54:19
Quote Anchor link
Michael, bedankt voor je reactie ik ga er even naar kijken.

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!
 
Michael -

Michael -

06/11/2013 15:01:20
Quote Anchor link
Het makkelijkste is gewoon een database 'checkboxes' aan te maken met daarin ID en NAME en hier sla je jou checkboxes in op. Vervolgens kun je deze ook veel makkelijker ophalen met een while-loop.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
while($row = $res->fetch_assoc())
{

    echo '<input type="checkbox" name="'. $row['name']. '" id="'. $row['id'] .'" /><br />';
}

?>


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 -
 
Dos Moonen

Dos Moonen

06/11/2013 15:17:36
Quote Anchor link
Mocht je niet gaan normaliseren op database niveau (michael's suggestie), dan zou je misschien naar serialize() willen kijken. Mogelijk is dat geschikter dan implode(). Je beschrijving is nogal vaag, dus met zekerheid kan ik het niet zeggen.

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
 
Pipo Clown

Pipo Clown

06/11/2013 15:22:15
Quote Anchor link
Maak m.b.v. de foreach loop een array van array's aan.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
 
Allard Keij

Allard Keij

06/11/2013 15:44:17
Quote Anchor link
Ik ben gegaan voor de manier van Michael. Dit is voor mij de makkelijkste.

Ik heb mijn checkboxes al in de database staan:
Quote:
id soort
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 />';
}


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
 
Michael -

Michael -

06/11/2013 15:49:14
Quote Anchor link
Ah ik dacht dat je het nou toch los ging opslaan.
Je slaat de opties dus wel als 1 regel op, maar de namen en id's staan vervolgens in een andere tabel?

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
<?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 />';
        }
    }
}

?>

Geen idee of het werkt. Niet getest. Typefouten voorbehouden :)
Gewijzigd op 06/11/2013 16:04:36 door Michael -
 
Allard Keij

Allard Keij

06/11/2013 15:57:14
Quote Anchor link
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 ).
Gewijzigd op 06/11/2013 15:57:59 door Allard Keij
 
Michael -

Michael -

06/11/2013 16:03:48
Quote Anchor link
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 ).

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:

Trouwens je ene tabel is wel goed hoor
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
id    soort
1    Banaan
2    Appel
3    Peer
4    Sinaasappel
5    Meloen
6    Granaatappel

Alleen het opslaan van 1,3,5 niet.
Gewijzigd op 06/11/2013 16:09:58 door Michael -
 
Dos Moonen

Dos Moonen

06/11/2013 16:27:00
Quote Anchor link
Tabel checkboxes:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
id (primary_key)    soort
1    Banaan
2    Appel
3    Peer
4    Sinaasappel
5    Meloen
6    Granaatappel


Tabel iets_checkboxes:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
iets_id (foreign_key)    checkbox_id (foreign_key)
1    2
1    5
1    6
2    1
2    4
3    2
4    3
4    6


Query zal iets worden als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT checkboxes.id as id, checkboxes.soort as soort FROM iets_checkboxes JOIN checkboxes ON (iets_checkboxes.checkbox_id = checkboxes.id) WHERE iets_checkboxes.iets_id = ?
 
Michael -

Michael -

06/11/2013 17:12:06
Quote Anchor link
Dos +1 / Like
 
Frank Nietbelangrijk

Frank Nietbelangrijk

06/11/2013 18:25:21
Quote Anchor link
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.
 



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.