Hoe kan ik data uit een form <select> wegschrijven per id in database (mysql)
Momenteel ben ik bezig met het maken van een applicatie voor een voetbalteam.
Zo moet de coach scores kunnen invullen na het spelen van een wedstrijd.
Is het mogelijk om een gespeelde wedstrijd op te halen uit de database (reeds al gelukt) in een form <select> <options>
en dan deze score in te vullen in een achter gelegen <input> en dat deze dan wordt opgeslagen in mysql?
Ik snap echt niet meer hoe ik dit voor elkaar kan krijgen..
alvast bedankt
Tot zo ver was ik ook al gekomen. Maar nu wil ik per <option> ook een score kunnen invullen. Deze score moet dan worden toegevoegd in de SQL tabel aan hetzelfde ID als de wedstrijd.
Is dat mogelijk?
Afhankelijk van de organisatie bouw je meestal formulieren. Bij wedstrijden denk ik bijvoorbeeld aan de volgende database-tabel opbouw:
wedstrijden
id
datum_wedstrijd
team_thuis_id
team_uit_id
score_thuis
score_uit
En dan heb je nog een tabel met teams (van clubs, die je voor het gemak ook samen zou kunnen nemen, het is maar net hoe uitgebreid je informatie is die je bijhoudt).
Als de coaches van een team scores in kunnen vullen dan is het misschien handig als ze alleen dat kunnen doen, iemand anders vult de informatie van de gespeelde / te spelen wedstrijd in, en de coach (of coaches van beide partijen) vullen deze informatie in (of bevestigen een reeds ingevulde score).
Dan zou je nog statussen bij kunnen houden (nog te spelen, gespeeld, afgelast etc.).
Je data(base)structuur bepaalt hoe je dit vervolgens vertaalt naar een of meerdere formulieren, maar dit volgt meestal redelijk "natuurlijk" uit de tabelopbouw zelf.
EDIT: in mijn opzet ligt middels het wedstrijd-id al vast wanneer welk team tegen wie speelt, dit is de "kapstok" waar je de informatie aan ophangt. Alleen als je een wedstrijd "aanmaakt" of "wijzigt" stel je in principe deze informatie in. Als je een score invult van een gespeelde partij ligt de overige informatie (team thuis/team uit/datum) in principe vast?
Gewijzigd op 20/03/2015 17:21:45 door Thomas van den Heuvel
Code (php)
1
2
3
4
2
3
4
var standthuis = $('#stand_thuis').val();
var standuit= $('#stand_uit').val();
$('#standen').append('<option value="'+standthuis+'-'+standuit+'" selected="selected">'+standthuis+'-'+standuit+'</option>');
var standuit= $('#stand_uit').val();
$('#standen').append('<option value="'+standthuis+'-'+standuit+'" selected="selected">'+standthuis+'-'+standuit+'</option>');
Zo kan je een apart formulierveld maken om je <option>'s uit te kunnen breiden.
Gewijzigd op 20/03/2015 17:24:30 door - Ariën -
De coach voert bij mij de te spelen wedstrijden in. Zo geeft hij aan wanneer de wedstrijd gespeeld wordt, hoe laat, het thuis spelende team en uitspelende team.
Door middel van mijn query wordt er gekeken of deze wedstrijd al gespeeld is. Wanneer dit nog niet is wordt de wedstrijd weergeven op het index scherm van alle spelers. Zo kunnen zij precies zien wanneer zij moeten voetballen.
Wanneer een wedstrijd wel al gespeeld is, wordt deze niet meer weergegeven op de index pagina bij te spelen wedstrijden, maar verhuisd deze naar resultaten.
De coach krijgt dan dus ook de mogelijkheid om een score in te vullen, maar daar gaat het dus mis bij mij.
Tot op heden heb ik het volgende:
Het thuis spelende team & uitspelende team worden weergeven als <option> in een <select> (form). Om maar even een voorbeeld te nemen, team A - team B.
Deze wedstrijden zijn allemaal al in een eerder stadium opgeslagen en hebben dus ook allemaal een vast ID.
Nu wil ik het voor elkaar krijgen dat wanneer ik een <option> selecteer, bijvoorbeeld dus team A - team B. Dat ik in een daarachter liggende <input> de uitslag kan invullen.
Aangezien de match_score nog leeg is in de SQL tabel, moet doormiddel van de ingevoerde score deze worden geupdate.
Dus in principe moet de <option> team A - team B </option> zijn ID meegeven aan de daarachter liggende <input>. Wanneer ik dan de waarde uit de <input> ophaal zou deze in de SQL tabel geplaatst moeten worden achter het ID waarmee de wedstrijd is geregistreerd.
Gewijzigd op 20/03/2015 17:48:01 door Rick Verdonck
Ik zou je wel aanraden de scores apart (in twee aparte velden) op te slaan. Zodat je later nog de flexibiliteit hebt om iets met doelpuntensaldo's te doen bijvoorbeeld.
Als je een wedstrijden-tabel hebt dan kun je in de value van de option het wedstrijd-id meegeven, en vervolgens vul je in 2 velden de thuis- en uit-score in. Vervolgens UPDATE je (bij verwerking van het formulier) de scores in de wedstrijden-tabel op grond van de (het) geselecteerde wedstrijd(-id).
Hierbij lijkt het mij het eenvoudigste dat je 1 wedstrijd per formulier-submit voorziet van een score, ik neem aan dat dat is wat je wilt?
Waar loop je hier precies mee vast? Of wellicht kun je al uit de voeten met bovenstaande mogelijke aanpak.
Ik zal mijn code even hieronder plaatsen zodat jullie kunnen zien waar ik het over heb. We zitten nu wel op de goede weg volgens mij! ;-)
Met deze query haal ik al mijn data uit de SQL tabel
$result = mysql_query("SELECT * FROM results WHERE match_date < CURDATE() ORDER BY match_date DESC");
Met de onderstaande while loop haal ik alle wedstrijden uit de tabel, en toon deze in een <option> die onderdeel is van een <section>
Code (php)
1
2
3
4
5
2
3
4
5
<?php
while($data = mysql_fetch_assoc($result)) {
echo '<option value="'.$data['id'].'">'.$data['home_team'].' - '.$data['away_team'].'</option>';
}
?>
while($data = mysql_fetch_assoc($result)) {
echo '<option value="'.$data['id'].'">'.$data['home_team'].' - '.$data['away_team'].'</option>';
}
?>
De value krijgt nu het ID mee als waarde. Dus bijvoorbeeld: <option value="1">Team A - Team B</option>
Nu blijft alleen nog de vraag open staan hoe ik scores kan toevoegen aan deze wedstrijden, en deze dan kan toevoegen aan de database?
Nogmaals dank voor de reacties. Hopelijk kom ik eruit met jullie hulp!
Gewijzigd op 20/03/2015 20:12:00 door Rick Verdonck
Je hebt toch het id? Die gebruik je in je POST-reqeust, en die kan je dan gebruiken bij het INSERT'en.
Je formulier:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<form action="process.php" method="post">
<select name="match"><?php
// je PHP+MySQL spul hier voor het genereren van je dropdown-data
?></select>
home score <input type="text" name="home_score" /><br />
away score <input type="text" name="away_score" /><br />
<button type="submit">save</button>
</form>
<select name="match"><?php
// je PHP+MySQL spul hier voor het genereren van je dropdown-data
?></select>
home score <input type="text" name="home_score" /><br />
away score <input type="text" name="away_score" /><br />
<button type="submit">save</button>
</form>
De verwerking (process.php of wat dan ook):
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
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// * controles, zie toelichting hieronder *
mysql_query(
'UPDATE results
SET home_score = '.$_POST['home_score'].',
away_score = '.$_POST['away_score'].'
WHERE id = '.$_POST['match']
);
}
// doorverwijzing naar ergens anders
header('Location: somewhere.php');
exit;
?>
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// * controles, zie toelichting hieronder *
mysql_query(
'UPDATE results
SET home_score = '.$_POST['home_score'].',
away_score = '.$_POST['away_score'].'
WHERE id = '.$_POST['match']
);
}
// doorverwijzing naar ergens anders
header('Location: somewhere.php');
exit;
?>
Controles die je uit zou moeten voeren:
- $_POST['home_score'] en $_POST['away_score'] zouden niet-negatieve gehele getallen moeten zijn, te meer als je deze waarden opslaat in kolommen met een numeriek type
- $_POST['match'] zou een wedstrijd-index moeten zijn
Ook zou je moeten overwegen om, als je deze code op dit moment aan het schrijven bent, over te stappen op mysqli want de standaard mysql-extensie (en daarmee alle functies die starten met mysql_) gaat binnen niet al te lange tijd verdwijnen en is eigenlijk al 10 jaar verouderd.
Bedankt!