Resultaten weergeven
Ik ben net met PHP/MySQL begonnen en heb een database aangemaakt met producten. Uit deze database probeer ik alle producten te krijgen en deze in tabelvorm te presenteren. Op dit moment heb ik ervoor gekozen om alles horizontaal te presenteren (Titel, Fabrikant, PrijsNormaal, Prijsaanbieding en een plaatje). Dit leek me voor nu even iets makkelijker want eigenlijk wil ik ernaar toe om te beginnen met het (thumbnail) plaatje en rechts daarnaast de 4 eergenoemde rubrieken onder elkaar. Dit neemt minder ruimte in waardoor je 2 kolommen van producten naast elkaar kan maken. Stap daarna moet worden dat je op de titel klikt en naar een detailscherm moet gaan.
EDIT: Error opgelost, link naar details gelukt. Alleen nog oplossing voor 2 kolommen met producten gezocht!!
Maar eerst terug naar wat ik nu heb:
Ik krijg de volgende error: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
Heb de uitleg over deze functie op deze site nog eens gelezen maar zie de fout niet zo snel.
Wie kan mij helpen en ook eventueel al meedenken over mijn gevolgstappen.
HEEL erg bedankt alvast, wordt langzamerhand gek van het feit dat het niet werkt. LOL
EDIT: Error opgelost, link naar details gelukt. Alleen nog oplossing voor 2 kolommen met producten gezocht!!
Maar eerst terug naar wat ik nu heb:
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
34
35
36
37
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
<?
$username="";
$password="";
$database="";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$sitepad = "/test/tnimages/";
$sql = "SELECT * FROM Product ";
$resultaat = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($resultaat) > 0)
{
echo "<table border =1>";
while ($rij = mysql_fetch_array($Resultaat)) {
echo "<tr>";
echo "<td>".$rij["Titel"]."</td>";
echo "<td>".$rij["Fabrikant"]."</td>";
echo "<td>".$rij["Prijsnormaal"]."</td>";
echo "<td>".$rij["PrijsAanbieding"]."</td>";
echo "<td>";
$sql = "SELECT * FROM Pictures WHERE Product_ID=".$rij["Product_ID"];
$Pictures = mysql_query($sql);
if (mysql_num_rows($Pictures) > 0) {
while ($afb_rij = mysql_fetch_array($Pictures)) {
$bestandsnaam = $sitepad.$afb_rij["Pictures_ID"].$afb_rij["Bestandstype"];
echo "<img src=\"$bestandsnaam\"> ";
}
}else {
echo "Geen afbeelding";
}
echo "</td></tr>";
}
echo "</table>";
}
mysql_close();
?>
$username="";
$password="";
$database="";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$sitepad = "/test/tnimages/";
$sql = "SELECT * FROM Product ";
$resultaat = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($resultaat) > 0)
{
echo "<table border =1>";
while ($rij = mysql_fetch_array($Resultaat)) {
echo "<tr>";
echo "<td>".$rij["Titel"]."</td>";
echo "<td>".$rij["Fabrikant"]."</td>";
echo "<td>".$rij["Prijsnormaal"]."</td>";
echo "<td>".$rij["PrijsAanbieding"]."</td>";
echo "<td>";
$sql = "SELECT * FROM Pictures WHERE Product_ID=".$rij["Product_ID"];
$Pictures = mysql_query($sql);
if (mysql_num_rows($Pictures) > 0) {
while ($afb_rij = mysql_fetch_array($Pictures)) {
$bestandsnaam = $sitepad.$afb_rij["Pictures_ID"].$afb_rij["Bestandstype"];
echo "<img src=\"$bestandsnaam\"> ";
}
}else {
echo "Geen afbeelding";
}
echo "</td></tr>";
}
echo "</table>";
}
mysql_close();
?>
Ik krijg de volgende error: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
Heb de uitleg over deze functie op deze site nog eens gelezen maar zie de fout niet zo snel.
Wie kan mij helpen en ook eventueel al meedenken over mijn gevolgstappen.
HEEL erg bedankt alvast, wordt langzamerhand gek van het feit dat het niet werkt. LOL
Gewijzigd op 20/04/2004 10:53:00 door Guido
$resultaat = mysql_query($sql) or die(mysql_error());
while ($rij = mysql_fetch_array($Resultaat)) {
de ene keer resultaat met een hoofdletter en de andere keer niet, daar zit de fout :P
while ($rij = mysql_fetch_array($Resultaat)) {
de ene keer resultaat met een hoofdletter en de andere keer niet, daar zit de fout :P
Ik schaam me diep, soms zie je het echt niet meer. Misschien ook nog wat tips om tot die 2 kolommen met producten te komen?
Inmiddels code weer aangepast zodat er naar de "detailspagina" wordt gelinkt wanneer mensen op de titel klikken. Blijft nog het probleem om 2 kolommen met producten naast elkaar te krijgen ipv alles nu onder elkaar.
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
34
35
36
37
38
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
<?
$username="";
$password="";
$database="";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$sitepad = "/test/tnimages/";
$sql = "SELECT * FROM Product ";
$resultaat = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($resultaat) >= 1)
{
echo "<table border =1>";
while ($rij = mysql_fetch_array($resultaat)) {
$Product_ID = $rij["Product_ID"];
echo "<tr>";
echo "<a href=\"rubriek_resultaat.php?Product_ID=$Product_ID\"><td>".$rij["Titel"]."</a></td>";
echo "<td>".$rij["Fabrikant"]."</td>";
echo "<td>".$rij["Prijsnormaal"]."</td>";
echo "<td>".$rij["PrijsAanbieding"]."</td>";
echo "<td>";
$sql = "SELECT * FROM Pictures WHERE Product_ID=".$rij["Product_ID"];
$Pictures = mysql_query($sql);
if (mysql_num_rows($Pictures) > 0) {
while ($afb_rij = mysql_fetch_array($Pictures)) {
$bestandsnaam = $sitepad.$afb_rij["Pictures_ID"].$afb_rij["Bestandstype"];
echo "<img src=\"$bestandsnaam\"><br><br>";
}
}else {
echo "Geen afbeelding";
}
echo "</td></tr>";
}
echo "</table>";
}
mysql_close();
?>
$username="";
$password="";
$database="";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$sitepad = "/test/tnimages/";
$sql = "SELECT * FROM Product ";
$resultaat = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($resultaat) >= 1)
{
echo "<table border =1>";
while ($rij = mysql_fetch_array($resultaat)) {
$Product_ID = $rij["Product_ID"];
echo "<tr>";
echo "<a href=\"rubriek_resultaat.php?Product_ID=$Product_ID\"><td>".$rij["Titel"]."</a></td>";
echo "<td>".$rij["Fabrikant"]."</td>";
echo "<td>".$rij["Prijsnormaal"]."</td>";
echo "<td>".$rij["PrijsAanbieding"]."</td>";
echo "<td>";
$sql = "SELECT * FROM Pictures WHERE Product_ID=".$rij["Product_ID"];
$Pictures = mysql_query($sql);
if (mysql_num_rows($Pictures) > 0) {
while ($afb_rij = mysql_fetch_array($Pictures)) {
$bestandsnaam = $sitepad.$afb_rij["Pictures_ID"].$afb_rij["Bestandstype"];
echo "<img src=\"$bestandsnaam\"><br><br>";
}
}else {
echo "Geen afbeelding";
}
echo "</td></tr>";
}
echo "</table>";
}
mysql_close();
?>
Gewijzigd op 20/04/2004 10:45:00 door Guido
Ik denk dat je om dat te bereiken met een teller moet gaan werken die telt hoeveel rijen er geselecteerd zijn. Vervolgens laat je de helft in de ene kolom plaatsen en de andere helft in de andere kolom.
In SQL kan dat met de SELECT COUNT query zonder teller gerealiseerd worden. Je slaat dan het resultaat van de count op in een variabele, en je deels deze door 2. Dat sla je op in variabele2.
Vervolgens moet je in de ene kolom een selectie maken waarbij het ID kleiner of gelijk is aan het ID van het "middelste" artikel en in de andere kolom waar het ID groter is dan het ID van het "middelste" artikel in de database.
Wat je ook als selectie criterium zou kunnen laten gelden is alle oneven nummers links en alle even nummers rechts. Maar je ontkomt er dus niet aan om de selectie op te splitsen in twee delen en dan het ene deel in de ene kolom te zetten en het andere deel in de andere kolom.
Dit zou je een eind op weg moeten helpen om tot een correcte query te komen.
In SQL kan dat met de SELECT COUNT query zonder teller gerealiseerd worden. Je slaat dan het resultaat van de count op in een variabele, en je deels deze door 2. Dat sla je op in variabele2.
Vervolgens moet je in de ene kolom een selectie maken waarbij het ID kleiner of gelijk is aan het ID van het "middelste" artikel en in de andere kolom waar het ID groter is dan het ID van het "middelste" artikel in de database.
Wat je ook als selectie criterium zou kunnen laten gelden is alle oneven nummers links en alle even nummers rechts. Maar je ontkomt er dus niet aan om de selectie op te splitsen in twee delen en dan het ene deel in de ene kolom te zetten en het andere deel in de andere kolom.
Dit zou je een eind op weg moeten helpen om tot een correcte query te komen.
mijn oplossing is alles in arrays stoppen en daarna met een for loop uitlezen
Quote:
mijn oplossing is alles in arrays stoppen en daarna met een for loop uitlezen
Zou je dat iets meer kunnen uitleggen? Ben net begonnen, ken ook de beginselen van genoemde termen maar een klein voorbeeldje zou kunnen helpen.
Bij voorbaat dank. Ook naar de manier met "count" zal ik eens kijken.
dubbelpost (wat is het forum langzaam?)
Gewijzigd op 20/04/2004 17:20:00 door Rick
Bedankt, ga morgen het één en ander proberen en meld hier wel mijn voortgang.
Rick> ik ben ermee aan de slag geweest maar heb er uiteindelijk niet veel van kunnen maken. Vanalles geprobeerd met $data[]=$row maar niet het gewenste resultaat. Ik durf het bijna niet te vragen maar zou je nog iets meer toelichting kunnen geven?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
$query = 'SELECT id, naam, nog_iets FROM tabel';
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)){
$data[]=$row;
}
echo '<table>';
for($i=0;$i<count($data);$i++){
echo'<tr><td>';
echo $data[$i]['id'].'<br />';
echo $data[$i]['naam'].'<br />';
echo $data[$i]['nog_iets'].'<br />';
echo'</td><td>';
$i++;
echo $data[$i]['id'].'<br />';
echo $data[$i]['naam'].'<br />';
echo $data[$i]['nog_iets'].'<br />';
echo'</td></tr>';
}
echo'</table>';
$query = 'SELECT id, naam, nog_iets FROM tabel';
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)){
$data[]=$row;
}
echo '<table>';
for($i=0;$i<count($data);$i++){
echo'<tr><td>';
echo $data[$i]['id'].'<br />';
echo $data[$i]['naam'].'<br />';
echo $data[$i]['nog_iets'].'<br />';
echo'</td><td>';
$i++;
echo $data[$i]['id'].'<br />';
echo $data[$i]['naam'].'<br />';
echo $data[$i]['nog_iets'].'<br />';
echo'</td></tr>';
}
echo'</table>';
Rick, helemaal top. Heb de code nog iets aangepast zodat het wat fraaier eruit ziet. Heb uit mijn oude code ook weer de link naar de detail pagina toegevoegd maar die lijkt nog niet helemaal te werken. Ik ben er natuurlijk nog lang niet want nu moet ik naast de tekst een plaatje tonen. In de code uit mijn eerste bericht had ik dit netjes voor elkaar maar hoe ik dat hierin ga implementeren is een heel ander verhaal. Code zoals ik nu heb zonder afbeeldingen:
$query = 'SELECT Product_ID, Titel, Fabrikant, PrijsNormaal, PrijsAanbieding FROM Product';
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_assoc($result)){
$data[]=$row;
}
$Product_ID = $row["Product_ID"];
echo '<table table width="595">';
for($i=0;$i<count($data);$i++){
echo'<tr><td>';
echo $data[$i]['Product_ID'].'<br />';
echo '<a href=\"rubriek_resultaat.php?id=$Product_ID\"><b>'.$data[$i]['Titel'].'</b></a><br />';
echo $data[$i]['Fabrikant'].'<br />';
echo "Prijs normaal: € ".$data[$i]['PrijsNormaal'].'<br />';
echo "Prijs aanbieding: € ".$data[$i]['PrijsAanbieding'].'<br />';
echo'</td><td>';
$i++;
echo $data[$i]['Product_ID'].'<br />';
echo '<b>'.$data[$i]['Titel'].'</b><br />';
echo $data[$i]['Fabrikant'].'<br />';
echo "Prijs normaal: € ".$data[$i]['PrijsNormaal'].'<br />';
echo "Prijs aanbieding: € ".$data[$i]['PrijsAanbieding'].'<br />';
echo'</td></tr>';
}
echo'</table>';
$query = 'SELECT Product_ID, Titel, Fabrikant, PrijsNormaal, PrijsAanbieding FROM Product';
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_assoc($result)){
$data[]=$row;
}
$Product_ID = $row["Product_ID"];
echo '<table table width="595">';
for($i=0;$i<count($data);$i++){
echo'<tr><td>';
echo $data[$i]['Product_ID'].'<br />';
echo '<a href=\"rubriek_resultaat.php?id=$Product_ID\"><b>'.$data[$i]['Titel'].'</b></a><br />';
echo $data[$i]['Fabrikant'].'<br />';
echo "Prijs normaal: € ".$data[$i]['PrijsNormaal'].'<br />';
echo "Prijs aanbieding: € ".$data[$i]['PrijsAanbieding'].'<br />';
echo'</td><td>';
$i++;
echo $data[$i]['Product_ID'].'<br />';
echo '<b>'.$data[$i]['Titel'].'</b><br />';
echo $data[$i]['Fabrikant'].'<br />';
echo "Prijs normaal: € ".$data[$i]['PrijsNormaal'].'<br />';
echo "Prijs aanbieding: € ".$data[$i]['PrijsAanbieding'].'<br />';
echo'</td></tr>';
}
echo'</table>';
probeer het eens met deze query, dat zou het wat makkelijker moeten maken :)
$sql = "SELECT * FROM Product,Pictures WHERE Pictures.Product_ID=Products.Product_ID";
$sql = "SELECT * FROM Product,Pictures WHERE Pictures.Product_ID=Products.Product_ID";
Ok, ik ga ermee aan de slag. Overigens voorzie ik vooral problemen om het plaatje netjes in een kolom ernaast te krijgen.
Enig idee waarom mijn link van de titel naar detail pagina niet werkt?
Super dat je helpt in ieder geval!!
Enig idee waarom mijn link van de titel naar detail pagina niet werkt?
Super dat je helpt in ieder geval!!
omdat dit niet klopt: $Product_ID = $row["Product_ID"];
om het iets netter te maken:
test maar eventjes of het werkt :P
om het iets netter te maken:
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
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
<?
echo '<table table width="595">';
for($i=0;$i<count($data);$i++){
echo'<tr>';
for($i1=0;$i1<2;$i1++){
$i+=$i1;
echo'<td>';
echo'<table border="1">
<tr>
<td>'.$data[$i]['Product_ID'].'</td>
<td rowspan="5"><img src="'.$data[$i]['Pictures_ID'].$data[$i]['Bestandstype'].'" />
</tr>
<tr>
<td><a href="rubriek_resultaat.php?id='.$data[$i]['Product_ID'].'"><b>'.$data[$i]['Titel'].'</b></a></td>
</tr>
<tr>
<td>'.$data[$i]['Fabrikant'].'</td>
</tr>
<tr>
<td>Prijs normaal: ? '.$data[$i]['PrijsNormaal'].'</td>
</tr>
<tr>
<td>Prijs aanbieding: ? '.$data[$i]['PrijsAanbieding'].'</td>
</tr>
</table>
</td>';
}
echo'</tr>';
}
echo'</table>';
?>
echo '<table table width="595">';
for($i=0;$i<count($data);$i++){
echo'<tr>';
for($i1=0;$i1<2;$i1++){
$i+=$i1;
echo'<td>';
echo'<table border="1">
<tr>
<td>'.$data[$i]['Product_ID'].'</td>
<td rowspan="5"><img src="'.$data[$i]['Pictures_ID'].$data[$i]['Bestandstype'].'" />
</tr>
<tr>
<td><a href="rubriek_resultaat.php?id='.$data[$i]['Product_ID'].'"><b>'.$data[$i]['Titel'].'</b></a></td>
</tr>
<tr>
<td>'.$data[$i]['Fabrikant'].'</td>
</tr>
<tr>
<td>Prijs normaal: ? '.$data[$i]['PrijsNormaal'].'</td>
</tr>
<tr>
<td>Prijs aanbieding: ? '.$data[$i]['PrijsAanbieding'].'</td>
</tr>
</table>
</td>';
}
echo'</tr>';
}
echo'</table>';
?>
test maar eventjes of het werkt :P
Gewijzigd op 22/04/2004 16:19:00 door Rick
Ok, nadat ik uit de query een "s" had weggehaald die er niet hoorde (gelukkig kan ik jou ook nog betrappen op een foutje LOL), kwam er inderdaad mooi een lijstje uit. Heb er maar een stuk of 6 producten inzitten. Wat viel me op:
1) ik heb nu weer alles onder elkaar ipv 2 productkolommen (het zou moeten zijn plaatje 1, tekst over plaatje 1 ernaast, plaatje 2, tekst over plaatje 2 ernaast.
2) als ik voor een product 2 plaatjes heb dan worden beide plaatjes weergegeven met beiden dezelfde teksten ipv dat de tekst er 1 keer staat en de plaatjes onder elkaar (in de praktijk zal ik waarschijnlijk maar 1 plaatje hebben maar is misschien toch wel netjes om te ondervangen). In mijn eerste ontwerp ging dit nog wel goed met de loop en ook een tekst mocht er geen plaatje zijn).
3) op het eind van de opsomming krijg ik nog een soort lege tabel met
Prijs normaal: (verder leeg)
Prijs aanbieding: (verder leeg)
En daarnaast een plaatje (rood kruis en als je bij properties kijkt verder ook geen "picture" naam.
4) met de huidige query krijg je alleen producten die ook daadwerkelijk een plaatje hebben.
Ik hoop dat we eruit gaan komen :)
1) ik heb nu weer alles onder elkaar ipv 2 productkolommen (het zou moeten zijn plaatje 1, tekst over plaatje 1 ernaast, plaatje 2, tekst over plaatje 2 ernaast.
2) als ik voor een product 2 plaatjes heb dan worden beide plaatjes weergegeven met beiden dezelfde teksten ipv dat de tekst er 1 keer staat en de plaatjes onder elkaar (in de praktijk zal ik waarschijnlijk maar 1 plaatje hebben maar is misschien toch wel netjes om te ondervangen). In mijn eerste ontwerp ging dit nog wel goed met de loop en ook een tekst mocht er geen plaatje zijn).
3) op het eind van de opsomming krijg ik nog een soort lege tabel met
Prijs normaal: (verder leeg)
Prijs aanbieding: (verder leeg)
En daarnaast een plaatje (rood kruis en als je bij properties kijkt verder ook geen "picture" naam.
4) met de huidige query krijg je alleen producten die ook daadwerkelijk een plaatje hebben.
Ik hoop dat we eruit gaan komen :)
Gewijzigd op 22/04/2004 14:50:00 door Guido
probeer hem nu maar, het zou nu moeten werken
enne ik maak zeer regelmatig fouten hoor, het probleem is dat ik het zelf niet kan testen omdat ik de database niet heb (en al had ik de database dan zou ik er te lui voor zijn :P)
1. opgelost (hoop ik tenminste)
2. het lijkt me dat je toch maar 1 plaatje wilt (anders is de layout direct kaput :P
3. kijk eventjes of het nu wel werkt, na mijn wijziging zou het kunnen dat het probleem verholpen is, maar waarschijnlijk moet er nog een ifje bij om te kijken of er data is
4. SELECT * FROM Product,Pictures WHERE Pictures.Product_ID=Products.Product_ID OR Pictures.Product_ID!=Products.Product_ID
enne ik maak zeer regelmatig fouten hoor, het probleem is dat ik het zelf niet kan testen omdat ik de database niet heb (en al had ik de database dan zou ik er te lui voor zijn :P)
1. opgelost (hoop ik tenminste)
2. het lijkt me dat je toch maar 1 plaatje wilt (anders is de layout direct kaput :P
3. kijk eventjes of het nu wel werkt, na mijn wijziging zou het kunnen dat het probleem verholpen is, maar waarschijnlijk moet er nog een ifje bij om te kijken of er data is
4. SELECT * FROM Product,Pictures WHERE Pictures.Product_ID=Products.Product_ID OR Pictures.Product_ID!=Products.Product_ID
Nou, nu komen we echt in de buurt. Enige probleem nog:
Ik krijg nu alle 6 de producten 6x te zien steeds met een ander plaatje. Dus 6x de producten met plaatje1, daaronder 6x met plaatje2 etc.
Ik ga weer even aan de layout werken want elke tabel is weer anders van grootte.
Vind je overigens alles behalve lui :)
Ik krijg nu alle 6 de producten 6x te zien steeds met een ander plaatje. Dus 6x de producten met plaatje1, daaronder 6x met plaatje2 etc.
Ik ga weer even aan de layout werken want elke tabel is weer anders van grootte.
Vind je overigens alles behalve lui :)
ja, de query is een beetje een probleem nu :/
ik zit me af te vragen of dit wel kan met 1 query
misschien dan toch maar een 2e query erbij bouwen
ik zit me af te vragen of dit wel kan met 1 query
misschien dan toch maar een 2e query erbij bouwen
LOL Ik dacht echt dat we er bijna waren. Heb het nu ook mooi in mijn layout, precies zoals ik in gedachten had. Kleine tegenslag dus.




