Hoi iedereen,
Ik ben bezig met een uitslagen formulier waar leden wedstrijd uitslagen in kunnen vullen.
De wedstrijden worden uit de database gehaald en in een while loop weergegeven, om bij elke wedstrijd een uitslag te kunnen invullen maak ik bij de sql insert query gebruik van een foreach.
In mijn formulier is de input text veld dus zo opgebouwd:
Werkt prima met deze foreach:Code:<input type="text" size="3" name="uitslag[]" />
Zoals je ziet worden er 3 dingen opgeslagen, lid_id, wedstrijd_id en uitslag.Code:foreach ($_POST['uitslag'] as $key => $value) { if(!empty($value)) { $uitslag = secure_string($value); $insert_uitslagen = mysql_query(" INSERT INTO wedstrijd_uitslagen (id,lid_id,wedstrijd_id,uitslag) VALUES ( '', '".secure_string($_SESSION["lid_id"])."', '".secure_string($_POST['wedstrijd_id'])."', '".$uitslag."' )")or die (mysql_error()); } }
Er wordt netjes voor elke nieuwe uitslag en nieuwe rij aangemaakt en de uitslag daarin weergegeven, alleen het probleem zit in "wedstrijd_id". Die wordt in het formulier nu als een hidden field meegegeven, maar bij het maken van de query merk ik dat alleen de laatst gegeven wedstrijd_id in het form bij alle nieuwe uitslagen in komt te staan.
Dit wordt in de database gezet (fictief):
id,lid_id,wedstrijd_id,uitslag
'1','4','20','4-5'
'2','4','20','2-1'
'3','4','20','3-1'
Zoals je ziet blijft wedstrijd_id hetzelfde in het formulier bij elke uitslag terwijl dit eigenlijk het wedstrijd_id moet zijn die bij die uitslag hoort.
Dus ik zat te denken om wedstrijd_id ook in een foreach loop te achterhalen en of moet ik dit anders verwerken in mijn form?
- Foreach probleem
-
01-08-2011, 10:53 #1
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
Foreach probleem
-
In de schijnwerper
9 sites voor linkbuilding - geen reserveWebsite te koop[SNELLE LEVERING] Laat je website / webshop snel en professioneel bouwen!Freelance / Werk2 reclamefolders sites te koop voor NL en BEWebsite te koopWebsitedown.nl - Controleren of jou of andere websites online of offline zijnWebsite te koop -
01-08-2011, 11:04 #2
- Berichten
- 39
- Lid sinds
- 14 Jaar
Re: Foreach probleem
Mag ik je hele form zien? Lijkt me stug dat je hele formulier werkt op basis van 1 input field.
Misschien kun je meerdere hidden inputs meegeven met elk een unieke id (wat dus de wedstrijdid is).
-
01-08-2011, 11:06 #3
- Berichten
- 501
- Lid sinds
- 18 Jaar
Re: Foreach probleem
Als in je Database de velden een INT zijn waar je een getal invoerd dan hoef je sowieso geen '' om getallen te zetten. Dit vergroot je leesbaarheid.
-
01-08-2011, 11:10 #4
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
Re: Foreach probleem
Code:<form action="" method="post"> <input type="hidden" name="wedstrijd_id" value="'.stripslashes($wedstrijd['id']).'" /> <input type="text" size="3" name="uitslag[]" /> </form>
-
01-08-2011, 11:18 #5
- Berichten
- 501
- Lid sinds
- 18 Jaar
Re: Foreach probleem
Hoi,
Gaat het dan al niet fout bij het ophalen van de wedstrijden?
Martijn
-
01-08-2011, 11:24 #6
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
Re: Foreach probleem
@Martijn
Nee het hidden field vertoond de juiste ID's. Ik zat te denken om misschien de hidden field ook als foreach weer te geven.:
Code:<input type="hidden" name="wedstrijd_id[]" value="'.stripslashes($wedstrijd['id']).'" />
-
01-08-2011, 11:27 #7
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Re: Foreach probleem
Begrijp ik het goed dat je meerdere van deze formulieren op 1 pagina hebt? Of meerdere van deze onder elkaar plaatst? Laat eens wat meer zien.
Als er PER wedstrijd maar 1 uitslag veld is, en je plaatst meerdere uitslag velden op je pagina moet je natuurlijk ook zorgen dat je meerdere wedstrijd IDs meestuurt, dus:
<form>
<input type="hidden" name="wedstrijd_id[]" value="1">
<input type="text" name="uitslagen[1]">
<input type="hidden" name="wedstrijd_id[]" value="2">
<input type="text" name="uitslagen[2]">
<input type="hidden" name="wedstrijd_id[]" value="3">
<input type="text" name="uitslagen[3]">
</form>
Nu kun je in je foreach kiezen om de wedstrijden op te halen en de array keys te gebruiken om je uitslag te vinden:
PHP Code:foreach($_POST['wedstrijd'] as $key => $wedstrijd_id) {
if(!empty($_POST['uitslagen'][ $key ])) {
$uitslag = secure_value($_POST['uitslagen'][$key]);
$wedstrijd_id = secure_value($wedstrijd_id);
...
}
}
uitslagen[] = '1-1';
uitslagen[] = '';
uitslagen[] = '2-1';
levert een array op:
array(
0 => '1-1',
1 => '2-1'
);
en niet een een 3e key met daarin een lege waarde.
In jouw code krijg je dus:
<input type="hidden" name="wedstrijd_id[]" value="'.stripslashes($wedstrijd['id']).'" />
<input type="text" name="uitslag['.stripslashes($wedstrijd['id']).']" size="3" />
-
01-08-2011, 11:28 #8
- Berichten
- 501
- Lid sinds
- 18 Jaar
Re: Foreach probleem
Laat eens wat meer van je script zien?
Dus vanaf het begin waar je die formulier gaat maken.
@Joshua was mij net voor.
-
01-08-2011, 11:49 #9
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
Re: Foreach probleem
@Joshua / Martijn
Het klopt inderdaad dat er meerdere velden in het form zijn en hoe jij het nu weergeeft Joshua werkt het. Heb nu dit:
Foreach:
Code:foreach($_POST['wedstrijd_id'] as $key => $wedstrijd_id) { if(!empty($_POST['uitslag'][ $key ])) { $uitslag = secure_string($_POST['uitslag'][$key]); $wedstrijd_id = secure_string($wedstrijd_id); $insert_uitslagen = mysql_query(" INSERT INTO wedstrijd_uitslagen (id,lid_id,wedstrijd_id,uitslag) VALUES ( '', '".secure_string($_SESSION["lid_id"])."', '".$wedstrijd_id."', '".$uitslag."' )")or die (mysql_error()); } }
Code:<form action="" method="post"> <input type="hidden" name="wedstrijd_id[]" value="'.stripslashes($wedstrijd['id']).'" /> <input type="text" size="3" name="uitslag['.stripslashes($wedstrijd['id']).']" /> <form>
Bijvoorbeeld mijn eerste uitslag die ik toevoeg is ID 8 dus in het form staat bij "wedstrijd_id[]" value="8" en "uitslag[8]".
De uitslag staat in de database, maar bij wedstrijd_id staat "15" om een of andere vage reden. De tabel heb ik van de te voren geleegd en gecheckt met de wedstrijden maar zie geen overeenkomst met de 15 die is toegevoegd. Dit geldt trouwens voor alle wedstrijden die ik ga invullen dat er een andere ID komt te staan. Mijn uitslag staat dus nu bij wedstrijd_id 15 wat uiteraard een andere wedstrijd moet voorstellen.
-
01-08-2011, 12:26 #10
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Re: Foreach probleem
Probeer je resultaten eens te tonen met <pre> print_r($_POST); </pre> dan kun je zien welke array terug gestuurd wordt en kun je kijken of je koppelingen kunt maken met de resultaten en wedstrijd IDs. Even de query commenten zodat je niet de hele tijd de boel hoeft leeg te maken.
Je kunt ook in je foreach een regel echoën (echo "Wedstrijd id: $wedstrijd_id met uitslagen $uitslag";) en kijken wat je daar in kunt vinden./
-
01-08-2011, 13:32 #11
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
Re: Foreach probleem
Het is gelukt, blijkbaar geeft $wedstrijd_id een foutieve waarde mee, heb nu $key geprobeerd wat juist werkt en nu worden de juiste wedstrijd ID's bij de juiste uitslag weergegeven.
Snap niet echt waarom $wedstrijd_id een andere waarde heeft dan $key.
Bedankt Joshua!
-
01-08-2011, 13:54 #12
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Re: Foreach probleem
$wedstrijd_id = de waarde van het veld en $key is de key. Wat jij doet is:
$wedstrijd_id[0] = 15; (0 = key, 15=id) matchen met $uitslagen[0];
in plaats van
$wedstrijd_id[0] = 15; (0 = key, 15=id) matched met $uitslagen[15];
Je krijgt dan
$uitslag = secure_input($_POST['uitslagen'][ $wedstrijd_id ]);
Is overigens mijn fout in mijn voorbeeld zie ik :-))
-
01-08-2011, 14:05 #13
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
Re: Foreach probleem
Bedankt voor de uitleg Joshua, snap nu ook waarom ;)
Thanx!
-
10-08-2011, 16:06 #14
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
Re: Foreach probleem
Alles werkt goed en mijn form met wedstrijden worden netjes toegevoegd aan de database met de juiste uitslag.
Nu merk ik alleen dat als de wedstrijd_id hoger dan 88 niet toegevoegd worden. De rest werkt perfect zoals het moet. Zo worden de wedstrijden 88 t/m/ 98 niet toegevoegd aan de database, maar krijg ook geen foutmeldingen gewoon lege echo's in de foreach.
Ik heb in de foreach even een echo gedaan en gekeken als ik het formulier in ga vullen wat er precies fout gaat. Overal krijg ik netjes de uitslag en wedstrijd_id te zien vanuit de echo maar vanaf ID's 88 zie ik niks geen echo.
Foreach:
Code:if(isset($_POST['submit'])) { foreach($_POST['wedstrijd_id'] as $key => $wedstrijd_id) { if(!empty($_POST['uitslag'][ $key ])) { $uitslag = secure_string($_POST['uitslag'][$key]); $wedstrijd_id1 = secure_int($key); echo $uitslag.'<br />'; echo $wedstrijd_id1.'<br />'; $insert_uitslagen = mysql_query(" INSERT INTO wedstrijd_uitslagen (id,lid_id,wedstrijd_id,uitslag) VALUES ( '', '".secure_string($_SESSION["lid_id"])."', '".$wedstrijd_id1."', '".$uitslag."' )")or die (mysql_error()); } }
Code:while($wedstrijd = mysql_fetch_assoc($select_wedstrijden)) { echo'<form action="" method="post"> <input type="hidden" name="wedstrijd_id[]" value="'.$wedstrijd['id'].'" /> <input type="text" size="3" name="uitslag['.$wedstrijd['id'].']" /> </form> '; }
Database structuur `wedstrijd_uitslagen`:
id (int11)
lid_id (int11)
wedstrijd_id (int11)
uitslag(varchar10)
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic