[PHP] geselecteerde waarden van lijst naar PHP verzenden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • chronozphere
  • Registratie: Juli 2006
  • Laatst online: 16-12-2020
Hoi PHP-ers, :)

Ik heb een klein probleempje. Ik wil graag alle geselecteerde waarden uit een lijst naar een PHP script sturen. Ik heb het volgende gemaakt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?PHP

if ($_GET["submit"] == "send")
{

echo "This is the list data: ".$_GET["listdata"];


} else {

        echo "<form method='get'>
              <select multiple name='listdata'>
              <option value='a'>first
              <option value='b'>second
              <option value='c'>third
              <option value='d'>fourth
              </select>
              <input type='submit' name='submit' value='send'>
              </form>
            ";
}

?>


Dit script zou de geselecteerde waarden uit de lijst weer moeten geven. Als ik b.v waarde 1 en 3 selecteer en op send klik, krijg ik de volgende URL:

code:
1
testlist.php?listdata=a&listdata=c&submit=send

en ik zie het volgende op mijn scherm
code:
1
This is the list data: c


Alleen de hoogste waarde word opgevangen in het PHP script. De rest gaat verloren. :'(

Weet iemand een manier om alle waarden in mijn script te pompen?

Heel erg bedankt alvast. ;)

BTW: voordat iemand me erop wijst. Ik wil uiteindelijk POST gebruiken, maar GET is nu ff iets praktischer aangezien ik dan beter zie wat er gebeurd. :)

Acties:
  • 0 Henk 'm!

  • Kwastie
  • Registratie: April 2005
  • Laatst online: 19-09 10:42

Kwastie

Awesomeness

je moet de option afsluiten. Met </option>

+ waarom gebruik je GET ? waarom geen POST ? 8)7

When I get sad i stop being sad and be awesome instead


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

HTML:
1
<select multiple name="listdata[]">

/Gokje

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je kan ook zien wat er met POST gebeurt als je die gewoon even afdrukt. 8)7

Ik geloof trouwens dat je huidige code wel werkt als je je select een andere naam geeft: listdata[]. :)

edit:
* NMe geeft AtleX een schop. :o

[ Voor 10% gewijzigd door NMe op 16-03-2008 12:42 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • ChessSpider
  • Registratie: Mei 2006
  • Laatst online: 01-08 19:01
verander de name is in
listdata[]
?
edit: meh -_-

[ Voor 16% gewijzigd door ChessSpider op 16-03-2008 12:42 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Als je nou de form method van "get" naar "post" verandert, dan kun je kijken, zodra je het form gepost hebt, wat er in listdata staat.
Dit kan met een functie die je kunt vinden als je in de faq een stukje leest over debuggen.

Vervolgens heb je in je form meerdere regels voor listdata. Als je er meerdere wilt aanklikken
en dat wilt doorgeven aan jouw script, dan moet je even googlen.
Sleutelwoord voor google = "multiple select"

[ Voor 0% gewijzigd door Verwijderd op 16-03-2008 12:46 . Reden: te laat ]


Acties:
  • 0 Henk 'm!

  • chronozphere
  • Registratie: Juli 2006
  • Laatst online: 16-12-2020
Bedankt iedereen. Dit lijkt te werken:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?PHP

if ($_GET["submit"] == "send")
{

foreach($_GET['listdata'] as $value) {
  echo "This is the list data: ".$value."<br>";
}

} else {

        echo "<form method='get'>
              <select multiple name='listdata'>
              <option value='a'>first</option>
              <option value='b'>second</option>
              <option value='c'>third</option>
              <option value='d'>fourth</option>
              </select>
              <input type='submit' name='submit' value='send'>
              </form>
            ";
}

?>


Ik zie niet in waarom ik [] aan de naam zou moeten toevoegen... maarjah :?
+ waarom gebruik je GET ? waarom geen POST ? 8)7
door get te gebruiken kwam ik erachter dat er eigenlijk meerdere assignments achter elkaar verzonden werden:

code:
1
2
listdata=a
listdata=c


a gaat verloren doordat deze overschreven wordt. Is misschien niet echt een toevoeging, maar ik wou gewoon ff expirimenteren. ;)

Ik zal uiteindelijk natuurlijk gewoon $_POST gebruiken. 8)

Acties:
  • 0 Henk 'm!

Verwijderd

POST gebruken lost het niet op :P Maak er ListData[] van, zodat php weet dat iedere waarde in die Array geplaatst moet worden. Dan kan je die array gebruiken.

Acties:
  • 0 Henk 'm!

Verwijderd

chronozphere schreef op zondag 16 maart 2008 @ 13:09:

Ik zie niet in waarom ik [] aan de naam zou moeten toevoegen... maarjah :?


[...]


door get te gebruiken kwam ik erachter dat er eigenlijk meerdere assignments achter elkaar verzonden werden:

code:
1
2
listdata=a
listdata=c


a gaat verloren doordat deze overschreven wordt. Is misschien niet echt een toevoeging, maar ik wou gewoon ff expirimenteren. ;)

Ik zal uiteindelijk natuurlijk gewoon $_POST gebruiken. 8)
Juist omdat je meerdere waarden in een variabele met dezelfde naam wilt stoppen gebruik je [], hiermee geef je aan dat de variabele een Array is.

En met ListData[] = x geef je aan dat 'x' moet worden toegevoegd onderaan de array, vandaar dat het zo werkt :).

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zondag 16 maart 2008 @ 12:45:
Als je nou de form method van "get" naar "post" verandert, dan kun je kijken, zodra je het form gepost hebt, wat er in listdata staat.
Onzin, dat kan met GET én met POST. Maar er is gewoon geen reden om eerst GET te gebruiken als je uiteindelijk toch naar POST toe wil, doe het dan meteen goed zou ik zeggen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

-NMe- schreef op zondag 16 maart 2008 @ 14:41:
[...]

Onzin, dat kan met GET én met POST. Maar er is gewoon geen reden om eerst GET te gebruiken als je uiteindelijk toch naar POST toe wil, doe het dan meteen goed zou ik zeggen. :)
Het enige verschil is dat je met GET zonder extra moeite gelijk kan zien wat de waarde van alle items is die doorgestuurd worden (al is een print_r op $_POST wel overzichtelijker).

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik vind het persoonlijk toch vrij lastig om bijvoorbeeld bij een formulier van 22 inputs in de url te moeten checken wat er gebeurt. :+

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • chronozphere
  • Registratie: Juli 2006
  • Laatst online: 16-12-2020
Jullie hebben natuurlijk gelijk.. ik ben nu eenmaal nog niet zo ver. heb in een ver verleden eens wat gePHPed en heb het na jaren maar weer eens opgepakt. ;)

Ik wist niet zeker hoe ik die array uit moest lezen. Na even expirimenteren bleek het volgende te werken:

code:
1
2
3
for ($i=0; $i<count($_GET["listdata"]); $i++) {
    echo "item in array: ".$_GET["listdata"][$i]."<br>"; 
}


bedankt allemaal. :)

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

Weet wel dat een count in de for-loop over het algemeen wordt afgeraden. Nu voert hij namelijk iedere iteratie van de loop de count functie uit. Je kan beter eerst die count uitvoeren en aan een variabele toewijzen.

Het allerbeste is echter om gebruik te maken van foreach(), dat is namelijk nog sneller.

Acties:
  • 0 Henk 'm!

  • tonyisgaaf
  • Registratie: November 2000
  • Niet online
chronozphere schreef op zondag 16 maart 2008 @ 19:37:
Ik wist niet zeker hoe ik die array uit moest lezen. Na even expirimenteren bleek het volgende te werken:

code:
1
2
3
for ($i=0; $i<count($_GET["listdata"]); $i++) {
    echo "item in array: ".$_GET["listdata"][$i]."<br>"; 
}


bedankt allemaal. :)
Makkelijker:
http://nl2.php.net/manual/en/function.print-r.php
Example #1

NL Weerradar widget Euro Stocks widget Brandstofprijzen widget voor 's Dashboard


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Patriot schreef op zondag 16 maart 2008 @ 23:49:
Het allerbeste is echter om gebruik te maken van foreach(), dat is namelijk nog sneller.
Sneller om in te tikken of sneller in de uitvoering?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
In dit geval sneller in uitvoering omdat de count() op een stomme plek staat, en in 95% vd andere gevallen is de for vs foreach discussie een discussie over micro-optimalisaties. :P
Maar in het algemeen is foreach gewoon een hele elegante oplossing om een complete array af te lopen. :)

{signature}


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

chronozphere schreef op zondag 16 maart 2008 @ 19:37:
Jullie hebben natuurlijk gelijk.. ik ben nu eenmaal nog niet zo ver. heb in een ver verleden eens wat gePHPed en heb het na jaren maar weer eens opgepakt. ;)
Dan heb ik maar 1 suggestie. Zoek een (e)boek over PHP5. Er is in de laatste paar jaren nogal wat veranderd aan PHP. Ook de altijd handige PHP manual doet wonderen, bijvoorbeeld dit stuk over arrays.

Anyone who gets in between me and my morning coffee should be insecure.

Pagina: 1