Spelers toevoegen aan Wedstrijd
Uiteindelijk haal ik dit door een While Loop welke ik echter niet werkend krijg, er gaat niet zo zeer iets mis, ik weet niet hoe ik eerst een MySQL query kan aanmaken voor alle Spelers samen welke vervolgens weggeschreven.
Of is het net zo optimaal om gewoon iedere speler los weg te schrijven naar de database met ieder zijn eigen query.
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
$i = 1;
//Get Array with Filled Checkboxes
$arrPresent = $_POST['chkbx'];
//Create Array for MySQL use
$arrPost = array();
while(count($arrPresent) >= $i){
$PresentID = key($arrPresent);
$PresentCheck = $arrPresent[key($arrPresent)];
if(isset($PresentCheck)){
$arrGoals = $_POST['goals'];
$postGoals = $arrGoals[$PresentID];
$arrOwnGoals = $_POST['owngoals'];
$postOwnGoals = $arrOwnGoals[$PresentID];
$arrPenalty = $_POST['penalty'];
$postPenalty = $arrPenalty[$PresentID];
$arrKeeper = $_POST['keeper'];
$postKeeper = $arrKeeper[$PresentID];
$arrWash = $_POST['wash'];
$postWash = $arrWash[$PresentID];
$postValues[$PresentID] = $postGoals.",".$postOwnGoals.",".$postPenalty.",".$postKeeper.",".$postWash;
}else{
//No Action
}
next($arrPresent);
$i++;
}
?>
$i = 1;
//Get Array with Filled Checkboxes
$arrPresent = $_POST['chkbx'];
//Create Array for MySQL use
$arrPost = array();
while(count($arrPresent) >= $i){
$PresentID = key($arrPresent);
$PresentCheck = $arrPresent[key($arrPresent)];
if(isset($PresentCheck)){
$arrGoals = $_POST['goals'];
$postGoals = $arrGoals[$PresentID];
$arrOwnGoals = $_POST['owngoals'];
$postOwnGoals = $arrOwnGoals[$PresentID];
$arrPenalty = $_POST['penalty'];
$postPenalty = $arrPenalty[$PresentID];
$arrKeeper = $_POST['keeper'];
$postKeeper = $arrKeeper[$PresentID];
$arrWash = $_POST['wash'];
$postWash = $arrWash[$PresentID];
$postValues[$PresentID] = $postGoals.",".$postOwnGoals.",".$postPenalty.",".$postKeeper.",".$postWash;
}else{
//No Action
}
next($arrPresent);
$i++;
}
?>
Deze maakt (heel omslachtig) een array aan welke alle waardes bevat en linkt deze aan de id. De weergave hiervan is gewoon tijdelijk, dit is niet op arrays gespecificeerd maar gewoon op weergave.
Quote:
Of is het net zo optimaal om gewoon iedere speler los weg te schrijven naar de database met ieder zijn eigen query.
Wanneer je van te voren je database model hebt geoptimaliseerd denk ik dat je hier goed antwoord op kan geven. Hoe ziet je database structuur er nu uit? Ik denk namelijk dat uiteindelijk het antwoord op bovenstaande vraag 'ja' gaat luiden.
[Tabel Players]
Player_ID
Name
[Tabel Matches]
Match_ID
Opponent
[Tabel Statics]
Statics_ID
Player_ID
Match_ID
Goals
OwnGoals
etc.
Match_ID
HIer heb je hem dus. Je hebt een koppeltabel tussen de spelers en de wedstrijden. Dit is de juiste manier van werken!
Dus: Voor elke speler een record in deze koppeltabel klussen.
Echter genereer ik nu dus (geen SQL waardes gewoon voorbeeld)
INSERT INTO tabel (Statics_ID, Player_ID, Match_ID, goals)
VALUES ('', '2', '53', '1');
VALUES ('', '4', '53', '0');
Nu is mijn vraag dus welke optie het meest efficient is
1. kan ik het beste eerst een MySQL query opbouwen zoals bovenstaande (en zoja hoe maak ik efficient adh van de Loop een String aan welke de complete query bevat). En deze aan het eind van de Complete while (dus nadat alle Spelers in de "array" oid zijn toegevoegd in een keer uitvoeren.
2. of kan het geen kwaad om op het eind van de While steeds
INSERT INTO tabel (Statics_ID, Player_ID, Match_ID, goals)
VALUES ('', '2', '53', '1');
een rij toe te voegen, op die manier maak je meerdere malen een connectie met de database.
Snap je wat ik bedoel, alvast bedankt voor je hulp Crispijn
Maar wat sneller is weet ik niet, dat zou je eens moeten testen eigenlijk!
Maar hoe kun je efficient met het gegeven dat de while loop produceert omspringen, hoe verwerk je dus efficient de waardes per speler. Dat was mijn voornamelijke vraag.
het is nu gebouwd als Echo, dit dien ik dus nog om te zetten naar MySQL_Query maar wilde eerst Fysiek zien of hij de juiste Query genereerde.
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
39
40
41
42
43
44
45
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
39
40
41
42
43
44
45
<?php
//Get Array with Filled Checkboxes
$arrPresent = $_POST['chkbx'];
for($i = 1; count($arrPresent) >= $i; $i++){
$PresentID = key($arrPresent);
$PresentCheck = $arrPresent[$PresentID];
if(isset($PresentCheck)){
$arrGoals = $_POST['goals'];
$postGoals = $arrGoals[$PresentID];
$arrOwnGoals = $_POST['owngoals'];
$postOwnGoals = $arrOwnGoals[$PresentID];
$arrPenalty = $_POST['penalty'];
$postPenalty = $arrPenalty[$PresentID];
$arrKeeper = $_POST['keeper'];
$postKeeper = $arrKeeper[$PresentID];
$arrWash = $_POST['wash'];
$postWash = $arrWash[$PresentID];
$arrPost[$PresentID] = "'".$postGoals."','".$postOwnGoals."','".$postPenalty."','".$postKeeper."','".$postWash."'";
}else{
//No Action
}
next($arrPresent);
}
//Create MySQL Query
echo("INSERT INTO statics<br>");
for($i = 1; count($arrPost) >= $i; $i++){
$PresentID = key($arrPost);
$PresentScores = $arrPost[$PresentID];
if($i == count($arrPost)){
echo("VALUES('".$PresentID."','".$_POST['match_id']."','".$PresentScores.");<br>");
break;
}else{
echo("VALUES('".$PresentID."','".$_POST['match_id']."','".$PresentScores."),<br>");
}
next($arrPost);
}
?>
//Get Array with Filled Checkboxes
$arrPresent = $_POST['chkbx'];
for($i = 1; count($arrPresent) >= $i; $i++){
$PresentID = key($arrPresent);
$PresentCheck = $arrPresent[$PresentID];
if(isset($PresentCheck)){
$arrGoals = $_POST['goals'];
$postGoals = $arrGoals[$PresentID];
$arrOwnGoals = $_POST['owngoals'];
$postOwnGoals = $arrOwnGoals[$PresentID];
$arrPenalty = $_POST['penalty'];
$postPenalty = $arrPenalty[$PresentID];
$arrKeeper = $_POST['keeper'];
$postKeeper = $arrKeeper[$PresentID];
$arrWash = $_POST['wash'];
$postWash = $arrWash[$PresentID];
$arrPost[$PresentID] = "'".$postGoals."','".$postOwnGoals."','".$postPenalty."','".$postKeeper."','".$postWash."'";
}else{
//No Action
}
next($arrPresent);
}
//Create MySQL Query
echo("INSERT INTO statics<br>");
for($i = 1; count($arrPost) >= $i; $i++){
$PresentID = key($arrPost);
$PresentScores = $arrPost[$PresentID];
if($i == count($arrPost)){
echo("VALUES('".$PresentID."','".$_POST['match_id']."','".$PresentScores.");<br>");
break;
}else{
echo("VALUES('".$PresentID."','".$_POST['match_id']."','".$PresentScores."),<br>");
}
next($arrPost);
}
?>
Nu nog even controlleren of ik de Transacties dmv COMMIT en ROLLBACK (zonder PDO, daar waag ik me nog maar even niet aan) werkend krijg.
PS. Wanneer ik een Radio Button gebruik en geen Value instell geeft deze Standaard N als deze is aangevinkt, wanneer ik Value Pak geeft hij vaak een random waarde.
Nu maakt die N mij niet uit maar ben toch wel benieuwd waar deze voor staat.
Gewijzigd op 01/01/1970 01:00:00 door JunkieXP
Regel 40 en 43 zijn ook hetzelfde, daar is dus ook iets niet helemaal in de haak.
Waarom je denkt dat echo een functie is (zie de haakjes () ), is me een raadsel, je kunt nu alleen maar méér fouten maken. Je moet er maar zin in hebben.
Ik ben het echter niet eens betreffende de regels die hetzelfde zijn. Ik geloof dat mijn manier niet optimaal is maar zal de uitleg even kort uitleggen.
Zodra je op Post drukt worden er verschillende Arrays aangemaakt, de array Goals bevat het aantal goals dat per speler is gescoord etc. Dit zou bij nader inzien idd beter buiten de while kunnen gebeuren.
Vervolgens haal je adh van het spelers id op welk doelsaldo uit de array goals bij de betreffende speler hoort.
Wat jou vergelijking tussen regel 40 en 43 is ontgaat mij een beetje, regel 40 bevat namelijk de punt komma voor de laatste value terwijl regel 43 naar de volgende key springt in de array. ( zo heb je ook gelijk een beschrijving wanneer je wilde zeggen dat regel 37 en 40 gelijk zijn, 37 eindigt met een komma zodat hij nog opgevolgd kan worden en 40 sluit de query af, dit gaf anders problemen in MySQL wanneer je dit niet zou doen.)
(Mijn excuses voor het benoemen van while daar ik for loops gebruik, dit is mijn eerste scripts waarin ik een for loop gebruik dus vandaar dat ik het altijd nog over while heb).
aan het eind van de regel. Waarom? Html in een sql query stoppen? Dat lijkt me geen goed idee. Wil ook niet geloven dat je dit al getest hebt.
Verder is het gebruik van next niet zo netjes. Waarom gebruik je dit zo veel?
Next gebruik ik om de volgende Key aan te roepen, kon namelijk niet vinden hoe ik adh van een waarde de key op kon halen dus heb ik dat op deze manier uitgevoerd, idd niet netjes omdat je zowel de $i als de array nu ophoogt maar ja.
Je kunt gewoon de array doorlopen met foreach()?
JunkieXP schreef op 18.03.2008 16:42:
Het zorgt ook voor meer tikfouten, dus bugs.Ik heb echo al vanaf den beginnen met haken gebruikt geen idee waarom maar als je het eenmaal zo aangeleerd hebt blijf je er toch bij en vind het persoonlijk weer net wat meer overzicht scheppen.
Quote:
Nu je het zegt, het verschil zit hem inderdaad tussen de ; en de , De if-else is er dus alleen maar om te bepalen of je een ; of een , wilt gebruiken, waarom staat de rest dan dubbelop in de if-else? Dat is volkomen overbodig.Wat jou vergelijking tussen regel 40 en 43 is ontgaat mij een beetje, regel 40 bevat namelijk de punt komma voor de laatste value terwijl regel 43 naar de volgende key springt in de array. ( zo heb je ook gelijk een beschrijving wanneer je wilde zeggen dat regel 37 en 40 gelijk zijn, 37 eindigt met een komma zodat hij nog opgevolgd kan worden en 40 sluit de query af, dit gaf anders problemen in MySQL wanneer je dit niet zou doen.)
Nogmaals, zorg voor eenvoudige code, dan kan er veel minder fout gaan en is het veel eenvoudiger te bouwen, testen en debuggen. Alles wat overbodig is, gooi je eruit, alles wat dubbel is, gooi je er eveneens uit. Keep it dry!
Waarbij DRY staat voor Don't Repeat Yourself.