foreach $_POST met twee values
Ik heb twee velden in m'n formulier:
<input name='".$inschrijfnr."' type='text' value='".$ploeg."'>
<input name='".$inschrijfnr."bus' type='text' value='".$busnr."'>
In het opslaan-/update bestand waarnaar het formulier verwijst, heb ik dit script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$inschrijfnr = $_REQUEST['inschrijfnr'];
$ploeg = $_REQUEST['ploeg'];
$busnr = str_replace('bus','',$_REQUEST['bus']);
foreach ($_POST as $inschrijfnr => $ploeg) {
if(is_numeric($inschrijfnr) ){
echo $inschrijfnr." - Ploeg:".$ploeg." - Bus:".$busnr."<br>";
//doe iets in database
}
}
?>
$inschrijfnr = $_REQUEST['inschrijfnr'];
$ploeg = $_REQUEST['ploeg'];
$busnr = str_replace('bus','',$_REQUEST['bus']);
foreach ($_POST as $inschrijfnr => $ploeg) {
if(is_numeric($inschrijfnr) ){
echo $inschrijfnr." - Ploeg:".$ploeg." - Bus:".$busnr."<br>";
//doe iets in database
}
}
?>
Wat ik echter op het scherm wil zien is:
Inschrijfnummer, bijbehorend ploegnummer, én bijbehorend busnummer.
In bovenstaand script wordt dus logischerwijs nog niet het busnummer afgebeeld behorende bij het inschrijfnummer. Wel het ploegnummer.
Maar wat moet ik doen om wél ook het busnummer er achter in beeld te krijgen?
Misschien ten overvloede, maar $inschrijfnummer in het ploegenveld wordt in een loop uit de database gehaald, dus er zijn meerdere ploeg-velden die de naam van het inschrijfnummer hebben...
Enige duw in de goede richting is uiteraard welkom...
Gewijzigd op 24/09/2014 20:10:08 door Eric T
of $_GET, net hoe je je formulier verzendt.
Want je gebruikt $_REQUEST voor je informatie, maar gaat $_POST af om te kijken wat er te doen is.
Om er vervolgens niets mee te doen.
Kijk daar eerst naar.
Daarnaast is het redelijk raar dat je de namen van je velden noemt naar een nummer.
Wordt dat automatisch in het formulier gezet? Zet het dan gewoon in een type="hidden" veld met name="inschrijfnummer" of zoiets.
Code (php)
1
2
3
2
3
<input name="inschrijfnummer" type='hidden' value="2">
<input name="ploeg" type='text' value="a1">
<input name="busnummer" type='text' value="14">
<input name="ploeg" type='text' value="a1">
<input name="busnummer" type='text' value="14">
Dit is correcte HTML wat je kan uitlezen met php.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$inschrijfnummer = $_POST['inschrijfnummer']; // hier zal 2 uitkomen
$ploeg = $_POST['ploeg']; // hier zal a1 uitkomen
$busnr = $_POST['busnummer']; // hier zal 14 uitkomen
?>
$inschrijfnummer = $_POST['inschrijfnummer']; // hier zal 2 uitkomen
$ploeg = $_POST['ploeg']; // hier zal a1 uitkomen
$busnr = $_POST['busnummer']; // hier zal 14 uitkomen
?>
EDIT:
Laten we zeggen dat je veldnamen die uit de DB komen allemaal 14 hebben.
je krijgt dan dit;
Code (php)
1
2
3
2
3
<input name="14[]" type='hidden' value="2">
<input name="14[]" type='text' value="a1">
<input name="14[]" type='text' value="14">
<input name="14[]" type='text' value="a1">
<input name="14[]" type='text' value="14">
Deze velden kan je dan uitlezen als een array. Door er 2 haakjes achter te plaatsen[].
Met php kan je dit weer uitlezen als:
Ik weet inmiddels hoe het zit (net voordat je postte)...
Ik was afgeleid door de regels die de velden ophalen $_REQUEST[] etc.
Deze regels blijken namelijk weggelaten te kunnen worden...
De foreach() haalt namelijk alle info op uit $_POST, en dat zijn telkens regels van alle inputvelden, submit knop en meer van dat soort dingen. Ik zag dus bijvoorbeeld ook keurig netjes 'submit' met waarde 'Opslaan' er tussen :-)
Kort gezegd: $_POST bevat dus alle form info.
De foreach ziet er nu zo uit, en dat gaat goed:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
foreach ($_POST as $inschrijfnr => $gegevens) {
if($inschrijfnr=="submit" || $inschrijfnr=="actie"){ continue; }
if($inschrijfnr!='' && strpos($inschrijfnr,'bus')==false){
echo $inschrijfnr." - Ploeg:".$gegevens;
//update de database met ploegnummer
}
if(strpos($inschrijfnr,'bus')==true){
echo " - Bus:".$gegevens."<br>";
$inschrijfnr = str_replace('bus','',$inschrijfnr);
//update database met busnummer
}
}
?>
foreach ($_POST as $inschrijfnr => $gegevens) {
if($inschrijfnr=="submit" || $inschrijfnr=="actie"){ continue; }
if($inschrijfnr!='' && strpos($inschrijfnr,'bus')==false){
echo $inschrijfnr." - Ploeg:".$gegevens;
//update de database met ploegnummer
}
if(strpos($inschrijfnr,'bus')==true){
echo " - Bus:".$gegevens."<br>";
$inschrijfnr = str_replace('bus','',$inschrijfnr);
//update database met busnummer
}
}
?>
Ongetwijfeld dat het anders, mooier en/of korter kan...
Maar voor nu werkt het in elk geval :-)
Eric
Al vind ik het wel raar dat je het inschrijfnummer als naam gebruikt.
En dan later moet 'gissen' wat wat is.
Houd dat gescheiden:
Code (php)
1
2
3
2
3
<input name="inschrijfnummer" type='hidden' value="2">
<input name="ploeg" type='text' value="a1">
<input name="busnummer" type='text' value="14">
<input name="ploeg" type='text' value="a1">
<input name="busnummer" type='text' value="14">
is dus echt beter.
@Rick Dat is een uitgebreide uitleg :-) Zeer gewaardeerd! Als ik het zo lees, maakt dat het idd wat netter en korter... Ga daar toch nog even mee stoeien :-) Dank je!
dus dit verborgen veld:
geeft na een submit:
Gewijzigd op 25/09/2014 01:28:49 door Frank Nietbelangrijk
Code (php)
In je PHP kan je dan $_POST['data'][123]['ploeg'] gebruiken voor A1 bij inschrijfnummer 123.
En $_POST['data'][123]['busnummer'] dus voor het busnummer.
Maar waarom zijn de inschrijfnummers zo belangrijk?
Had em zelf bijna nu zo idd ook...
Dankje!