Array naar database.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mr.Ark

Mr.Ark

29/07/2009 16:38:00
Quote Anchor link
Beste mensen,

Omdat ik haast nooit met array's werk stuit ik nu op een probleem.
Ik zou graag willen weten hoe je een array in een database kan zetten.
Ik weet dat je het met en foreach en met explode moet doen.

Zelf dacht ik aan zoiets:

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

/* Errors */
error_reporting(E_ALL);

/* Array dummy */
$array = array('blaat', 'iets', 'nogiets');

/* Foreach loop */
foreach($array as $value)
{

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


?>


Hoe kan ik er nou voor zorgen dat dit goed in de database wordt geplaatst?
Zou iemand mij een voorbeeld kunnen geven hoe het precies wordt gedaan?

Alvast bedankt !
 
PHP hulp

PHP hulp

20/04/2024 16:23:43
 
Jelmer -

Jelmer -

29/07/2009 16:42:00
Quote Anchor link
In plaats van echo $value doe je daar een stukje mysql_query("INSERT INTO ... ") code, en (bijna) klaar ben je :)

Je kan het ook ingewikkelder doen, door één INSERT INTO query te schrijven die meerdere rows tegelijk invoegt. Is wel sneller, maar iets ingewikkelder. Dat zou je kunnen doen door net boven de foreach-lus een string te maken die het begin van je query bevat (INSERT INTO table (veld) VALUES) en daar in de foreach lus telkens ",($value)" aan toe te voegen. Alleen dan moet je weer opletten dat je bij de eerste of laatste keer dat je door de foreach-lus gaat de komma weglaat. Of je vult in de foreach-lus weer een nieuwe array met "($value)" stukjes, en voegt die later aan de rest van je query toe via implode(", ", $stukjes)
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Jason de Ridder

Jason de Ridder

29/07/2009 17:20:00
Quote Anchor link
je kan eventueel serializen... serialize
 
Noppes

Noppes

29/07/2009 18:23:00
Quote Anchor link
Jason, z'n voorstel doen is niet echt de bedoeling denk ik. In een database sla je benaderbare data op!!
Gewijzigd op 01/01/1970 01:00:00 door Noppes
 
Mr.Ark

Mr.Ark

30/07/2009 21:26:00
Quote Anchor link
Ik ben wel eens benieuwd naar de 2e oplossing van Jelmer.

Dit is wat ik tot nu toe heb.

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

        /* Array voor de checkboxes */
        $Array = array($_POST['checkbox']);
        
        /* Begin van de query */
        $Query =
        "
            INSERT INTO
                test
                (
                     Keuze
                )
                VALUES
                
        "
;
        
        /* Foreach loopje om de gegevens voor in de query uit te voeren */
        foreach($Array as $Value)
        {

            $Query .= "('".mysql_real_escape_string(implode(',', $Value))."')";
        }

        
        /* Resultaat van de query */
        $Result = mysql_query($Query);
        
        /* Kijken of de query is gelukt */
        if(!$Result)
        {

            /* Fout in de query */
            echo 'Er is een fout opgetreden in de query, Volgende fout is ontdekt: '.mysql_error();
        }

        else
        {
            /* Query succesvol uitgevoerd */
            echo 'De query is succesvol uitgevoerd.';
        }


?>


Zoals je ziet voert hij maar 1 row toe wat eigenlijk 2 rows moeten zijn omdat er 2 keuze's zijn geselecteerd.

Is dit de juiste manier om dit uit te voeren of raak ik een beetje van het pad af?

Zoals ik al eerder zei, Ben totaal niet bekend om met arrays te werken en zou graag er iets meer over willen weten.

Hopelijk kan iemand mij een beetje verder op weg helpen.
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
 
Nicoow Unknown

Nicoow Unknown

30/07/2009 21:43:00
Quote Anchor link
Je kan hier ook met PDO werken,
Je maakt eerst een prepared statement.
Dan zet je in de foreach de waarde iedere keer goed, en dan voer je de query uit.
 
Mr.Ark

Mr.Ark

30/07/2009 21:56:00
Quote Anchor link
nico schreef op 30.07.2009 21:43:
Je kan hier ook met PDO werken,
Je maakt eerst een prepared statement.
Dan zet je in de foreach de waarde iedere keer goed, en dan voer je de query uit.


Hmmm, Zoek het toch liever in een andere richting.
 
Jelmer -

Jelmer -

30/07/2009 22:05:00
Quote Anchor link
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

$keuzes
= array('taart', 'chips', 'koek', 'chocola');

$sql_keuzes = array();

foreach($keuzes as $keuze)
{

    $sql_keuzes[] = "('" . mysql_real_escape_string($keuze) . "')";
}


$sql_insert = 'INSERT INTO test (keuze) VALUES ' . implode(', ', $sql_keuzes);

echo $sql_insert;

?>

Je kan met $_POST ook nog een trucje uithalen. Als je een naam eindigend met [], de twee haakjes die je ook bij arrays gebruikt, kiest, dan kan je heel gemakkelijk dit doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<input type="checkbox" name="keuzes[]" value="taart">Taart<br>
<input type="checkbox" name="keuzes[]" value="koek">Koek<br>
<input type="checkbox" name="keuzes[]" value="chips">Chips<br>
<input type="checkbox" name="keuzes[]" value="chocola">Chocolade<br>

Wanneer je dit verstuurt krijg je in je PHP de array $_POST[keuzes] met daarin alle aangeklikte waarden als elementen van die array. Oftewel, als je nu al deze checkboxes zou aankruisen en op submit zou drukken, zou $_POST[keuzes] precies dezelfde waarden bevatten als $keuzes hierboven.

edit: quotes in de foreach-lus gefixt (ik ben verwend met prepared statements :P)
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Mr.Ark

Mr.Ark

30/07/2009 22:12:00
Quote Anchor link
@ Jelmer

Bedankt voor je reactie, Ik ga hiermee aan de slag.

Edit:


Hmm, Hier pakt hij dus alleen maar de laatste/hoogste waarde?
Ik bedenk me eigenlijk net dat het niet op deze manier gaat lukken denk ik, Omdat als je 4 checkboxen aanvinkt dan zou die ook 4 query's uit moeten voeren om 4 rows in de database te plaatsen of zie ik dat nu fout?

Dan zou dus de manier om de query in de foreach te zetten het meest logische zijn. Alleen dan stuit je op het probleem als je een fouten afhandeling in de foreach maakt dat je dan 4 x een report krijgt dat de query is gelukt.

Ben benieuwd hoe mensen dit doen...
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
 
Jan Koehoorn

Jan Koehoorn

30/07/2009 22:52:00
Quote Anchor link
Even terzijde:

zet nooit een rijtje waarden, gescheiden door komma's in 1 veld in je database. Dat duidt op een fout datamodel. Het wordt dan bijvoorbeeld erg moeilijk om statistieken uit je database te laten rollen.
 
Mr.Ark

Mr.Ark

30/07/2009 22:59:00
Quote Anchor link
Jan Koehoorn schreef op 30.07.2009 22:52:
Even terzijde:

zet nooit een rijtje waarden, gescheiden door komma's in 1 veld in je database. Dat duidt op een fout datamodel. Het wordt dan bijvoorbeeld erg moeilijk om statistieken uit je database te laten rollen.


Dat snap ik jan. Daarom ben ik benieuwd naar de goede oplossing, Zoals ik vraag in me post (edit) hierboven.
 
Jelmer -

Jelmer -

30/07/2009 23:08:00
Quote Anchor link
Wanneer je al die checkboxes dezelfde naam meegeeft, en die naam eindigt met [] (en niets daartussen!) dan krijg je de waarden van alle aangeklikte checkboxes terug in de vorm van een array in $_POST[naam]. $_POST[naam] is dan dus ook weer een array. Zie maar wat je krijgt wanneer je var_dump($_POST[naam]) doet, en vergelijk dat met var_dump($keuzes).

In die foreach-lus wandel ik $keuzes door, ieder element in $keuzes komt aan de beurt en de waarde wordt dan (tijdelijk) aan $keuze toegekend. Die waarde, nadat hij gefilterd is voor de database, voeg ik samen met haakjes toe aan een nieuwe array, $sql_keuzes. Zie je de dubbele lege haakjes achter $sql_keuzes? Die doen ongeveer hetzelfde als .= bij een string, hij voegt iets toe in plaats van dat hij iets vervangt. $sql_keuzes bevat aan het eind dan ook 4 elementen, maar dan nu plus de haakjes en nodige quotes die mysql_real_escape_string heeft toegevoegd.

Daarna maak ik het begin van het INSERT statement, en voeg ik via implode alle 4 de elementen van $sql_keuzes samen, gescheiden door komma's. implode() geeft dus ook weer een string terug, welke ik dankzij die punt net voor implode() aan de rest van het INSERT statement plak. Uiteindelijk komt het geheel terecht in $sql_insert, en dat is dan je INSERT query die je kan uitvoeren. Deze query probeert 4 elementen tegelijk in te voegen. Het daadwerkelijk uitvoeren van de query stond niet in mijn script omdat je al weet hoe dat moet :)

Kijk voor de aardigheid eens met var_dump naar de waarden van alle variabelen, en vergelijk ze met andere variabelen waarvan je al weet hoe ze eruit zien. Misschien heb je nog wat aan deze tutorial over arrays
 



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.