[PHP] foreach leest geen lege waardes uit formulier

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Ik heb een probleem met het uitlezen van een formulier.

De code die ik gebruik is als volgt:
PHP:
1
2
3
foreach ($_POST as $key => $value) {
    echo "<tr><td>".$key."</td><td>: ".$value."</td></tr>\n";
}

Dit werkt goed. Hij leest alle waardes en zet die in de e-mail die ik hiermee genereer.

Wat niet werkt, is dat als een veldje in het formulier leeg gelaten wordt, dat ie dan helemaal niks meeneemt.

Dus als ik hetvolgende invul (in het formulier):
naam: [jan klaasen__]
email: [___________]
adres: [blabla______]

dan krijg ik in mijn mailtje alleen te zien:
naam: jan klaasen
adres: blabla

maar wil ik dus eigenlijk:
naam: jan klaasen
email:
adres: blabla

dus, 'email' erbij (zonder waarde erin). Enig idee?

Ben ik zo duidelijk genoeg? (waarschijnlijk ben ik overduidelijk, maarja)

Alvast bedankt

[ Voor 10% gewijzigd door raps op 12-06-2003 21:39 ]


Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
Doe
PHP:
1
print_r($_POST);


erbij en trek je conclusies.. ik denk dat het je dan duidelijker wordt waarom ie niet doet wat je wil

Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Okey,

Heb ik nu gedaan. Dan krijg ik dus een array, zonder de 'email' waarde erin. Moet ik dit dan aan de kant van het formulier doen?

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik denk, dat als je een POST maakt naar de server, en er een form-veld leeg is, hij dit niet meeneemt in het $_POST-array...

Je zult dit op een andere manier moeten ondervangen, lijkt me zo...

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Grijze Vos:
Ik denk, dat als je een POST maakt naar de server, en er een form-veld leeg is, hij dit niet meeneemt in het $_POST-array...

Je zult dit op een andere manier moeten ondervangen, lijkt me zo...
Dat is volledig nieuw voor mij. Ik heb nog nooit moeite gehad met lege velden...

Ik draai zojuist toch nog even een testje en zie dat ik gewoon lege elements krijg in de $_POST array.


raps > Weet je zeker dat er geen tikfout in je formulier staat o.i.d?

* drm weet trouwens niet zeker of hier niet toevallig een configuratie-directive voor is...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Is browserafhankelijk of een lege var wordt teruggegeven of niet. :)

Uiteraard is het wenselijk om de var terug te krijgen.
ik ben daar ook een keer tegenaangelopen

Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

Iig worden checkboxen die niet ingevuld zijn ook niet gesubmit, maar ik weet wel zeker dat lege text-velden wel gesubmit worden.

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

je kan dit op zich best simpel afvangen door in je formvelden value=" " te zetten. maar da's meer HTML werk.
Je krijgt gewoon geen lege waardes terug van IE :)

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
Papa Eend schreef op 13 June 2003 @ 08:57:
je kan dit op zich best simpel afvangen door in je formvelden value=" " te zetten. maar da's meer HTML werk.
Je krijgt gewoon geen lege waardes terug van IE :)
Kan... MAAR! :P Als je iets in die velden wil tikken en je klikt in het midden om te focus-en, staat ie altijd achter die spatie... dus krijg je alle data met een spatie ervoor terug.. lijkt me ook niks...
Verwijderd schreef op 13 June 2003 @ 05:20:
Uiteraard is het wenselijk om de var terug te krijgen.
Mwoah.. valt mee... uiteindelijk is het alleen een probleem als je for..each op de $_POST of $_GET array loslaat

Als je van tevoren weet welke vars er gepost worden zou ik het anders oplossen dan een for..each..

[ Voor 43% gewijzigd door Sn3akz op 13-06-2003 09:10 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Sn3akz schreef op 13 juni 2003 @ 09:04:
[...]


Kan... MAAR! :P Als je iets in die velden wil tikken en je klikt in het midden om te focus-en, staat ie altijd achter die spatie... dus krijg je alle data met een spatie ervoor terug.. lijkt me ook niks...
handig hoor dat trim() :) Kan sowieso geen kwaad om op alle user-input los te laten.
Verwijderd schreef op 13 June 2003 @ 05:20:
Is browserafhankelijk of een lege var wordt teruggegeven of niet. :)

Uiteraard is het wenselijk om de var terug te krijgen.
ik ben daar ook een keer tegenaangelopen
En weet je dan ook welke browsers dit niet goed doen :? Want dit is voor mij ook nieuw.

[ Voor 32% gewijzigd door Bosmonster op 13-06-2003 09:38 ]


Acties:
  • 0 Henk 'm!

  • Sjeik
  • Registratie: Augustus 2001
  • Laatst online: 29-05 14:39
Kan je niet beter een serie hidden fields (met email enzo) voor jou text inputs zetten? Dan weet je zeker dat er iets in de array staat. Ik denk dat de input fields de waarde van de hidden wel overschrijven. Een oplossing als value=" " werkt niet, want men kan die weghalen.

Was ik maar rijk en niet zo knap...


Acties:
  • 0 Henk 'm!

Verwijderd

Niet ingevulde formuliergegevens worden niet gestuurd door de browser en daardoor dat je ze niet kunnen zien. Als je wilt controleren dat alle formvelden ingevuld zijn, moet je dat handmatig doen en niet door een foreach().

bijv: if (!isset($_POST[email])) echo 'je moet je emailadres invullen, idioot';

Met vriendelijke groet,

Devon H. O'Dell
Professional PHP4 Programming
Professional PHP4 Multimedia Programming
http://www.sitetronics.com

Acties:
  • 0 Henk 'm!

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 16-09 20:20

_Sunnyboy_

Mooooooooooooooooo!

Inderdaad. Bypasses met spaties zijn nooit fullproof, want wat als je gebruiker lekker die spatie gaat lopen weghalen? Gaat je script dan op z'n gat?

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Verwijderd schreef op 13 juni 2003 @ 09:58:
Niet ingevulde formuliergegevens worden niet gestuurd door de browser en daardoor dat je ze niet kunnen zien. Als je wilt controleren dat alle formvelden ingevuld zijn, moet je dat handmatig doen en niet door een foreach().

bijv: if (!isset($_POST[email])) echo 'je moet je emailadres invullen, idioot';

Met vriendelijke groet,

Devon H. O'Dell
Professional PHP4 Programming
Professional PHP4 Multimedia Programming
http://www.sitetronics.com
Lees de draad voor je blaat mister Professional PHP4 Programming spammerd. En bij voor keur ook de FAQ over groeten en spam.

Dat lege velden niet meegestuurd worden is exceptioneel gedrag van een aantal (nog reeds) ongedefineerde browsers.

Ik kan zelf in ieder geval zeggen dat IE5+ en Mozilla lege velden gewoon netjes meestuurt, op niet ingevulde checkboxes na (voor checkboxes is het wel 'normaal').

En een professional PHP4 programmeur moet toch weten dat ie zijn array-indices moet quoten ;)

[ Voor 5% gewijzigd door Bosmonster op 13-06-2003 10:36 ]


Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
Bosmonster schreef op 13 June 2003 @ 10:34:
En een professional PHP4 programmeur moet toch weten dat ie zijn array-indices moet quoten ;)
En dat je templates moet gebruiken.. echo is zooo passé :D (En 'idioot' staat ook professional)
_Sunnyboy_ schreef op 13 June 2003 @ 10:11:
Inderdaad. Bypasses met spaties zijn nooit fullproof, want wat als je gebruiker lekker die spatie gaat lopen weghalen? Gaat je script dan op z'n gat?
Yep :) Teminste... wel als hij ALLEEN die spatie weghaald en verder niks invuld.. (Vertrouw NOOIT een user ;) )

Acties:
  • 0 Henk 'm!

Verwijderd

Bosmonster schreef op 13 June 2003 @ 10:34:
[...]


Lees de draad voor je blaat mister Professional PHP4 Programming spammerd. En bij voor keur ook de FAQ over groeten en spam.

Dat lege velden niet meegestuurd worden is exceptioneel gedrag van een aantal (nog reeds) ongedefineerde browsers.

Ik kan zelf in ieder geval zeggen dat IE5+ en Mozilla lege velden gewoon netjes meestuurt, op niet ingevulde checkboxes na (voor checkboxes is het wel 'normaal').

En een professional PHP4 programmeur moet toch weten dat ie zijn array-indices moet quoten ;)
LoL.. 1-0
Bijkomstigheid, de Poll op zijn website is enkel beveiligd met een cookie. Ik accepteer bijna nooit cookies en kan zo vaak stemmen als ik wil :D Niet erg netjes van een professional PHP4 programmeur...

Overigens had hij op 1 punt gelijk, als wil dat velden ingevuld worden zul je dat handmatig moeten controleren...

Acties:
  • 0 Henk 'm!

Verwijderd

Wat je eventueel zou kunnen doen is een javascript functie aanmaken in je formulier. Hierin kun je alle undefined waarden een waarde meegeven voor je de POST uitvoert.

Maar wat is er precies het nut van om met foreach te werken ? Je weet welke velden je wilt hebben, het heeft eigenlijk alleen nut om met foreach te werken als je niet weet wat voor velden er in het input veld zitten, maar dan zou je ook weer niets met die data kunnen doen ?

Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Hallo heren, doe ff normaal ok?
Op de meeste plekken op het net is zo'n sig (bijv in newsgroups) normaal dus ik snap het best dat hij hem neerzet in z'n eerste post. Om hem dan volledig te gaan afzeiken op één regel code vind ik ver onder de maat :/

Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
edit:

^^ I'm with stupid :)

[ Voor 119% gewijzigd door Sn3akz op 13-06-2003 10:49 ]


Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Wow, flinke response. Helaas heb ik niet eerder kunnen kijken/reageren.
Weet je zeker dat er geen tikfout in je formulier staat o.i.d?
Volgens mij is het formulier in orde.
Maar wat is er precies het nut van om met foreach te werken ? Je weet welke velden je wilt hebben, het heeft eigenlijk alleen nut om met foreach te werken als je niet weet wat voor velden er in het input veld zitten, maar dan zou je ook weer niets met die data kunnen doen ?
Ik snap dat dit in dit voorbeeld niet echt van toepassing is. Maar ik ben nu bezig met een formulier van 20 velden. En hierna komen er nog 6 andere formuliertjes bij. Ik wil het dus zo dynamisch mogelijk. foreach is dan een stuk makkelijker dan 7x een volledige tabel maken.
Niet ingevulde formuliergegevens worden niet gestuurd door de browser en daardoor dat je ze niet kunnen zien. Als je wilt controleren dat alle formvelden ingevuld zijn, moet je dat handmatig doen en niet door een foreach().

bijv: if (!isset($_POST[email])) echo 'je moet je emailadres invullen, idioot';
Dit komt later nog. Uiteindelijk maak ik niet alle velden verplicht, dus is dit geen oplossing.
Wat je eventueel zou kunnen doen is een javascript functie aanmaken in je formulier. Hierin kun je alle undefined waarden een waarde meegeven voor je de POST uitvoert.
Heb je hier een voorbeeldje van? of een link ofzo? Dit lijkt me een realistische en goede oplossing.
Is browserafhankelijk of een lege var wordt teruggegeven of niet.
Hier had ik eigenlijk nog niet aan gedacht. Ik heb gewerkt en getest met de Phoenix browser. En inderdaad, nu ik hetzelfde formulier invul met IE6 stuurt hij wel de lege tekstvelden mee. De checkboxjes en radiobuttons enzo nog niet helaas.

[EDIT] Helaas bestaat er geen 'default' voor een checkbox, toch? Als ik zoiets kan doen, dan ben ik er:
<input type='checkbox' name='test' default='Nee' value='Ja'>
Bestaat er misschien zoiets?[/EDIT]

Hartelijk bedankt voor alle reakties. De situatie is me al een stuk duidelijker, nu de oplossing nog.

[ Voor 9% gewijzigd door raps op 13-06-2003 12:09 ]


Acties:
  • 0 Henk 'm!

Verwijderd

checkboxes worden idd niet meegestuurd wanneer ze niet aangeklikt zijn, wat je wel zou kunnen doen is een hidden field maken met alle namen van de form elementen erin.

Als je zelfs er lui bent kun je door middel van een javascript dit hidden field vullen, en dan de veld namen scheiden door middel van een comma bijvoorbeeld en deze in je PHP script weer exploden. Zo heb je de form elementen, ook de checkboxes en je hebt ze in de juiste volgorde!

Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Geweldig TimD!!!
'Hero of the Day' _/-\o_

Echt relaxed. Ik ga het meteen doen... als het niet lukt, dan laat ik het nog wel weten.

Echt bedankt! :)

Acties:
  • 0 Henk 'm!

  • rik
  • Registratie: April 2000
  • Laatst online: 15-09 10:43

rik

Is het niet simpel om variabelen aan te maken in je php, en die dan te vullen met je array? Heb je in ieder geval altijd je variabelen, of er nu een waarde in zit of niet.

Acties:
  • 0 Henk 'm!

Verwijderd

Ten eerste, sorry voor het spammen ;)

Ten tweede, werkt $_POST[email] wel. Ik heb nooit een parse error gekregen ;). Het werkt ook in principe (nanoseconden) sneller omdat de Zend Engine hoeft niet te switchen naar ST_IN_QUOTES (of hoe het dan ook heet) in de lexer. Probeer het eens.

Het maakt mij ook niet zo veel uit als mensen 1913023 keer op mijn website gaan stemmen, ik heb echo gebruikt als een voorbeeld, etc. etc. etc.

Mijn Nederlands is ook niet perfect, omdat ik Amerikaans ben. Dus sorry voor grammaticale fouten dat misschien hier volgen.

Je kunt ook "zelf controlerende" formulieren maken, als het echt dynamisch moet zijn. Maar dan moet je ergens wél defineren wat voor velden je wilt hebben en hoe ze heten. Je kan echter nooit ingevulde gegevens van een gebruiker vertrouwen, het is altijd netjes om deze gegevens handmatig te controleren (wat ik met mijn poll niet echt netjes gedaan heb ;).

<input type="checkbox" name="some_check_box" CHECKED> werkt in de meeste browsers.
(net zoals <option value="some_value" SELECTED> voor een <select> veld). Máár! Als een checkbox aangeklikt is, sturen sommige browsers verschillinde valuta's terug.

Een zelf controlerende formulier zou je kunnen maken met een class. Je moet dan specificeren wat voor formulier gegevens je wilt hebben, hoe ze genoemd moeten worden, als het een verplichte veld is, enzovoort. Als je een voorbeeld hiervoor moet hebben, kan ik misschien iets voor je even snel hacken.

Devon

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Verwijderd schreef op 14 juni 2003 @ 10:24:
Ten eerste, sorry voor het spammen ;)

Ten tweede, werkt $_POST[email] wel. Ik heb nooit een parse error gekregen ;). Het werkt ook in principe (nanoseconden) sneller omdat de Zend Engine hoeft niet te switchen naar ST_IN_QUOTES (of hoe het dan ook heet) in de lexer. Probeer het eens.
Hier krijg ik dus wel parse-errors op omdat ik ERROR_REPORTING op E_ALL heb, zoals het hoort ;)

Bovendien kan ik me niet voorstellen dat het sneller is, aangezien PHP dus niet weet of ik een CONSTANT gebruik of een STRING. Hij zal dus eerst moeten kijken of er een CONSTANT bestaat met de naam 'email', zo niet dan gebruikt ie het maar als string :) Een overbodige handeling dus ;)

<input type="checkbox" name="some_check_box" CHECKED> werkt in de meeste browsers.
(net zoals <option value="some_value" SELECTED> voor een <select> veld). Máár! Als een checkbox aangeklikt is, sturen sommige browsers verschillinde valuta's terug.


Daar heb je dus het value veld voor in de checkbox :) Is die aangevinkt krijg je de value terug, is die niet aangevinkt dan krijg je helemaal niks. Dat werkt in alle browsers hetzelfde voor zover ik weet.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 14 June 2003 @ 10:24:
Ten tweede, werkt $_POST[email] wel. Ik heb nooit een parse error gekregen ;). Het werkt ook in principe (nanoseconden) sneller omdat de Zend Engine hoeft niet te switchen naar ST_IN_QUOTES (of hoe het dan ook heet) in de lexer. Probeer het eens.
tuurlijk werkt het wel, maar zet error_reporting eens op E_ALL ;)
en je ziet allemaal notices, en dat lijkt mij juist vertragen :)

Acties:
  • 0 Henk 'm!

Verwijderd

Hm. Ik zie nu dat sommige mensen als 2-jarige meisjes moeten gedragen. Als je een probleem met mijn website hebt, zeg het dan, maar ga het niet dan defacen. Gefeliciteerd, dat doen we niet, je bent de eerste die geband is van mijn site. Niet dat het je uitmaakt.

Maar goed.bovenstaande heeft ook niet echt met P&W te maken, gelieve het dan verder ook ontopic te houden

Je hebt gelijk over $_POST[email]. Normaal gesproken gebruik ik ook $_POST['email'], ik had het zo geschreven omdat het gewoon sneller was en alleen maar een voorbeeld. Jullie blijken erg hooggevoelig te zijn :P.

je hoeft ook je naam niet onder je post te zetten, dat leest een beetje irri

[ Voor 25% gewijzigd door whoami op 15-06-2003 10:45 ]


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 15 June 2003 @ 10:28:
Hm. Ik zie nu dat sommige mensen als 2-jarige meisjes moeten gedragen. Als je een probleem met mijn website hebt, zeg het dan, maar ga het niet dan defacen. Gefeliciteerd, ***.***.***.***, je bent de eerste die geband is van mijn site. Niet dat het je uitmaakt.
Het wordt niet echt gewaardeerd dat er IP's worden gepost hier :) Waarschijnlijk ondervindt de persoon nu een aantal traceroutes, DOS attacks en port scans :P
Overigens heb ook ik een aantal keer de poll geprobeerd; valt dat onder jouw definitie van defacen :?

offtopic:
Ik durf het bijna niet te zeggen; maar wil je toch even wijzen op het feit dat het neerzetten van je naam onder iedere post ook niet 'gewoon' is :> "Wij tweakers groeten elkaar continu"


edit:
bedankt whoami voor het totaal overbodig maken van mijn post ;)

[ Voor 25% gewijzigd door Spider.007 op 15-06-2003 10:45 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Heh, het wordt ook niet echt gewaardeerd dat (omdat ik op mijn eerste post een standaard signature liet) iemand gebruikt mijn poll als een speeltuin. Ja, dat betekent wel dat ik mijn poll beter had kunnen maken. Dat ben ik nu aan het doen.

IIG, ik ga hier niet meer posten. Misschien heb ik de regels wat beter kunnen lezen, maar ik heb ook niet dit soort flames aangevraagd. En sorry voor mijn slechte Nederlands.

Ajo.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Verwijderd schreef op 13 June 2003 @ 05:20:
Is browserafhankelijk of een lege var wordt teruggegeven of niet. :)

Uiteraard is het wenselijk om de var terug te krijgen.
ik ben daar ook een keer tegenaangelopen
Om weer even terug ontopic te komen... want ik ben nog steeds erg geinteresseerd in welke browsers dit dan precies niet goed doen.. Voor zover ik weet doen IE en Mozilla die namelijk allemaal hetzelfde, die sturen gewoon lege velden :?

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 15 June 2003 @ 10:51:
Heh, het wordt ook niet echt gewaardeerd dat (omdat ik op mijn eerste post een standaard signature liet) iemand gebruikt mijn poll als een speeltuin. Ja, dat betekent wel dat ik mijn poll beter had kunnen maken. Dat ben ik nu aan het doen.

IIG, ik ga hier niet meer posten. Misschien heb ik de regels wat beter kunnen lezen, maar ik heb ook niet dit soort flames aangevraagd. En sorry voor mijn slechte Nederlands.

Ajo.
Volgens mij is er niemand die flamed hier? Er is verder niemand die je aanvalt op je slechte Nederlands (ik heb nog geen slecht Nederlands gezien maargoed?) Je tikt beter Nederlands dan sommige Nederlanders hierzo :>

Verder is het inderdaad een beetje knullig dat er zoveel mensen reageren op je sig; maar het probleem is dat er wel erg vaak mensen voorbij komen die dat doen (terwijl het inderdaad duidelijk is dat het niet gewenst is)

Dat iemand je Poll als speeltuin gebruikt is toch niet erg? Tenslotte is jouw site voor jou ook een speeltuin om dingen uit te proberen? Daar leer je alleen maar van :)
Bosmonster schreef op 15 June 2003 @ 10:56:
[...]


Om weer even terug ontopic te komen... want ik ben nog steeds erg geinteresseerd in welke browsers dit dan precies niet goed doen.. Voor zover ik weet doen IE en Mozilla die namelijk allemaal hetzelfde, die sturen gewoon lege velden :?
Ik heb in IE ook problemen gehad met lege velden die niet verstuurd werden; ik weet niet in hoeverre dit versie specifiek is.... Op Google kan ik ook niet veel vinden.

[ Voor 22% gewijzigd door Spider.007 op 15-06-2003 10:59 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Ik werd op mijn website geflamed als "spammerd" en "wanker". En ik weet dat ik tenminste 1 grammaticale fout per post heb gemaakt (niemand hoeft het te zeggen ;)).

Door mijn website verkoop ik programmeren en hosting diensten. Ik zou het niet erg vinden als het enn privé site was, maar het is mijn zakelijk webpagina. Als iemand mij een spammer en wanker wilt noemen, kunnen ze beter gebruik van mijn contactformulier maken. Ik vind het dus erg. Je verwacht het gewoon niet.

Volgens mij is het ook hetzelfde voor lynx en links (en ook voor Opera/Mac IE/Mac NS/Mac Mozilla/Safari). Volgens mij is de reden ook omdat zo veel mensen in Amerika nog dial-up gebruiken, en de browser wilt zo veel bandwidth mogelijk sparen om ... ehhh... laad tijden (?) te verminderen.

Het beste oplossing (volgens mij) blijft zelf-controlerende formulieren.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Verwijderd schreef op 15 June 2003 @ 11:11:
[...]
Volgens mij is het ook hetzelfde voor lynx en links (en ook voor Opera/Mac IE/Mac NS/Mac Mozilla/Safari). Volgens mij is de reden ook omdat zo veel mensen in Amerika nog dial-up gebruiken, en de browser wilt zo veel bandwidth mogelijk sparen om ... ehhh... laad tijden (?) te verminderen.

Het beste oplossing (volgens mij) blijft zelf-controlerende formulieren.
Kheb er zelf in feit ook geen last van. De formulieren die we tegenwoordig maken worden door het CMS gegenereerd en gevalideerd aan de hand van het databasemodel. Ontbrekende velden worden dus gezien als niet ingevuld. MAar toch als er specifieke browsers zijn die posts op een manier gaan behandelen waar ik persoonlijk nooit rekening mee heb gehouden (bovenstaande is toeval :)), dan wil ik dat wel weten. Zal na het weekend eens wat meer testen met Mac-browsers... voor zover ik die mogelijkheden heb :P

[ Voor 51% gewijzigd door Bosmonster op 15-06-2003 11:19 ]


Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Bosmonster schreef op 15 juni 2003 @ 10:56:
[...]


Om weer even terug ontopic te komen... want ik ben nog steeds erg geinteresseerd in welke browsers dit dan precies niet goed doen.. Voor zover ik weet doen IE en Mozilla die namelijk allemaal hetzelfde, die sturen gewoon lege velden :?
Bij mij was het niet meesturen van veldjes met de Phoenix browser. Gelukkig wordt deze niet zoveel gebruikt. Ik hoorde wel dat de Phoenix engine mede gebruikt wordt voor de ontwikkeling van de nieuwe Mozilla. - Dit weet ik dus niet zeker.

Verder stuurt de browser dus geen checkboxjes en radio-buttons die leeggelaten worden mee, maar dat was dus al bekend.

Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Niet ontopic, maar een probleem dat voortvloeid uit de vorige vraag...
Hoe komt het dat het me niet lukt om de veldjes verplicht te maken? Hier is de code:
PHP:
1
2
3
4
5
6
if (!isset($_POST[email])) {
    echo "U heeft niet alle verplichte velden ingevuld.";
} else {
    mail($to, $subject, $msg, $mailheaders);
    echo $_POST[Naam].", hartelijk dank voor het invullen van het formulier.";
}

Of ik het email veldje nu invul of niet... Iedere keer verstuurd ie de e-mail, en belandt hij dus in het tweede deel van de if-functie. :?

[ Voor 3% gewijzigd door raps op 15-06-2003 18:09 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je vergeet de '. $_POST[email] != $_POST['email']

Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
PHP:
1
2
3
4
5
6
if (!isset($_POST['email'])) {
    echo "U heeft niet alle verplichte velden ingevuld.";
} else {
    mail($to, $subject, $msg, $mailheaders);
    echo $_POST[Naam].", hartelijk dank voor het invullen van het formulier.";
}

geeft hetzelfde resultaat.

Of bedoel je dat niet?

Acties:
  • 0 Henk 'm!

Verwijderd

Daar doelde ik op, ja. Maar je bent ook nog $_POST['Naam'] vergeten. Let er ook op dat de postvariabelen hoofdlettergevoelig zijn, $_POST['Email'] is dus wat anders dan $_POST['email'].

Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Dit heb ik nu ook aangepast. Het werkt nog steeds niet :(
De hoofdlettergevoeligheid weet ik, die is gewoon goed.

Acties:
  • 0 Henk 'm!

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 16-09 20:20

_Sunnyboy_

Mooooooooooooooooo!

volgens mij komt dat omdat hij als hij beschikbaar is, dus wel ingesteld is, en isset dus true geeft ook al is ie leeg. Misschien moet je empty() gebruiken, of gewoon if($_POST['email']!="")

Eigenlijk moet je bij een e-mail natuurlijk met een regex checken of het wel een e-mail adres is dat is ingevuld, maar het principe blijft hetzelfde

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Ik weet niet of dit werkt hoor, want ben echt php noob, maar probeer toch zoveel mogelijk te helpen, mischien is het volgende zelf goed.
PHP:
1
2
3
4
5
6
7
8
9
<?
if ($_POST['email'] = "") {
  $_POST['email'] = " ";  //tussen die quotes staat dus een spatie, zodat het lege veld 
                     //word gevuld met een spatie. Weet niet of het werkt.
} else {
  mail($to, $subject, $msg, $mailheaders);
  echo $_POST['Naam'].", hartelijk dank voor hey invullen van het formulier.";
}
?>


Just my 2 cents. :)

[ Voor 27% gewijzigd door eghie op 15-06-2003 20:23 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Gebruik hier trim() voor, dan haal je direct ook de spaties eruit, wanneer een veld alleen uit spaties bestaat (vinden sommige bezoekers 'leuk' om te doen)

PHP:
1
2
3
4
5
6
7
8
9
if(trim($_POST['email']) == '')
{
    echo "U heeft niet alle verplichte velden ingevuld.";
}
else
{
    mail($to, $subject, $msg, $mailheaders);
    echo $_POST['naam'].", hartelijk dank voor het invullen van het formulier.";
}


IsSet geeft namelijk aan of een variabele 'bestaat', ofwel gedeclareerd/gedefinieerd is (of hoe je het wilt noemen) ook al heeft 'ie geen waarde, IsSet zal TRUE terug geven.

[ Voor 42% gewijzigd door Verwijderd op 15-06-2003 20:29 . Reden: Typo's ]


Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Ik snap niet waarom je een spatie mee wil geven... Ik denk niet dat je het probleem precies begrijpt.

[EDIT]
Bovenstaande reaktie was op de post van: eghie

Markuz, hartelijk dank!, dit werkt wel goed.
Perfect!

[ Voor 37% gewijzigd door raps op 15-06-2003 20:31 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je moet het niet zien als iets wat broodnodig is, maar een toegevoegde 'waarde'/feature is.

Sommige bezoekers vinden het soms leuk om met een spatie een reeks velden in te vullen en dan te submitten, vraag me niet waarom, maar soms gebeurt zoiets. Of het kan gewoon onbedoeld gebeuren.

Anyway, het zorgt ervoor dat je _zeker_ weet dat het veld leeg is en dus een melding moet worden gegeven. Net iets 'geavanceerder' dan $_POST['waarde'] == '' of de vrijwel indentieke empty($_POST['waarde']) dus...


Reactie bleek overbodig :)

[ Voor 21% gewijzigd door Verwijderd op 15-06-2003 20:33 ]


Acties:
  • 0 Henk 'm!

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 16-09 10:29

Apache

amateur software devver

Verwijderd schreef op 15 June 2003 @ 20:26:
[...]


Gebruik hier trim() voor, dan haal je direct ook de spaties eruit, wanneer een veld alleen uit spaties bestaat (vinden sommige bezoekers 'leuk' om te doen)

PHP:
1
2
3
4
5
6
7
8
9
if(trim($_POST['email']) == '')
{
    echo "U heeft niet alle verplichte velden ingevuld.";
}
else
{
    mail($to, $subject, $msg, $mailheaders);
    echo $_POST['naam'].", hartelijk dank voor het invullen van het formulier.";
}


IsSet geeft namelijk aan of een variabele 'bestaat', ofwel gedeclareerd/gedefinieerd is (of hoe je het wilt noemen) ook al heeft 'ie geen waarde, IsSet zal TRUE terug geven.
Maar stel je werkt met error_reporting op E_ALL dan zal dit een warning geven als email geen post var was in de trend van: undefined index 'email'.

Om dat op te vangen doe je:

PHP:
1
2
3
4
5
6
7
8
9
if(!isset($_POST['email']) || trim($_POST['email']) == '')
{
    echo "U heeft niet alle verplichte velden ingevuld.";
}
else
{
    mail($to, $subject, $msg, $mailheaders);
    echo $_POST['naam'].", hartelijk dank voor het invullen van het formulier.";
}

If it ain't broken it doesn't have enough features


Acties:
  • 0 Henk 'm!

Verwijderd

Je zou misschien moeten overwegen behalve op "" te controleren, toch ook die isset() erbij te zetten (dus allebei). Ik geloof dat als je alle foutmeldingen aan zet, PHP klaagt als die variable niet gedefineerd is terwijl je hem wel gaat vergelijken.

Voor het geval je nog zo'n browser tegenkomt die het veldje als het leeg is niet meestuurt :P

Ik doe het ook altijd zo (ongeveer):
code:
1
2
3
4
if (!isset($variable) || $variable=="")
{
  exit("Missing field");
}

Acties:
  • 0 Henk 'm!

Verwijderd

Sn3akz schreef op 13 June 2003 @ 09:04:
Mwoah.. valt mee... uiteindelijk is het alleen een probleem als je for..each op de $_POST of $_GET array loslaat
Ja tuurlijk is het relatief eenvoudig op te lossen. Ik merkte alleen op dat de aanvoer verkeerd gedaan wordt door sommige browsers. Natuurlijk is het wenselijk dat die goed gedaan wordt. Om dan op te merken dat het niet zo'n probleem is, lijkt me een kwestie van de opmerking niet helemaal begrijpen ;)
Bosmonster schreef op 13 June 2003 @ 09:37:
En weet je dan ook welke browsers dit niet goed doen :? Want dit is voor mij ook nieuw.
Hmzz, kan het je zo snel niet direct opnoemen. Ik weet wel dat zowel phoenix als konqueror beiden wat eigenaardigheden hebben met het submitten van FORM-vars. Beiden zijn *nix browsers overigens. Daarnaast kwam ik ook nog bij IE wel iets vreemds tegen bij het versturen van variabelen via een form. Als ik binnenkort tijd heb zal ik wel eens kijken of ik het zo 1,2,3 nog tevoorschijn kan halen.
Verwijderd schreef op 15 June 2003 @ 21:08:
Je zou misschien moeten overwegen behalve op "" te controleren, toch ook die isset() erbij te zetten (dus allebei). Ik geloof dat als je alle foutmeldingen aan zet, PHP klaagt als die variable niet gedefineerd is terwijl je hem wel gaat vergelijken.

Voor het geval je nog zo'n browser tegenkomt die het veldje als het leeg is niet meestuurt :P

Ik doe het ook altijd zo (ongeveer):
code:
1
2
3
4
if (!isset($variable) || $variable=="")
{
  exit("Missing field");
}
Yupz, een dergelijke oplossing heb ik destijds ook gebruikt. Gaat goed met alle browsers :)

Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
Verwijderd schreef op 16 juni 2003 @ 00:52:
Ja tuurlijk is het relatief eenvoudig op te lossen. Ik merkte alleen op dat de aanvoer verkeerd gedaan wordt door sommige browsers. Natuurlijk is het wenselijk dat die goed gedaan wordt. Om dan op te merken dat het niet zo'n probleem is, lijkt me een kwestie van de opmerking niet helemaal begrijpen ;)
Klopt :P Ik begreep je niet goed :) Ik meende dat het wenselijk was voor het programmeren zelf.. Uiteraard is het wenselijk dat browsers de goede vars teruggeven :D

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Mja, het is alles bij mekaar ook niet erg raadzaam de controle die je doet af te laten hangen van variabelen die je ook van buitenaf krijgt. Als je dergelijke constructies teveel bij jezelf toelaat ga je op den duur behoorlijk lekke code schrijven, ben ik bang :)

De beste manier is om in je script vast te leggen (hetzij door een array, hetzij door een database, hetzij op een andere manier) welke velden er allemaal in het formulier staan en welke controle je daarop uit wilt voeren, om vervolgens aan de hand van die gegevens de post te controleren.

Op die manier vang je ook mogelijk malafide posts af.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Ik zal voor de volledigheid mijn code nog even posten...:
In 'het echt' is ie uitgebreider, maar hier draait het dus om in dit topic.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$items = array("Naam", "Adres", "email");
$count = count($items); 
for ($i=0; $i<$count; $i++) {
    $item = $items[$i];
    $msg .= "<tr><td>".$item."</td><td>: ".$_POST['$item']."</td></tr>\n";
}
    if (trim($_POST['Naam']) == '' || trim($_POST['email']) == '' || !isset($_POST['Naam']) || !isset($_POST['email'])) {
        echo "U heeft niet alle verplichte velden ingevuld. <b><a href='javascript:history.back()'>Ga terug</a></b>";
    } else {
        mail($to, $subject, $msg, $mailheaders);
        echo $_POST['Naam'].", hartelijk dank voor het invullen van het formulier. ";
        echo "Wij zullen zo spoedig mogelijk contact met u opnemen.<br>";
    }

p.s. Uiteindelijk dus geen foreach() gebruikt :)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

heb zo'n vermoeden dat op regel 5
PHP:
5
$_POST['$item']
niet helemaal gaat werken ;)

en op regel 7 kun je beter de isset () eerst doen. Nu is hij namelijk overbodig gezien een unset variabele in een string-comparison ook altijd naar "" evalueert.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

raps schreef op 16 June 2003 @ 11:45:
p.s. Uiteindelijk dus geen foreach() gebruikt :)
PHP:
1
2
3
4
5
6
7
8
$items = array("Naam", "Adres", "email");
foreach($items as $item) {
    $msg .= "<tr><td>".$item."</td><td>: ".$_POST[$item]."</td></tr>\n";
}
    if (!isset($_POST['Naam']) || !isset($_POST['email']) ||
     trim($_POST['Naam']) == '' || trim($_POST['email']) == '') {
        
}

Met een foreach kan het nog iets makkelijker :+

Btw, ik zou die isset's vooraan plaatsen in je if, anders hebben ze geen zin om toe te voegen...

Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
drm schreef op 16 June 2003 @ 11:55:
heb zo'n vermoeden dat op regel 5
PHP:
5
$_POST['$item']
niet helemaal gaat werken ;)
Werkt gewoon goed hoor..

iig bedankt voor de tips. Ook al werkt het nu, zoals ik zie kan het altijd beter.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

raps schreef op 16 juni 2003 @ 12:25:
Werkt gewoon goed hoor..
Euh... je probeert het item $item te benaderen, niet die van de waarde van $item... Het zal vast werken, maar niet doen wat je wilt lijkt me ;)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

ACM:
Euh... je probeert het item $item te benaderen, niet die van de waarde van $item... Het zal vast werken, maar niet doen wat je wilt lijkt me ;)
Even ter illustratie:
PHP:
1
2
3
4
5
6
$array = array ();
$item = "woei";
$array [ $item ] = "woei he?";
$array [ '$item' ] = "hmzzz";

print_r ( $array );
voer uit en huiver :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1