Hoe kan ik data uit een form <select> wegschrijven per id in database (mysql)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rick Verdonck

Rick Verdonck

20/03/2015 16:54:15
Quote Anchor link
Beste forumleden,

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
 
PHP hulp

PHP hulp

15/11/2024 23:53:10
 
- Ariën  -
Beheerder

- Ariën -

20/03/2015 17:01:31
Quote Anchor link
Je kan een foreach of while() uitvoeren om je <option>-velden van je select-input te vullen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$sql
= "SELECT id,stand_thuis, stand_uit FROM uitslagen";
$result = mysqli_query($con, $sql);
while($data = mysqli_fetch_assoc($result)) {
    echo '<option value="'.$data['id'].'">'.$data['stand_thuis'].'-'.$data['stand_uit'].'</option>';
}

?>
 
Rick Verdonck

Rick Verdonck

20/03/2015 17:13:53
Quote Anchor link
Dankjewel voor je snelle reactie.

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?
 
Thomas van den Heuvel

Thomas van den Heuvel

20/03/2015 17:18:22
Quote Anchor link
De manier waarop je je data organiseert lijkt mij het belangrijkste. Er zijn ook vele oplossingen denkbaar.

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
 
- Ariën  -
Beheerder

- Ariën -

20/03/2015 17:23:38
Quote Anchor link
Zou wel mogelijk moeten zijn, met jQuery kan het als volgt (even uit blote hoofd):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
var standthuis = $('#stand_thuis').val();
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 -
 
Rick Verdonck

Rick Verdonck

20/03/2015 17:40:22
Quote Anchor link
In principe heb ik alle data al vooraf verzameld zoals je zelf al aangeeft.

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
 
Thomas van den Heuvel

Thomas van den Heuvel

20/03/2015 19:57:15
Quote Anchor link
Aha, dus de dropdown bevat in wezen de wedstrijd, en het label (de option) bevat de teams "thuis vs uit" van de gespeelde wedstrijd.

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.
 
Rick Verdonck

Rick Verdonck

20/03/2015 20:00:21
Quote Anchor link
Bedankt voor de reacties.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
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
 
- Ariën  -
Beheerder

- Ariën -

20/03/2015 20:17:44
Quote Anchor link
Je hebt toch het id? Die gebruik je in je POST-reqeust, en die kan je dan gebruiken bij het INSERT'en.
 
Thomas van den Heuvel

Thomas van den Heuvel

20/03/2015 20:18:14
Quote Anchor link
Er vanuitgaande dat er een kolom home_score en away_score in die tabel zit, en dat je 1 score per submit verwerkt, heel kort door de bocht:

Je formulier:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>


De verwerking (process.php of wat dan ook):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
?>

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.
 
Rick Verdonck

Rick Verdonck

20/03/2015 20:36:33
Quote Anchor link
Thomas van den Heuvel, je bent mijn held!

Bedankt!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.