Beste forumleden,

Ik wil uitslagen en statistieken van gespeelde voetbalwedstrijden laten zien op mijn site.
Nu heb ik een vraag m.b.t. presentatie van data (in tabelvorm) uit een db op mn website.

Dus bijvoorbeeld van de wedstrijd ADO - PSV wil ik de opstelling van ADO als volgt laten zien

Resultaat SQL-query:

rugnummer 	achternaam 	kaarten 	aantaldoelpunten
1	Coutinho 	NULL	NULL
15	Malone 	<img src="geel.png" alt="icon" /> 	NULL
3	Wormgoor 	NULL	NULL
18	Beugelsdijk 	NULL	NULL
8	Meijers 	<img src="geel.png" alt="icon" /> 	NULL
7	Jansen 	NULL	NULL
14	Visser 	NULL	NULL
10	Toornstra 	NULL	NULL
11	Chery 	<img src="geel.png" alt="icon" /> 	NULL
36	Vicento 	NULL	<img src="goal.png" alt="icon" />
9	Poepon 	NULL	NULL


Dus naast de kolommen rugnummers en achternaam ook twee kolommen met informatie of de speler een kaart gekregen heeft of gescoord heeft.

Nu gaat het me om de presentatie van deze resultaten van de query. Ik wil rugnummers en namen aan de linkerkant en kaarten en doelpunten aan de rechterkant. Tot zover geen probleem.

Alleen: nu wil ik graag dat wanneer een speler wel een kaart heeft gekregen maar niet heeft gescoord, het plaatje van de kaart helemaal naar rechts uitgelijnd is. (En dus eigenlijk op de plek van het plaatje van het doelpunt staat (als de speler die gemaakt had)). Want nu staat dat plaatje van die kaart zo lelijk in het midden van de regel.

Ik hoop dat jullie begrijpen wat ik bedoel...

Is dat mogelijk? En zo ja hoe?
He Dennis,

merci. Ja, excuses hoor. PHP is nog erg moeilijk voor me, en ik raak dan al snel een beetje in paniek. Dan zie ik door alle gekke tekentjes door het bomen het bos niet meer.

Maar het is nu gelukt!

Ik heb ook "if($aantaldoelpunten > 0)" verandert in "if($aantaldoelpunten > Null)", aangezien mijn SQL-query bij geen kaarten en geen doelpunten de waarde Null geeft.

Nu werkt ie: doelpunten en kaarten onder elkaar.

Alleen mist de keeper nog. En daar begrijp ik echt helemaal niets van. Ik heb niets aan de SQL-query verandert en voor ik colspan ging gebruiken liet ie bij het testen wel gewoon 11 resultaten zien. Na het gebruik van colspan opeens maar 10 resultaten. En als ik de sql-query invoer in mysql krijg ik wel weer gewoon de keeper te zien.

[code]
<body>
<div id="apDiv1">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="50" align="center">rugnummer</td>
<td width="100" align="left">achternaam</td>
<td width="50" align="right">icon</td>
<td width="50" align="right">aantaldoelpunten</td>
</tr>
<?php while ($row_RSopstellingTHUIS = mysql_fetch_assoc($RSopstellingTHUIS)) { ?>
<tr>
<td><?php echo $row_RSopstellingTHUIS['rugnummer']; ?></td>
<td><?php echo $row_RSopstellingTHUIS['achternaam']; ?></td>
<?php $aantaldoelpunten = $row_RSopstellingTHUIS['aantaldoelpunten'] ?>
<?php if($aantaldoelpunten > Null) { ?>
<td align="right"><?php echo $row_RSopstellingTHUIS['icon']; ?></td>
<td align="right"><?php echo $row_RSopstellingTHUIS['aantaldoelpunten']; ?></td>

<?php } else { ?>
<td colspan="2" align="right"><?php echo $row_RSopstellingTHUIS['icon']; ?></td>
<?php } // if-statement afsluiten ?>
</tr>
<?php } // While afsluiten ?>
</table>
</div>
</body>

[\code]

Als je nog hetzelfde stukje script gebruikt als op de vorige pagina dan moet je op dat script eens naar regel 51 kijken. Daar staat dit:

<?php
$row_RSopstellingTHUIS = mysql_fetch_assoc($RSopstellingTHUIS);
?>

En daar gaat je keeper...... om nooit meer terug te keren.
Huh?

Wat gaat daar dan mis?
Als je fetcht haal je een record op uit de resultset. De pointer in die resultset gaat dan naar de volgende. Fetch je dan weer dan krijg je dat record enzovoort, enzovoort.
Elke keer dat je fetcht haal je dus een record op dat je daarna niet nog een keer kan ophalen. De fetch die je doet op regel 51 haalt dus de keeper op en die is derhalve niet meer beschikbaar in je while loop. Dan staat de pointer inmiddels bij het volgende record in je resultset.

Simpelste oplossing, gewoon die fetch op regel 51 weggooien, je doet zo te zien toch niets met de opgehaalde data. Er zijn wel andere oplossingen (ook simpele), maar als je niets met een record doet, moet je gewoon ook niet fetchen.
Kijk! Weggehaald en alle 11 spelers. Iedereen hartstikke bedankt!
Maar dan heb je nog steeds niets gedaan met mijn opmerking uit je andere topic.
SQL is niet bedoeld om html te genereren, maar om gegevens op te halen uit je database.
Dus je kan beter heel die CASE statement uit je SQL slopen

Maar wat je nu doet is dit: (in SQL komt dit op hetzelfde neer):
<?php
switch $row['aantaldoelpunten'] {
	case 1:
		echo '1bal.png';
		break;
	case 2:
		echo '2bal.png';
		break;
// etc.
}
?>

Wat je uit een query binnen krijgt in PHP zijn altijd strings, dus je kunt net zo makkelijk het aantal doelpunten aan bal.png plakken.

100% eens met Ger, genereer geen html in je query. Wat als je morgen een ander plaatje wil gaan gebruiken, dan moet je je query gaan aanpassen!
Beste Ger en Erwin,

Zeker een goed punt van het weghalen van het case statement. Daar ga ik straks naar kijken (eerst even voetbalwedstrijd van psv meepakken ;-))

Maar even een andere (wel gerelateerde) vraag waar ik nu opeens aan denk.

Stel nu dat iemand 1 doelpunt gescoord heeft en 1 kaart heeft gepakt. Omdat het plaatje van 1 doelpunt minder breed is dan het plaatje van bijvoorbeeld 3 doelpunten, zal er in dat geval (hoe ik het nu doe) nog steeds een witruimte zijn tussen het doelpunt en de kaart. En dat wil ik liever niet. Ik wil het liefst dat alle plaatjes (van doelpunten en kaarten) tegen elkaar aangeplakt zijn en naar rechts uitgelijnd.

Is het dan niet beter om in plaats van met twee aparte kolommen (kaarten en doelpunten) i.c.m. colspan te kiezen voor 1 kolom (kaarten + doelpunten) en die twee variabele samen te nemen met de CONCAT-functie?

Of het beter is dat mag je zelf beantwoorden, jij weet hoe je het eruit wilt laten zien.
Alleen de functie CONCAT heb je niet nodig, want vanaf nu ga je de plaatjes gewoon genereren in php en daar heb je de concat operator, ofwel de '.' .....
Ga ik zeker ook doen in geval van de doelpunten. Dus met sql het aantal doelpunten van elke speler ophalen en met php "<img src=" en "bal.png>" eraan vast plakken.

Maar nogmaals: het plaatje van 3 doelpunten is breder dan het plaatje van 1 doelpunt. Dus als iemand 1 doelpunt heeft gescoord en een gele kaart heeft gepakt dan is er een grotere witruimte tussen het plaatje van de kaart en het plaatje van het doelpunt dan wanneer een speler 3 doelpunten heeft gemaakt en een kaart heeft gepakt. Als je begrijpt wat ik bedoel.

Ik wil graag dat alle plaatjes van de kaarten en doelpunten in elke situatie even ver van elkaar staan. En om dat te bereiken moet ik dus denk ik wel ipv met twee aparte kolommen voor doelpunten en kaarten met 1 (middels concat) gecombineerde kolom gaan werken.

Of zie ik dat nou verkeerd?



Reageren