Array vullen met mySQL-data

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Tom Van Sichem

Tom Van Sichem

28/11/2007 10:30:00
Quote Anchor link
Hallo

Voor het werk ben ik bezig een kleine webshop te maken. Dit zal uiteindelijk niet meer worden dan een presentatie van enkele producten en de mogelijkheid deze online te bestellen. Deze producten staan in een database, en worden op de productpagina getoond d.m.v. een 'foreach'-lus.

Alles werkt vrij behoorlijk, maar ik krijg enkel het laatste product uit deze lus te zien. Kan iemand mij helpen?


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

/*
 producten (elks in een array)
*/


error_reporting(E_ALL);

    $query = "SELECT * FROM overstock ORDER BY naam DESC";
          $result = mysql_query($query)
             or die  ("kan de query niet uitvoeren");

    
while($row = mysql_fetch_array($result))    
    
$products = array(

$row['barcode'] =>
    new
product(
$row['naam'],
$row['merk'],
$row['omschrijving'],
$row['stock'],
$row['prijs'],
$row['yield'],
$row['productpagina'],
$row['afbeelding'])

);



?>


Alvast bedankt voor de hulp!
 
PHP hulp

PHP hulp

17/11/2024 00:32:21
 
- Roland -

- Roland -

28/11/2007 10:41:00
Quote Anchor link
De code is beetje raar... !
heb je stukjes zelf bij elkaar geplakt...?

Ik weet niet wat je wilt met deze code, begrijp je wat while doet ?

Nu begin (php te leren) & zet op regel 15 is:

echo $row['naam'];
 
- SanThe -

- SanThe -

28/11/2007 10:45:00
Quote Anchor link
Geef de while() eens zijn { en } zodat duidelijk is wat er bij de while() hoort.
 
Frank -

Frank -

28/11/2007 10:48:00
Quote Anchor link
Je overschrijft de array $product iedere keer. Gebruik $product[] en er wordt een fraaie array aangemaakt, met daarin de array's met data uit de database.
 
Hylke

Hylke

28/11/2007 11:14:00
Quote Anchor link
Oplossing: tweedimensionale array maken..
 
Frank -

Frank -

28/11/2007 11:17:00
Quote Anchor link
Hylke schreef op 28.11.2007 11:14:
Oplossing: tweedimensionale array maken..
Dat zeg ik...
;)
 
Hylke

Hylke

28/11/2007 11:18:00
Quote Anchor link
pgFrank schreef op 28.11.2007 11:17:
Hylke schreef op 28.11.2007 11:14:
Oplossing: tweedimensionale array maken..
Dat zeg ik...
;)


Oeps, het is nog vroeg.. Krijg je ervan als je maar half leest!
 
Joep

Joep

28/11/2007 11:27:00
Quote Anchor link
2 dimensionaal idd de beste oplossing, misschien met als key de naam die je 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
<?php

/*
 producten (elks in een array)
*/

$products = array();

error_reporting(E_ALL);

    $query = "SELECT * FROM overstock ORDER BY naam DESC";
          $result = mysql_query($query)
             or die  ("kan de query niet uitvoeren");

    
while($row = mysql_fetch_array($result))    
    
$products[$row['naam']] = array(

$row['barcode'] =>
    new
product(
$row['naam'],
$row['merk'],
$row['omschrijving'],
$row['stock'],
$row['prijs'],
$row['yield'],
$row['productpagina'],
$row['afbeelding'])

);



?>


werkt alleen als de namen unique zijn uiteraard
 
Tom Van Sichem

Tom Van Sichem

28/11/2007 12:06:00
Quote Anchor link
Allereerst al een dikke merci voor de snelle respons! Leuk om te weten!

Ik zal misschien de situatie even verduidelijken...

Ik heb een class
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

class product {
    var
$naam;
    var
$merk;
    var
$omschrijving;
    var
$stock;
    var
$prijs;
    var
$yield;
    var
$productpagina;
    var
$afbeelding;
    function
product($naam, $merk, $omschrijving, $stock, $prijs, $yield, $productpagina, $afbeelding) {
        $this->naam = $naam;
        $this->merk = $merk;
        $this->omschrijving = $omschrijving;
        $this->stock = $stock;
        $this->prijs = $prijs;
        $this->yield = $yield;
        $this->productpagina = $productpagina;
        $this->afbeelding = $afbeelding;
    }
}


?>


... en ik heb mijn products.php-pagina die hierboven al gepost staat...

en deze worden beiden aangeroepen in de homepage op deze manier:

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
<h2>Producten</h2>
<?php
foreach ($products as $id => $product) {
?>

    <div class="product">
        <h3><a href="<?= $settings->siteUrl . $product->productpagina?>?id=<?=$id?>"><?=$product->naam?></a></h3>
            <a href="<?= $settings->siteUrl . $product->productpagina?>?id=<?=$id?>"><img src="<?= $settings->siteUrl . $product->afbeelding?>" alt="<?=$product->naam?>" /></a><br />
        <p>    <?=$product->omschrijving?></p>
        <p>    <span class="product-prijs">&euro; <?=$product->prijs?></span></p>
        <form action="winkelwagen.php" method="post">
            <input type="hidden" name="action" value="add" />
            <input type="hidden" name="stock" value="1" />
            <input type="hidden" name="id" value="<?=$id?>" />
            <button type="submit" class="button">voeg toe</button>
        </form>
    </div>
<? } ?>


Met de manier van Joep krijg ik idd alle vakjes voor de producten, maar deze vakjes zijn leeg. Maar als ik $product[] volgens pgFrank gebruik, krijg ik wél een duidelijk overzicht, maar werkt de $id niet naar behoren. Deze $id moet de waarde zijn v/d barcode, omdat deze gebruikt wordt op de individuele productpagina.

Ik hoop dat er nu nog iemand aan uit kan, aan mijn uitleg... ;-)
 
Frank -

Frank -

28/11/2007 13:04:00
Quote Anchor link
Doe eens een print_r($product) en maak eens duidelijk hoe jouw array er nu uitziet. $id gaat niet werken met het voorbeeld van Joep, hij gebruikt de naam als key, deze ga jij dan later weer met $id ophalen. Wellicht wil jij i.p.v. de naam iets anders gebruiken, maar dat kun je zelf het beste bepalen.

Succes!
 
Joep

Joep

28/11/2007 13:40:00
Quote Anchor link
Hey R3Q je bent al lekker onderweg, wat je nu doet in de foreach is de key gebruiken.
In de manier die je gebruikt van Frank is er geen key products[] maakt namelijk geen associatieve array aan, dus heb je gewoon $product[0], product[1] etc etc

Je kan mijn manier gebruiken maar ipv naam de barccode gebruiken.
Dan heb je dus als key de barcode en gaat je foreach wel goed.

Maar print idd even je products array uit en kun je mij misschien vertellen waarom je hier een class gebruikt. Ik stimuleer zeker classes hoor, maar zie de link even niet naar een query -> to list zeg maar.
 
Tom Van Sichem

Tom Van Sichem

28/11/2007 16:14:00
Quote Anchor link
Bedankt Joep en pgFrank.

Ik geef hieronder even een voorbeeldje mee van hoe de array er zou uitzien als ik alle producten handmatig zou opgeven. Deze array zou dus automatisch moeten worden gevuld.

Het script dat ik gebruik is de 'Couffin' van Georges Auberger. Dit is een script dat normaalgezien werkt zonder mySQL, maar dat wil ik nu dus met mySQL. Ik heb dus problemen om de 'aansluiting' te maken, zeg maar. (Ik kan wel probleemloos verbinden met de database hoor, en deze is correct ingevuld, dus daar ligt het niet aan.)

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
$products = array(


"OV0DR200" =>
new product(
"Brother DR-200 OEM Overstock",
"Brother",
"For Brother HL-720, 730, 730+, 760, MFC-9000, 9050, 9060, 9500, 9550, FAX-8000P, 8060P, 8200P, 8250P, 8650P",
"1",
"20 000",
"0",
"product.php",
"DATA/images/001.jpg"
),
 
Frank -

Frank -

28/11/2007 16:25:00
Quote Anchor link
Die array ziet er erg vreemd uit met die 'new product()' daarin. Voer de volgende code eens uit nadat je de array hebt aangemaakt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
echo '<pre>';
print_r($products);
echo '</pre>';
?>

Wat levert dit op?
 
Joep

Joep

28/11/2007 16:42:00
Quote Anchor link
Het verbindne met SQL is erg goed natuurlijk, maar wat ik niet begrijp is dat je in het maken van een product een class instantieert en die meteen weer uitleest.
Wat je wil nu is dus een array product krijgen met barcode als key en een product object als value, terwijl je gewoon de array meteen kan vullen met gegevens
 
Tom Van Sichem

Tom Van Sichem

28/11/2007 22:12:00
Quote Anchor link
Na de print_r opdracht, krijg ik het volgende:

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
Array
(
    [OV0DR200] => Array
        (
            [OV0DR200] => product Object
                (
                    [naam] => Brother DR-200 OEM Overstock
                    [merk] => Brother
                    [omschrijving] => For Brother HL-720, 730, 730+, 760, MFC-9000, 9050, 9060, 9500, 9550, FAX-8000P, 8060P, 8200P, 8250P, 8650P
                    [stock] => 1
                    [prijs] => 0
                    [yield] => 20 000
                    [productpagina] => product.php
                    [afbeelding] => DATA/images/001.jpg
                )

        )


De opmerking van Joep echter, heeft me aan het denken gezet... het is inderdaad onlogisch. Aan de andere kant: als ik dit draaiende krijg (en ik voel dat de oplossing binnen handbereik ligt), hoef ik niet téveel aan te passen. Of vergis ik mij?
 
Frank -

Frank -

28/11/2007 22:23:00
Quote Anchor link
En nu begin het duidelijk te worden! De array is niet handig opgezet, je hebt nu 2x de waarde OV0DR200 in de array staan. 1x is meer dan genoeg. Je hebt nu een 3 dimensionale array, daar waar je met een 2 dimensionale al voldoende mogelijkheden hebt.

Dit stukje moet je dus zien weg te werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
[OV0DR200] => Array
        (

Evenals het afsluitende haakje, maar dat mag geen probleem zijn.

Dit moet je overhouden:
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
Array
(
[OV0DR200] => product Object
                (
                    [naam] => Brother DR-200 OEM Overstock
                    [merk] => Brother
                    [omschrijving] => For Brother HL-720, 730, 730+, 760, MFC-9000, 9050, 9060, 9500, 9550, FAX-8000P, 8060P, 8200P, 8250P, 8650P
                    [stock] => 1
                    [prijs] => 0
                    [yield] => 20 000
                    [productpagina] => product.php
                    [afbeelding] => DATA/images/001.jpg
                )
)
 
Joep

Joep

29/11/2007 00:40:00
Quote Anchor link
Kun je nog 1 keer de code posten waarmee je het opbouwt? Wil graag weten hoe die nu is ;)
Als het goed is zou het probleem idd binnen handbereik liggen als we 1 dimensie eruit slopen ;)
 
Tom Van Sichem

Tom Van Sichem

29/11/2007 10:11:00
Quote Anchor link
Code is nu de volgende:

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

/*
 producten (elks in een array)
*/


    $query = "SELECT * FROM overstock";
          $result = mysql_query($query)
             or die  ("kan de query niet uitvoeren");

    
while($row = mysql_fetch_array($result))    
    
$products[$row['barcode']] = array(

$row['barcode'] =>
    new
product(
$row['naam'],
$row['merk'],
$row['omschrijving'],
$row['stock'],
$row['prijs'],
$row['yield'],
$row['productpagina'],
$row['afbeelding'])

);


echo '<pre>';
print_r($products);
echo '</pre>';

?>


Deze geeft als resultaat de 3-dimensionele array. Ik ben er gisteren niet meer in geslaagd eentje eruit te flikkeren, helaas!

Misschien moet ik maar toegeven dat deze php-toepassing nog wat te hoog gegerepen is voor mij... een mailformulier en kleine toepassingen kan ik nog wel opbouwen, maar het echte werk... dat wordt nog wat studeren! Van opleiding ben ik grafisch vormgever, maar het lijkt me we leuk om dat combineren met het bouwen van (eenvoudige) php-toepassingen.

Nogmaals een dikke merci voor alle hulp! Ik apprecieer dit ten zeerste!
 
Joep

Joep

29/11/2007 10:15: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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php

/*
 producten (elks in een array)
*/


    $query = "SELECT * FROM overstock";
          $result = mysql_query($query)
             or die  ("kan de query niet uitvoeren");

$products = array();  

while($row = mysql_fetch_array($result))    
 
$products[$row['barcode']] =
    new
product(
$row['naam'],
$row['merk'],
$row['omschrijving'],
$row['stock'],
$row['prijs'],
$row['yield'],
$row['productpagina'],
$row['afbeelding'])

);


echo '<pre>';
print_r($products);
echo '</pre>';

?>


Zullen we dan maar gewoon aardig zijn ;)
Gewijzigd op 01/01/1970 01:00:00 door Joep
 
Tom Van Sichem

Tom Van Sichem

29/11/2007 10:51:00
Quote Anchor link
Potverdorie! Joep, u bent een held! Ai ai ai dat ik het zelf niet zag. Ik heb nog een klein foutje uit jouw code gehaald ( een aflsuitend haakje teveel), maar voor de rest doet ie het nu perfect!

Nu kan ik zelf wel verder, denk ik. Het boodschappenmandje en de rest werkt feilloos. Nu nog eens bekijken hoe ik de producten kan filteren per merk, prijsklasse, beschikbare voorraad... maar dat mag geen noemenswaardige problemen meer opleveren.

Ik gebruik deze site al lang om te raadplegen, maar nu ga ik het forum meegebruiken ook. Geweldig bedankt iedereen!
 
Joep

Joep

29/11/2007 10:59:00
Quote Anchor link
No probs ;) Voor dat sorteren is er geloof ik nog een leuke tut op phphulp ergens!
 

Pagina: 1 2 volgende »



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.