Hallo.

ik ben een beginnenling met php en sql. voor mij gevoel toch al wel aardig op weg. Ik heb eeb site gemaakt (nog wel lokaal kan deze nog niet tonen dus) waar ik standen bij hou van tennisuistlagen. Er worden aleen dubbels gespeeld. De samenstelling is 2 heren en 2 dames per team. Door deze opstelling kan er dus een herendubbel, een damesdubbel en twee mix wedstrijden per keer worden gehouden.
Nu ben ik inmiddels zover dat ik de uitslagen kan invoeren en kan laten tonen op de site.. maar nu gaat er voor mij een uitdaging komen die ik niet snap.. Het rekenen met SQL en het resultaat kan toen. BEn op zoek naar iemand die mij hier wegwijs in wil maken.
ken niet alle mogelijkheden hoe eea in zijn werk gaat. Ik heb het wel in de kop zitten hoe ik het ongeveer wil ... maar ik kan het helaas niet bouwen...

zo hebben de heren een uitslag... de dames en natuurlijk de twee mixgames.
De setstanden kan ik invoeren. Hoe tel ik de setstanden bij elkaar op en bepaal ik de winnaar. Daar hoe moet ik nu de berekenign maken dat de winner van 1 punt krijgt.... de punten van alle dicipline s worden op het einde bij elkaar opgeteld en dan hebben we match resultaat.


Dit is een belangrijke stap.. maar als dat eenmaal is gerealiseerd komt er een verolgstap achteraan.. De ranking en standen.. ook daarvan weet ik niet hoe ik het moet aanvliegen.


Helaas kan ik op het www niet laten tonen wat ik nu heb .. dat kan wat lastig zijn.. plus hou er een aub ook rekening mee dat ik nog lerende ben in deze materie en dat ik qua programmering het nog niet onder de knie heb :-)

Ik hoop dat er iemand is die me kan en wil helpen... alsvast bedankt.
ps als het helpt dat ik mijn function hier post geef dan aub een seintje...
We kunnen je vast wel helpen. Kan je jouw relevante code en jouw databasemodel laten zien?
Met de MySQL if(...) functie kun je een redelijk eind komen. Bijvoorbeeld:

select team1,team2,if(team1 = team2,1,if(team1 > team2,2,0)) as `score`
from `sets`

Als team1 en team2 gelijk hebben gespeeld 1 punt, anders indien gewonnen 2 punten, anders 0 (steeds voor team1; ik heb geen verstand van tennis, dus misschien kan het wel nooit gelijk zijn).

Dit kun je dan net zover uitwerken (sub-query die alle sets weer bij elkaar optelt, enz) totdat je bent waar je wezen wilt. Je kunt er ook een "stored procedure" voor maken (= een eigen functie definiëren in MySQL; die kun je dan aanroepen als elke andere functie).

Maarrr, je kunt natuurlijk ook bij het invoeren van de setstanden meteen de uitslag (van de wedstrijd + alle games + verdiende punten) berekenen (in PHP), en die ook direct ergens opslaan. Als je dan de ranking uit wilt rekenen hoef je niet eerst alles steeds opnieuw te bepalen, maar puur nog de tabel uit te lezen/optellen/sorteren. Scheelt je een hoop (herhaald) gedoe.
Hoi Rob,
Tnx voor je snelle reatie.. mijn probleem is dat ik ongeveer wel snap wat je schrijft maar ik kan dit helaas niet vertalen naar codering. Met name het laatste stukje klinkt interessant... een team speel twee sets. Behalve als daar een 1-1 uitslag komt dan wordt er een tie break gespeeld. Er komt dus uiterlijk en 2-1 of een 2-0 stand.. Op zich maakt at niet uit. De winning team krijgt 1 punt. De verliezer 0. Dit principe telt voor de heren, dames en de twee mixen. Het wedstrijd resultaat kan dus max 4-0 worden of andere mogelije standen zijn 3-1, 2-2, 1-3 of 0-4

Van iedere wedstrijden geef ik dus inderdaad de standen in. De winner kan dus inderdaad bepaald worden aan de hand hiervan en het resultaat zou weggeschreven kunnen worden naar de database. Ik denk dat het dit inderdaad voor het bepalen van de ranking ten goede komt. Mijn grote probleem/uitdaging ... hoe ga ik dit voor elkaar krijgen... nogmaals ik ben net gestart met php en mysql... en kost me beste moeite en dit is nog te hoog gegrepen.

Achtergrond vna dit alles is dat ik gevraagd ben om een website te maken voor een tennis wintercompetitie. Het moest eenvoudig te onderhouden zijn. De man die het deed is overleden en nu zijn ze een klein beetje onthand.. ik heb alleen joomla ervaring en html kennis.. het leek me leuk uitdaging om meer van php en mysql te weten te kunnen komen maar een zelfstudie gaat helaas niet snel en de competitie staat in de startblokken. Het zou fijn dat...
maar alle goeie dingen komen langzaam.. dus ik hoop hier kennis op te doen en ik kan alle hulp gebruike.


[size=xsmall]Toevoeging op 14/10/2018 20:10:34:[/size]

Hieronder mijn functie voor het tonen van de wedstrijddetails:

<?php
function wedstrijd (){
		global $MySQL;
		
			
		$where = NULL;
		if (isset($_GET['id'])){
			$where = 'WHERE `schemaId` = "'.$_GET['id'].'"';
		}
		
		$sqlUitlezen = mysqli_query($MySQL, "SELECT schemaId, DATE_FORMAT(schema.schemaSpeeldatum,'%d-%m-%Y') AS schemaSpeeldatum, schemaTeamA, schemaTeamB, schemaUitslagA, schemaUitslagB, schemaHd1A, schemaHd1B, schemaHd2A, schemaHd2B, schemaHd3A, schemaHd3B, schemaSetsHdA, schemaSetsHdB, schemaDd1A, schemaDd1B, schemaDd2A, schemaDd2B, schemaDd3A, schemaDd3B, schemaSetsDdA, schemaSetsDdB, schemaMix11A, schemaMix11B, schemaMix12A, schemaMix12B, schemaMix13A, schemaMix13B, schemaSetsMix1A, schemaSetsMix1B, schemaMix21A, schemaMix21B, schemaMix22A, schemaMix22B, schemaMix23A, schemaMix23B, schemaSetsMix2A, schemaSetsMix2B,  poules.pouleId, poules.pouleLetter FROM `schema` INNER JOIN poules ON schema.schemaPouleId = poules.pouleId ".$where." ORDER BY `schemaId` ASC");
		$sqlAantal = mysqli_num_rows($sqlUitlezen);
		
		
		

		
		if ($sqlAantal > 0){
			while ($sqlData = mysqli_fetch_assoc($sqlUitlezen)){	
			echo '<article>';
			echo '
				<table align="center" cellpadding="2" width="98%" border="0">
				  <tr>
					<td rowspan="2" align="left"><A HREF="javascript:javascript:history.go(-1)"><img src="img/icon-list.png" height="14" align="left"></a><p align="center"><font size="1" face="comic sans ms" color="gray">POULE</font><br><font size="5" face="comic sans ms"><b>'.$sqlData['pouleLetter'].'</b></font></td>
					<td colspan="3" align="right"><font size="2" face="comic sans ms">Wedstrijdnummer: <b>'.$sqlData['schemaId'].'</b></font></td>
				  </tr>
				  <tr>
					<td colspan="3" align="right"><font size="2" face="comic sans ms">Datum gespeeld: <b>'.$sqlData['schemaSpeeldatum'].'</b></font></td>
				  </tr>
				  <tr>
					<td colspan="4" align="center"><font size="5" face="comic sans ms">'.$sqlData['schemaTeamA'].' - '.$sqlData['schemaTeamB'].'</font></td>
				  </tr>
				  <tr>
					<td colspan="4" align="center"><font size="5" face="comic sans ms"><b>'.$sqlData['schemaUitslagA'].' - '.$sqlData['schemaUitslagB'].'</b></font></td>
				  </tr>
				  <tr>
					<td colspan="4" align="center">&nbsp;</td>
				  </tr>
				  <tr>
					<td align="center">
						<table border="1" cellpadding="3" cellspacing="1">
							<tr>
								<td colspan="5" align="center"><font size="2" face="comic sans ms"><b>HEREN</b></font></td>
							</tr>
							<tr>
								<td><font size="2" face="comic sans ms"><b>1e set</b></font></td><td><font size="2" face="comic sans ms"><b>2e set</b></font></td><td><font size="2" face="comic sans ms"><b>3e set</b></font></td><td></td></td>
							</tr>
							<tr>
								<td align="center"><font size="2" face="comic sans ms">'.$sqlData['schemaHd1A'].' - '.$sqlData['schemaHd1B'].'</font></td><td align="center"><font size="2" face="comic sans ms">'.$sqlData['schemaHd2A'].' - '.$sqlData['schemaHd2B'].'</font></td><td align="center"><font size="2" face="comic sans ms">'.$sqlData['schemaHd3A'].' - '.$sqlData['schemaHd3B'].'</font></td><td align="center" nowrap><b><font size="2" face="comic sans ms">'.$sqlData['schemaSetsHdA'].' - '.$sqlData['schemaSetsHdB'].'</font></b></td>
							</tr>
						</table>
					</td>
					<td align="center">
					<table border="1" cellpadding="3" cellspacing="1">
							<tr>
								<td colspan="5" align="center"><font size="2" face="comic sans ms"><b>DAMES</b></font></td>
							</tr>
							<tr>
								<td><font size="2" face="comic sans ms"><b>1e set</b></font></td><td><font size="2" face="comic sans ms"><b>2e set</b></font></td><td><font size="2" face="comic sans ms"><b>3e set</b></font></td><td></td></td>
							</tr>
							<tr>
								<td align="center"><font size="2" face="comic sans ms">'.$sqlData['schemaDd1A'].' - '.$sqlData['schemaDd1B'].'</font></td><td align="center"><font size="2" face="comic sans ms">'.$sqlData['schemaDd2A'].' - '.$sqlData['schemaDd2B'].'</font></td><td align="center"><font size="2" face="comic sans ms">'.$sqlData['schemaDd3A'].' - '.$sqlData['schemaDd3B'].'</font></td><td align="center" nowrap><b><font size="2" face="comic sans ms">'.$sqlData['schemaSetsDdA'].' - '.$sqlData['schemaSetsDdB'].'</font></b></td>
							</tr>
						</table>
					</td>
					<td align="center">
					<table border="1" cellpadding="3" cellspacing="1">
							<tr>
								<td colspan="5" align="center"><font size="2" face="comic sans ms"><b>MIX 1</b></font></td>
							</tr>
							<tr>
								<td><font size="2" face="comic sans ms"><b>1e set</b></font></td><td><font size="2" face="comic sans ms"><b>2e set</b></font></td><td><font size="2" face="comic sans ms"><b>3e set</b></font></td><td></td></td>
							</tr>
							<tr>
								<td align="center"><font size="2" face="comic sans ms">'.$sqlData['schemaMix11A'].' - '.$sqlData['schemaMix11B'].'</font></td><td align="center"><font size="2" face="comic sans ms">'.$sqlData['schemaMix12A'].' - '.$sqlData['schemaMix12B'].'</font></td><td align="center"><font size="2" face="comic sans ms">'.$sqlData['schemaMix13A'].' - '.$sqlData['schemaMix13B'].'</font></td><td align="center" nowrap><b><font size="2" face="comic sans ms">'.$sqlData['schemaSetsMix1A'].' - '.$sqlData['schemaSetsMix1B'].'</font></b></td>
							</tr>
						</table>
					</td>
					<td align="center">
					<table border="1" cellpadding="3" cellspacing="1">
							<tr>
								<td colspan="5" align="center"><font size="2" face="comic sans ms"><b>MIX2</b></font></td>
							</tr>
							<tr>
								<td><font size="2" face="comic sans ms"><b>1e set</b></font></td><td><font size="2" face="comic sans ms"><b>2e set</b></font></td><td><font size="2" face="comic sans ms"><b>3e set</b></font></td><td></td></td>
							</tr>
							<tr>
								<td align="center"><font size="2" face="comic sans ms">'.$sqlData['schemaMix21A'].' - '.$sqlData['schemaMix21B'].'</font></td><td align="center"><font size="2" face="comic sans ms">'.$sqlData['schemaMix22A'].' - '.$sqlData['schemaMix22B'].'</font></td><td align="center"><font size="2" face="comic sans ms">'.$sqlData['schemaMix23A'].' - '.$sqlData['schemaMix23B'].'</font></td><td align="center" nowrap><b><font size="2" face="comic sans ms">'.$sqlData['schemaSetsMix2A'].' - '.$sqlData['schemaSetsMix2B'].'</font></b></td>
							</tr>
						</table> 
					</td>
				  </tr>
				</table>
			';
			
			echo '</article>';
			}
		}else{
			echo 'Sorry, ik heb niets kunnen vinden!';
		}
	}
	
	?>

Ik wil wel opmerken dat ik op lijn 8 een SQL-injection vindt, waarmee iemand je query kan manipuleren om je site te kunnen hacken.

Verder begin ik te huiveren als ik dit zie:
schemaSetsDdA, schemaSetsDdB, schemaMix11A, schemaMix11B

Je moet NOOIT je kolommen in je database van aantallen laten afhangen. Dit is al een voorbeeld waarmee je jouw database nodig moet 'normaliseren' en dus je data uit moet splitsen in verschillende tabellen. Nu kan je heel lastig berekeningen erover uitvoeren, iets wat je zeker nodig hebt voor een dergelijk systeem wat je nu bouwt. Dus eigenlijk vind ik het niet zo heel gek dat je vast lijkt lopen.
D'r is wel meer "mis" met deze code. Misschien moet je je even achter je oren krabben of je dit wel wilt doen. Zeker als hier persoonlijke data van de spelers in komt te staan moet je goed nadenken over hoe je dit gaat beveiligen (nu is het absoluut niet veilig).

Misschien is het dus verstandiger om dit project even voorbij te wuiven, en eerst met iets "simpels" te beginnen. eerst een beetje in de zandbak spelen, dan pas voor het echie.

Desalniettemin: zou je de velden uit je tabellen stuk voor stuk toe kunnen lichten, eens kijken of ik het dan ga snappen.

Sowieso is het overigens handiger om een query een beetje gestructureerd op te stellen, dan kunnen wij (en ook jij in je code) 'm beter lezen:

SELECT schemaId, DATE_FORMAT(schema.schemaSpeeldatum,'%d-%m-%Y') AS schemaSpeeldatum, 
  schemaTeamA, schemaTeamB, schemaUitslagA, schemaUitslagB, 
  schemaHd1A, schemaHd1B, schemaHd2A, schemaHd2B, schemaHd3A, schemaHd3B, schemaSetsHdA, schemaSetsHdB, 
  schemaDd1A, schemaDd1B, schemaDd2A, schemaDd2B, schemaDd3A, schemaDd3B, schemaSetsDdA, schemaSetsDdB, 
  schemaMix11A, schemaMix11B, schemaMix12A, schemaMix12B, schemaMix13A, schemaMix13B, schemaSetsMix1A, schemaSetsMix1B, 
  schemaMix21A, schemaMix21B, schemaMix22A, schemaMix22B, schemaMix23A, schemaMix23B, schemaSetsMix2A, schemaSetsMix2B,
  poules.pouleId, poules.pouleLetter 
FROM `schema`
  INNER JOIN poules ON schema.schemaPouleId = poules.pouleId ".
$where." 
ORDER BY `schemaId` ASC


En normaal is een beetje programmeur allergisch voor "select * from" (m.n. dat sterretje), maar ik vermoed dat het in dit geval toch wel handiger is:

SELECT schema.*, poules.pouleId, poules.pouleLetter 
FROM `schema`
  INNER JOIN poules ON schema.schemaPouleId = poules.pouleId ".
$where." 
ORDER BY `schemaId` ASC

Meestal is het trouwens handiger om je datum opmaak gewoon in PHP te doen, dan kun je tot die tijd nog met een "goede" datum werken (sorteren, omzetten, enz).
dank jullie voor de reacties. begin wel achter mijn oren te krabben als ik het zo allemaal hoor. @Arien, ik snap niet helemaal je opmerking dat ik de kolommen in de database moet af laten hangen van aantallen. .... maar de kolommen die je noemt dat zijn de veldnamen waarin de uitslag wordt opgenomen. De SQL injection snap ik al helemaal niet maar klink ernstig.. Maar ik wordt nu een beetje overspoelt met zaken die ik dus niet in het snotje heb...

@Rob. Ik sla zowiezo geen persoonlijke data op. Dat is is nl niet relevant.

Maar hier dan de uitleg van de velden:

schemaId spreekt voor zich..

schemaTeamA = Naam team A
schemaTeamB = Naam team B

schemaUitslagA = totaal teamuitslag team A (Dit zou dus berekend kunnen worden. Som van de uitkomst SchemaSets??A)
schemaUitslagB = totaal teamuitslag team B (Dit zou dus berekend kunnen worden. Som van de uitkomst SchemaSets??B)

--------------------------------------
schemaHd1A = uitslag HD team A set 1
schemaHd1B = uitslag HD team B set 1
schemaHd2A = uitslag HD team A set 2
schemaHd2B = uitslag HD team B set 2
schemaHd3A = uitslag HD team A set 3
schemaHd3B = uitslag HD team B set 3

schemaSetsHdA = score van de 3 gespeelde set (bij winst 1 punt, bij verlies 0. Dus niet de som van uitslagen.)
schemaSetsHdB = score van de 3 gespeelde set (bij winst 1 punt, bij verlies 0. Dus niet de som van uitslagen.)
-------------------------------------
Tussen de stippellijn wordt herhaald voor de Dd, Mix1 en Mix2


poules.pouleId, = spreekt voor zich. Het is ID veld van het poule tabel.
poules.pouleLetter = De Pouleletter waar de wedstrijd zich binnen heeft afgespeeld.


Dit is verklaring van de velden. en Guy.. jullie zijn voor mij de Masters hoor.. ik neem alles voor waar aan wat jullie zeggen en ik wil graag dingen anders doen hoor maar geen idee wat.

Dirk Huizinga op 14/10/2018 21:12:01

dank jullie voor de reacties. begin wel achter mijn oren te krabben als ik het zo allemaal hoor. @Arien, ik snap niet helemaal je opmerking dat ik de kolommen in de database moet af laten hangen van aantallen. .... maar de kolommen die je noemt dat zijn de veldnamen waarin de uitslag wordt opgenomen.

De schema's kan je opslaan in een aparte tabel 'schema'. Daaraan koppel je de clubs. Je hebt dan een uit en thuis.

Terug naar de tekentafel voor een goede databaseopzet.


De SQL injection snap ik al helemaal niet maar klink ernstig.. Maar ik wordt nu een beetje overspoelt met zaken die ik dus niet in het snotje heb...

Je invoer in je query is niet beveiligd net mysqli_real_escape_string().

Nu kan iedereen de query via de URL manipuleren.
Hmmmmm i don't get it.. de schema worden in opgeslagen in de tabel `schema` en mbv een form worden de teams hier aan toegevoegd.. maar deze teams staan in aparte tabel. Het formulier leest deze uit. Maar het riekt naar dat dit niet de juiste methodes is...

begin een donkerbruin vermoeden te krijgen dat ik een foutieve weg ben ingeslagen.. Wat zou een logische eerste stap zijn?....

Helpt het als ik mijn DB opbouw toon:

- verenigingen
verenigingId
verenigingNaam
verenigingAdres
verenigingPostcode
verenigingPlaats
verenigingTelefoon
verenigingWebsite
verenigingLogo
verenigingCp
verenigingEmailCp
verenigingMobielCp
verenigingTelefoonCp
verenigingInfo
verenigingTeamId

- teams
teamId
teamNaam
teamCp CP = contactpersoon
teamEmailCp
teamMobielCp
teamTelefoonCp
teamStatus
teamInfo
teamVerenigingId
teamPouleId

- poules
pouleId
pouleLetter

- schema
schemaId
schemaSpeeldatum
schemaTeamAId
schemaTeamBId
schemaPouleId
schemaHd1A
schemaHd2A
schemaHd3A
schemaHd1B
schemaHd2B
schemaHd3B
schemaSetsHdA
schemaSetsHdB

schemaDd1A
schemaDd2A
schemaDd3A
schemaDd1A
schemaDd2A
schemaDd3A
schemaSetsDdA
schemaSetsDdB

schemaMix11A
schemaMix12A
schemaMix13A
schemaMix11A
schemaMix12A
schemaMix13A
schemaSetsMix1A
schemaSetsMix1B

schemaMix21A
schemaMix22A
schemaMix23A
schemaMix21A
schemaMix22A
schemaMix23A
schemaSetsMix2A
schemaSetsMix2B

schemaUitslagA
schemaUitslagB


- gebruikers
gebruikerId
gebruikerNaam
gebruikerEmail
gebruikerWachtwoord
gebruikerStatus
gebruikerDatum
Maar wat plaats je voor inhoud in die verschillende schema velden, en wat is SchemaDd,schemaHd, schemaSetsMix, en schemaMix? Hier valt zeker een hoop uit te splitsen.
schema moet je zien als een wedstrijd... Hd staat voor Heren dubbel, Dd Dames dubbel Mix1 voor het 1e mix team en Mix2 voor het twee mix team.


als voorbeeld
in de velden:

schemaHd1A uitslag 1e set team A
schemaHd2A uitslag 2e set team A
schemaHd3A uitslag 3e set team A

schemaHd1B uitslag 1e set team B
schemaHd2B uitslag 2e set team B
schemaHd3B uitslag 3e set team B

schemaSetsHdA # gewonnen sets team A
schemaSetsHdB # gewonnen sets team B

al deze velden bevatten een numeriek waarden.

ik zou niet weten hoe ik dit verder moet uitsplitsen

Reageren