[PHP] Form uitlezen met groot aantal zelfde soort vars

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb het volgende form:
HTML:
1
2
3
4
5
<form name="links" action="verwerk.php" method="post">
  <input type="text" name="link1" value="yahoo.com">
  <input type="text" name="link2" value="msn.com">
  <input type="submit" value="submit">
</form>

Het aantal text inputs is variabel. Het form kan er dus net zo goed zo uit zien:
HTML:
1
2
3
4
5
6
7
<form name="links" action="verwerk.php" method="post">
  <input type="text" name="link1" value="yahoo.com">
  <input type="text" name="link2" value="msn.com">
  <input type="text" name="link3" value="amazon.com">
  <input type="text" name="link4" value="google.com">
  <input type="submit" value="submit">
</form>

In dit form kan de gebruiker de namen van de links veranderen. Ik wil dat de gebruiker ineens alle links kan veranderen die hij / zij wenst te veranderen alvorens te submitten. Zo kan het dus zijn dat de gebruiker "yahoo.com" verandert in "microsoft.com" en "google.com" in "teoma.com". Als hij / zij op submit klikt, wil ik op verwerk.php link1 t/m link4 uitlezen en een query opbouwen om de wijzigingen door te voeren in de database.

Probleem is alleen: hoe kan ik op verwerk.php met een loopje gemakkelijk alle link-waardes uitlezen? Als ik zeker zou weten dat ik alleen link1 en link2 gesubmit krijg, zou ik schrijven:
PHP:
1
2
3
4
if (!empty ($_POST)) {
    $link1 = $_POST['link1'];
    $link2 = $_POST['link2'];
}

Maar hoe doe ik dit als er bv. 70 links verzonden worden? Hoe ziet de loop eruit waarmee ik dit makkelijk kan doen? Pseudo:
PHP:
1
2
3
4
5
if (!empty ($_POST)) {
    for ($i = 0; $i < each value in $_POST, $i++) {
        $link$i = $_POST['link$i'];
    }
}

Of denk ik nu veel te moeilijk?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 21-09 12:54
Als je "<input type="text" name="link2" value="msn.com">" nou eens vervangt door "<input type="text" name="link[]" value="msn.com">". Door deze constructie kun je met PHP die variabele link benaderen als een array. Voor arrays zijn er weer allerlei standaard functies beschikbaar zoals hoeveel elementen erin zitten.

Hier kun je nog wat extra info over PHP en HTML vinden.

[ Voor 30% gewijzigd door Sybr_E-N op 12-04-2004 18:44 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Aanvulling op hierboven:
Bouw je velden zo op:
code:
1
<input type="text" name="link[x]" value="bla">

Waarin x voor een getal staat...
Daarna kan je in php met een regeltje alle links opvragen:
PHP:
1
2
3
4
5
$links = $_POST["link"];
foreach($links as $key => $value)
{
//nummer $key heeft waarde $value
}

Acties:
  • 0 Henk 'm!

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 19-09 12:09
reactie op bovenstaande:
code:
1
<input type="text" name="link[]" value="foo">

net zoals Sybr_E-N dus. Je kunt dan binnen je script met een array werken ($link = $_POST['link']) en hier heel eenvoudig doorheen loopen. Je hebt dan ook niet het probleem dan je evt counters (bijvoorbeeld 'x') moetgaan bijhouden :)