Array vullen met mySQL-data
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)
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
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'])
);
?>
/*
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!
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'];
Geef de while() eens zijn { en } zodat duidelijk is wat er bij de while() hoort.
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.
Oplossing: tweedimensionale array maken..
Hylke schreef op 28.11.2007 11:14:
Dat zeg ik... Oplossing: tweedimensionale array maken..
;)
pgFrank schreef op 28.11.2007 11:17:
;)
Hylke schreef op 28.11.2007 11:14:
Dat zeg ik... Oplossing: tweedimensionale array maken..
;)
Oeps, het is nog vroeg.. Krijg je ervan als je maar half leest!
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
25
26
27
28
29
30
31
32
33
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'])
);
?>
/*
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
Ik zal misschien de situatie even verduidelijken...
Ik heb een class
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
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;
}
}
?>
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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">€ <?=$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>
<? } ?>
<?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">€ <?=$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... ;-)
Succes!
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.
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.)
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
)
)
(
[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?
Dit stukje moet je dus zien weg te werken:
Evenals het afsluitende haakje, maar dat mag geen probleem zijn.
Dit moet je overhouden:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
)
)
(
[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
)
)
Als het goed is zou het probleem idd binnen handbereik liggen als we 1 dimensie eruit slopen ;)
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
25
26
27
28
29
30
31
32
33
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>';
?>
/*
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!
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
25
26
27
28
29
30
31
32
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>';
?>
/*
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
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!
No probs ;) Voor dat sorteren is er geloof ik nog een leuke tut op phphulp ergens!