[PHP] While lus met checkbox uitlezen

Pagina: 1
Acties:
  • 112 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,
In php heb ik het volgende:
Uit de database wordt een lijst gemaakt met producten (afhankelijk van aantal producten is de lijst dus langer/korter).
Voor ieder product wordt een Checkbox neergezet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
while ($rij = mysql_fetch_assoc ($resultaat)) 
{
   $pcode = $rij['pcode'];
   $adviesprijs = $rij['adviesprijs'];
    
   print ("
            <tr>
                <td width=\"40\"><input name=\"product\" type=\"checkbox\" value=\"$pcode\"></td>
                <td width=\"40\">$pcode</td>
                <td width=\"70\">$adviesprijs</td>            
            </tr> 
        ");
}


Op de volgende pagina wil ik uitlezen welke Checkboxen ingevuld zijn. Zoals je dat ook kan doen met bijvoorbeeld 'Naam':
code:
1
$naam = $HTTP_POST_VARS['naam'];

$naam kan ik dan neer laten zetten in een andere database met bestelde gegevens.

De naam van de Checkbox MOET alleen iedere keer anders zijn, anders krijg je maar alleen de laatst aangevinkte waarde mee.
Wat ik geprobeerd heb is dus om het volgende te doen:
code:
1
<input name=\"$pcode\" type=\"checkbox\" value=\"$pcode\">

Maar zo is niet meer uit te vinden op de volgende pagina welke veldnaam is gebruikt.... Dit gaat ook niet via een lus die alle $pcode's af gaat. ($naam = $HTTP_POST_VARS['naam']; kan je namelijk niet printen in een lus)

Hopeloos, ik kom er niet meer uit. Je moet volgens mij altijd de waarden eerst via HTTP_POST_VARS weer terugkrijgen voordat je er wat mee kan doen. :/

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

waarom maak je er dan geen array van?
PHP:
1
echo '<input name="product['.$pcode.']" type="checkbox"> bla bla....';


en dan heb je in php daarna de beschikking over de array $_POST['product'][] welke je met bijvoorbeeld foreach kan uitlezen :)

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:14
Beter nog is:
PHP:
1
echo '<input name="product[]" type="checkbox" value="'.$pcode.'">';

$_POST['product'] is dan namelijk een array die gevuld wordt met de waarden van de geselecteerde producten.

[ Voor 21% gewijzigd door Soultaker op 24-04-2004 16:52 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm, nog niet echt eerder gewerkt in PHP met Array's, eens proberen. Kijken of het lukt.
Moet ik dan met een While? lus met tellertje die array weer 1 voor 1 uitlezen toch?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Soultaker schreef op 24 april 2004 @ 16:52:
Beter nog is:
..
$_POST['product'] is dan namelijk een array die gevuld wordt met de waarden van de geselecteerde producten.
ligt er maar aan wat de toepassing is, maar beter of "slechter" is het niet ;)

met mijn "oplossing" kan je met simpele isset's checken of een bepaalde checkbox checked is of niet, bij die van jou moet je dan de array doorzoeken ;)
Verwijderd schreef op 24 april 2004 @ 16:57:
Hmm, nog niet echt eerder gewerkt in PHP met Array's, eens proberen. Kijken of het lukt.
Moet ik dan met een While? lus met tellertje die array weer 1 voor 1 uitlezen toch?
de php.net site niet bekend?

http://php.net/array

[ Voor 31% gewijzigd door Erkens op 24-04-2004 16:58 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Owja, goed idee :9

:/ wat een mogelijkheden... die array heb ik daarna dan neergezet als 1 variabele:
code:
1
$product = $HTTP_POST_VARS['product'];

Die moet je dan toch met explode weer uit elkaar kunnen halen begrijp ik en kunnen printen op mn beeld :|

edit nr2

Gelukt, tnx, ik heb gewoon veel te lang op hetzelfde zitten kijken :)

[ Voor 103% gewijzigd door Verwijderd op 24-04-2004 17:23 ]


Acties:
  • 0 Henk 'm!

  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
explode :? Ik zou het met foreach proberen ;) Arrays kunnen verdomde handig zijn, als ik jou was zou ik me daar dus een beetje in verdiepen :)

En ik weet niet welke PHP versie je gebruikt, maar als die > 4.1.0 kan je beter gebruik maken van de $_POST variabele om de waardes van je form op te halen. HTTP_POST_VARS is nl. deprecated. Zie ook $_POST variabele in de manual

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:14
Erkens schreef op 24 april 2004 @ 16:57:
ligt er maar aan wat de toepassing is, maar beter of "slechter" is het niet ;)

met mijn "oplossing" kan je met simpele isset's checken of een bepaalde checkbox checked is of niet, bij die van jou moet je dan de array doorzoeken ;)
Als je een lijst met waarden hebt, vind ik het logischer dat die waarden ook de 'values' (='waarden' :P) in de array zijn en niet de keys. Om te testen of de waarde erin zit, heb je dan de functie in_array. Als je wat implementatiegericht gaat denken zal je tot de conclusie komen dat dat minder efficient is dan het gebruik van isset, maar met zo'n kleine array zal dat in de praktijk niet uitmaken.

Maar als je om een of andere reden toch per se die test wil doen, kan je het ook beiden doen:
PHP:
1
echo '<input name="product['.$pcode.']" type="checkbox" value="'.$pcode.'">';

Je kunt dan zowel isset gebruiken om de keys te testen en constructies als foreach om over de waarde te ittereren.

Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024

Roa

Hmmm... Ik zelf heb een dergelijk probleem anders opgelost, maar het ging hier niet om checkboxes, maar textarea's; kortom, vrij grote texten.

Ik heb dus 1 textveld, page_1, als je er 1 bijdoet krijg je dus page_2, en het verborgen veld pages wordt op 2 gezet. Vervolgens met een while loop plaats ik de info in de database.

Zijn array's eigenlijk ook geschikt voor dit soort dingen? Omdat er nogal veel informatie in een pagina staat...

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Roa schreef op 24 april 2004 @ 18:46:
Ik heb dus 1 textveld, page_1, als je er 1 bijdoet krijg je dus page_2, en het verborgen veld pages wordt op 2 gezet. Vervolgens met een while loop plaats ik de info in de database.

Zijn array's eigenlijk ook geschikt voor dit soort dingen? Omdat er nogal veel informatie in een pagina staat...
dus je hebt dan variabelen als $_POST['page_'.$nummer] :?
ben zelf niet zo'n voorstander van dit soort "oplossingen" want hiervoor zijn array's uitgevonden :)
Je kan dat dus op dezelfde manier doen :)
PHP:
1
2
3
4
5
6
echo '<textarea name="page[]">bla bla</textarea>';
// of als je dat nummertje wel wilt hebben:
echo '<textarea name="page[1]">bla bla</textarea>';
echo '<textarea name="page[2]">bla bla</textarea>';
// waarbij die dus ook als php variabele ingevuld kan worden uiteraard:
echo '<textarea name="page['.$nummer.']">bla bla</textarea>';

na het uitvoeren heb je dus de array $_POST['page'][], al dan niet met handige indexen :P

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is al gelukt met deze manier:
code:
1
<input name=\"product[]\" type=\"checkbox\" value=\"$pcode\">


Op de volgende pagina heb ik dan:
code:
1
$product = $HTTP_POST_VARS['product'];


Later in die pagina in een query die herhaald wordt met een While lus:
code:
1
SELECT (...) Where pcode='$product[$i]'


Werkt prima, en volgens mij zit dat wel netjes/goed/prima zo.. :/

edit
Oja, Ludo, ik heb hier lokaal een hogere versie van PHP draaien, lastig uit te leggen waarom ik de server dan niet laat upgraden, maar ik weet er van ja.

[ Voor 24% gewijzigd door Verwijderd op 24-04-2004 20:28 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 24 april 2004 @ 20:21:
code:
1
2
3
4
$product = $HTTP_POST_VARS['product'];


SELECT (...) Where pcode='$product[$i]'
offtopic:
let wel even op input checking

Acties:
  • 0 Henk 'm!

  • Minos111
  • Registratie: Augustus 2002
  • Laatst online: 05-03-2012
En haal even addslashes() over de variabele content heen voor beveiliging van je mysql-query. Anders zal de tekst "bla bla's blaat "bla" tie bla" een error geven bij het zetten in de db...

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Minos111 schreef op 25 april 2004 @ 09:40:
En haal even addslashes() over de variabele content heen voor beveiliging van je mysql-query. Anders zal de tekst "bla bla's blaat "bla" tie bla" een error geven bij het zetten in de db...
Ik zou liever mysql_escape_string() of mysql_real_escape_string() gebruiken ;)

Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024

Roa

Erkens schreef op 24 april 2004 @ 19:34:
[...]

dus je hebt dan variabelen als $_POST['page_'.$nummer] :?
ben zelf niet zo'n voorstander van dit soort "oplossingen" want hiervoor zijn array's uitgevonden :)
Je kan dat dus op dezelfde manier doen :)
PHP:
1
2
3
4
5
6
echo '<textarea name="page[]">bla bla</textarea>';
// of als je dat nummertje wel wilt hebben:
echo '<textarea name="page[1]">bla bla</textarea>';
echo '<textarea name="page[2]">bla bla</textarea>';
// waarbij die dus ook als php variabele ingevuld kan worden uiteraard:
echo '<textarea name="page['.$nummer.']">bla bla</textarea>';

na het uitvoeren heb je dus de array $_POST['page'][], al dan niet met handige indexen :P
Vandaar dus ook mijn laatste zin: zijn array's hier ook voor geschikt? Want ik bedenk me dat het misschien wel slim is om over te stappen. (Alhoewel een regel natuurlijk is: als het werkt, blijf er vanaf ;) ) Maar het is wel zo dat er pagina's van meerdere alinea's (zeg 300/500 woorden per textveld, dus vrij veel karakters!)
in die array komen. Kan een array dat aan? Zijn ze daarvoor gemaakt zeg maar, normaal zou ik 7 variabelen hebben, nu 1 array die net zoveel bevat als die 7 variabelen.

Maar ja, ik zit iemands topic een beetje te verzieken geloof ik
Verwijderd schreef op 24 april 2004 @ 20:21:
Het is al gelukt met deze manier:
code:
1
<input name=\"product[]\" type=\"checkbox\" value=\"$pcode\">


Op de volgende pagina heb ik dan:
code:
1
$product = $HTTP_POST_VARS['product'];


Later in die pagina in een query die herhaald wordt met een While lus:
code:
1
SELECT (...) Where pcode='$product[$i]'


Werkt prima, en volgens mij zit dat wel netjes/goed/prima zo.. :/

edit
Oja, Ludo, ik heb hier lokaal een hogere versie van PHP draaien, lastig uit te leggen waarom ik de server dan niet laat upgraden, maar ik weet er van ja.
Ik heb ook vandaag een dergelijke oplossing, alleen een iets andere toepassing (ook niet datzelfde als die pagina's dat hierboven staat :P ). Ook checkboxes (20 op een pagina) dat als 1 array wordt uitgelezen en dmv een while lus wordt verwerkt. Werkt prima volgens mij :D

Als je trouwens een hogere versie hebt, dan kan je toch JUIST $_POST gebruiken ipv $_HTTP_POST_VARS??

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:14
Wat? Je vraagt nu serieus of een array performance-gewijs rond de 7 of 20 waarden kan bevatten :? Dat is echt GEEN probleem. Pas als je er duizenden waarden in stopt moet je je zorgen gaan maken.

[ Voor 25% gewijzigd door Soultaker op 25-04-2004 23:30 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Roa schreef op 25 april 2004 @ 23:26:
Vandaar dus ook mijn laatste zin: zijn array's hier ook voor geschikt? Want ik bedenk me dat het misschien wel slim is om over te stappen. (Alhoewel een regel natuurlijk is: als het werkt, blijf er vanaf ;) ) Maar het is wel zo dat er pagina's van meerdere alinea's (zeg 300/500 woorden per textveld, dus vrij veel karakters!)
in die array komen. Kan een array dat aan? Zijn ze daarvoor gemaakt zeg maar, normaal zou ik 7 variabelen hebben, nu 1 array die net zoveel bevat als die 7 variabelen.
of die data nu in een array staat of in losse variabele, volgens mij maakt dat kwa memory usage @ server vrij weinig uit (hoewel ik gok dat een array efficienter is maar dat is slechts een gok ;) ) wat ik wel weet is dat het eenvoudiger te verwerken is in je applicatie. ook als je variabele variabelen gebruikt dat dat trager is dan een array gebruiken (wat gewoon erg verstandig is om te doen, daar zijn array's voor ontworpen min of meer :P )
Maar ja, ik zit iemands topic een beetje te verzieken geloof ik
mja, verzieken, is gewoon een ontopic vraagje ;)
Als je trouwens een hogere versie hebt, dan kan je toch JUIST $_POST gebruiken ipv $_HTTP_POST_VARS??
http://nl3.php.net/manual...p#reserved.variables.post
klopt ja, sinds 4.1.0 met het verschil dat $_POST een auto-global is en $HTTP_POST_VARS niet :)
Pagina: 1