Database gegevens in een array zetten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Donny Wie weet

Donny Wie weet

20/03/2013 21:58:29
Quote Anchor link
Hoi allemaal,

Ik heb een veld artikelen, en daar staat een record met: DVD, CD, LP.

Nu wil ik deze ophalen en apart plaatsen. Moet ik daar explode voor gebruiken?
 
PHP hulp

PHP hulp

03/08/2020 10:35:20
 
Jan Koehoorn

Jan Koehoorn

20/03/2013 22:02:16
Quote Anchor link
Yep. Maar waarom heb je meerdere waarden in één column?
 
Donny Wie weet

Donny Wie weet

20/03/2013 22:06:05
Quote Anchor link
Omdat als ik 100 artikelen heb die besteld zijn, moet ik 100 velden maken... In een array is dat veel makkelijker.

Heb je een voorbeeld hoe ik dat het beste kan ophalen?
 
Robert Wazzaa

Robert Wazzaa

20/03/2013 22:07:48
Quote Anchor link
Beste Donny,

Je zou een extra tabel kunnen maken welke je doormiddel van een relatie veld koppelt aan je hoofd tabel.

Gr. Robert
 
Donny Wie weet

Donny Wie weet

20/03/2013 22:11:35
Quote Anchor link
Maar hoe haal ik alles op uit die array? Ik krijg het resultaat van de array wel te zien, alleen niet op een aparte regel met foreach
 
Robert Wazzaa

Robert Wazzaa

20/03/2013 22:14:01
Quote Anchor link
als je bijvoorbeeld een array op deze manier hebt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$array = array(
'Dvd',
'Cd',
'Nogiets'
);

//moet je er zo door heen loopen:
foreach ($array as $item){
echo $item . "<br />";
}
Gewijzigd op 20/03/2013 22:14:44 door Robert Wazzaa
 
Frank Nietbelangrijk

Frank Nietbelangrijk

20/03/2013 22:14:10
Quote Anchor link
Robert - op 20/03/2013 22:07:48:
Beste Donny,

Je zou een extra tabel kunnen maken welke je doormiddel van een relatie veld koppelt aan je hoofd tabel.

Gr. Robert


nee, je MOET een extra tabel 'artikelen' aanmaken opdat je later ook daar veel info uit kunt putten.

daarna maak je bij elke SELECT een JOIN om de tabellen aan elkaar te koppelen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT tabel1.kolom1, artikelen.kolom1 FROM tabel1 LEFT JOIN artikelen AS tabel1.artikel_id = artikelen.artikel_id
Gewijzigd op 20/03/2013 22:14:57 door Frank Nietbelangrijk
 
Robert Wazzaa

Robert Wazzaa

20/03/2013 22:15:27
Quote Anchor link
Frank Nietbelangrijk op 20/03/2013 22:14:10:
nee, je MOET een extra tabel 'artikelen' aanmaken opdat je later ook daar veel info uit kunt putten.

daarna maak je bij elke SELECT een JOIN om de tabellen aan elkaar te koppelen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT tabel1.kolom1, artikelen.kolom1 FROM tabel1 LEFT JOIN artikelen AS tabel1.artikel_id = artikelen.artikel_id




'Moeten' is een groot woord haha.
Het blijft altijd een keuze, maar in principe als je een snel script wil kun je beter met een koppeltabel werken.
Gewijzigd op 20/03/2013 22:16:32 door Robert Wazzaa
 
Donny Wie weet

Donny Wie weet

20/03/2013 22:18:53
Quote Anchor link
robert:

Ik heb nu:

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
<?php
include ("settings/connect.php");



if (isset($_POST['watch_order']))
{

    $get_order = $db -> prepare("SELECT COUNT(*) FROM orders WHERE order_number=:order_number");
    $get_order -> bindparam(':order_number', $_POST['order_number']);
    $get_order -> execute();

    if ($get_order -> fetchColumn() == 1){
        echo 'Er is een order gevonden!';
        $show_order = $db->prepare("SELECT * FROM orders WHERE order_number=:order_number");
        $show_order -> bindparam(':order_number',$_POST['order_number']);
        $show_order -> execute();
        $print_order = $show_order -> fetch(PDO::FETCH_ASSOC);


            $order = array($print_order['order_article']);
            echo 'Het bestel nummer van uw factuur: '.$print_order['order_number'].'<br />';
            echo 'Uw bestelling wordt gebracht op: '.$print_order['order_date'].' tussen '. $print_order['order_timestart'].' en ' . $print_order['order_timeend'];
            $articles = explode(',', $order);
            foreach ($i = 0; $i < $articles; $i++){
                echo 'U heeft besteld: '.$articles[$i].'<br />';
            }
    }
else {
        echo 'Uw order is helaas niet gevonden! Weet u zeker dat dit het juiste order nummer is?';
    }
}

?>


Waar gaat het mis?

database waarde voor articles: "DVD Speler","Koelkast","Vriezer",
 
Robert Wazzaa

Robert Wazzaa

20/03/2013 22:19:47
Quote Anchor link
Je gebruikt de foreach fout!

foreach gebruik je alleen als je door alle items in een array loopt.

Wat jij nu doet wilt moet je zo doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
            for ($i = 0; $i < $articles; $i++){
                echo 'U heeft besteld: '.$articles[$i].'<br />';
            }
 
Jan Koehoorn

Jan Koehoorn

20/03/2013 22:23:15
Quote Anchor link
Of:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    foreach ($articles as $a) {
        echo 'U heeft besteld: ' . $a . '<br />';
    }

?>


Toevoeging op 20/03/2013 22:24:14:

@ Robert: die for gaat niet werken. $articles is niet het aantal, maar een array.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

20/03/2013 22:25:10
Quote Anchor link
Robert - op 20/03/2013 22:15:27:
'Moeten' is een groot woord haha.
Het blijft altijd een keuze, maar in principe als je een snel script wil kun je beter met een koppeltabel werken.


Natuurlijk, het is maar om even onze mening duidelijk neer te zetten.

een koppeltabel is alleen nodig naar een many to many relation.
Bij een one to many heb je dat niet nodig.
 
Robert Wazzaa

Robert Wazzaa

20/03/2013 22:26:25
Quote Anchor link
Hey Jan,

Ik zit nu te kijken en je hebt inderdaad gelijk jah, had even vluchtig gekeken.
Maar jou foreach is inderdaad een 'nettere' oplossing.

@donny Mijn manier werkt wel als je de $i < $articles vervangt door $i < count($articles)

Gr. Robert
 
Donny Wie weet

Donny Wie weet

20/03/2013 22:27:36
Quote Anchor link
Werkt geen van beide en dat komt doordat ik vast loop op de explode. 2 parameters, maar ik kan die error niet vinden.

Toevoeging op 20/03/2013 22:29:17:

Ik denk dat het komt omdat ik eerst explode gebruik, en daarna $order gebruik waarin de array staat, en dat de array de 2e parameter is?
 
Robert Wazzaa

Robert Wazzaa

20/03/2013 22:29:22
Quote Anchor link
Beste Donny,

Dat klopt, je moet deze:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$order = array($print_order['order_article']);


vervangen voor dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$order = $print_order['order_article'];


Je kunt namelijk geen explode op een array doen.

Gr. Robert
 
Donny Wie weet

Donny Wie weet

20/03/2013 22:32:03
Quote Anchor link
Dus een dubbele paramater is een functie in een functie? En dat werkt niet?
 
Robert Wazzaa

Robert Wazzaa

20/03/2013 22:33:30
Quote Anchor link
Donny Wie weet op 20/03/2013 22:32:03:
Dus een dubbele paramater is een functie in een functie? En dat werkt niet?


Ik volg je even niet, kun je misschien laten zien wat je nu hebt?
En welke waarde precies staat in: $print_order['order_article']

Gr. Robert
 
Donny Wie weet

Donny Wie weet

20/03/2013 22:37:02
Quote Anchor link
Het is gelukt nu. Maar mijn foutmelding, dubbele parameter, dat is een functie in een functie en dat kan toch niet?
 
Robert Wazzaa

Robert Wazzaa

20/03/2013 22:40:15
Quote Anchor link
Wat is precies de foutmelding?
In principe kan je gewoon een functiein een functie gebruiken.
 
Donny Wie weet

Donny Wie weet

20/03/2013 22:43:28
Quote Anchor link
2 parameters in explode, door die array
 
Robert Wazzaa

Robert Wazzaa

20/03/2013 22:44:27
Quote Anchor link
Donny Wie weet op 20/03/2013 22:43:28:
2 parameters in explode, door die array


Sorry, ik snap echt even niet wat je nu bedoelt?
Kun je source posten?
 



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.