PHP mailform - lege velden niet verzenden

Ik heb een PHP-antwoordformulier gemaakt. Met wat kunst en vliegwerk werkt dat prima, het is gebaseerd op een standaardform. (ik weet amper iets van PHP). Nu wil ik alleen iets meer... Er kunnen deelnemers worden ingevuld op het formulier. Om nou te voorkomen dat iemand die één persoon invult niet een bevestiging krijgt met 7 lege NAW-velden moeten eigenlijk alleen de velden verzonden worden waar iets in is ingevuld.

Wie kan me daar een handje bij helpen?
Een en ander is gebaseerd op http://www.xentrik.net/php/mailform.php

Nog ff geen idcee maar heb je wat aan deze pagina?

www.php.pagina.nl

Je zou dan toch echt iets meer kennis van php moeten krijgen :)

Je kan door middel van een ‘if’ statement controleren of een veld leeg is. Aan de hand van de uitkomst kan je hem wel of niet in de mail laten opnemen.

Zie php.net voor meer info.

de trick is natuurlijk dat je hoopt dat ondanks je beperkte kennis EN je wetenschap van dit feit er gewoon mensen zijn die zeggen no problemeo we helpen je wel ff ..

't is hier net de drie musketiers: een voor allen / allen voor 1!

ALAAF!

En doen we nu toch eigenlijk ook wel een beetje :?

We sturen 'm wel in de goede richting…

ik douw me suf!

:stuck_out_tongue:

Jaja...

Dan ga ik toch maar weer eens ziten lezen in het immer spanende boek van Lerdorf: programming in PHP. En dat terwijl ik net zo lekker in m’n nieuwe boek van Douglas Adams zat en de apocriefe boeken van CSS ook nog geduid moeten worden… Drukke vakantie wordt dat.

Tijdens mijn (recentelijke) opname in het ziekenhuis heb ik via de bieb het boek [url=http://www.vanduurenmedia.nl/titel.asp?ID=30]Leer jezelf PHP[/url] doorgenomen. Hierin maak je op een eenvoudige doch degelijke wijze kennis met PHP inclusief vele voorbeelden die je via een gratis CD op bijgaande website kunt bestellen.

Een goede basis voor nog veel meer mogelijkheden met PHP en aanverwante software zoals MySQL enz.

Begrijp er niet veel van (eufimisme voor, snap er de ballen van :p) Toch even wat uit de doeken doen.

Een form in HTML geef je een naam mee vb:

[code:1:40c210559a]<input type="text" size="50" name="tekstveld">[/code:1:40c210559a]
in PHP wordt dit dan:

[code:1:40c210559a]echo "<input type="text" size="50" name="tekstveld">";[/code:1:40c210559a]
zoals je ondertussen wel weet denk ik :slight_smile:

Nu vóórdat php mail gaat sturen (denk ik dat je bedoel) dit is voor de functie “mail”, kan je dan wat variabelen controleren. De variabelen van de tekstvelden is, de naam die je het gegeven hebt in HTML via het name-attribuut van de input-tag. Omdat het een variabele is, moet je er van php een $ voorzetten.
Zo kunnen we als voorbeeldje controleren of ons veld blanco was of niet. Indien er iets instond, dan doen we iets. Dit wordt dan in PHP:

[code:1:40c210559a]if ( $tekstveld != "" )
mail( … ); //of doe iets anders :slight_smile:
[/code:1:40c210559a]

Een klein voorbeeld is bijvoorbeeld wat ik gebruik om te controleren of iets is ingevuld of niet en dit dan toch mooi in een mail weer te geven.

[code:1:40c210559a]if ( $straat == "" )
$straat = "(niet ingevuld)";
if ( $gemeente == "" )
$gemeente = "(niet ingevuld)";
[/code:1:40c210559a]
Deze variabelen haal ik dus uit de velden (input type=text) uit HTML:

[code:1:40c210559a]echo "Straat: <input type="text" size="50" name="straat"><br>";
echo "Gemeente: <input type="text" size="50" name="gemeente"><br>";
echo "Jouw Bericht: <textarea name="bericht"></textarea>";
[/code:1:40c210559a]
In de mailcode van php voeg ik na die controle met de hier twee tekstvelden die leeg mogen/kunnen zijn, deze drie variabelen mooi samen in een mailbericht en stuur dit naar de webmaster of zo :slight_smile: Het door te sturen bericht, noem ik even $msg (de $ verwijst dus naar het feit dat ik een variabele ga maken) en een . is een samenvoegingsoperator in PHP. De variabele $msg wordt dan zo gemaakt:

[code:1:40c210559a]$msg = "De persoon wonende in de ".$straat." te ".$gemeente." stuurde jou het volgende bericht door:nr".$bericht;[/code:1:40c210559a]
En de $msg geef je dan correct mee in de mailfunctie van php en zo krijg je steeds een mooi mailberichtje aan :slight_smile:
Het tekstding nr zorgt ervoor dat er in de mail een harde return komt te staan, dus wat je in HTML doet met de tag <br>.

Nu, ik versta je situatie nog steeds niet eh, maar hoop dat je hier wat aan hebt. Hier heb je de if-clausules even op de schoot gekregen en de .-operator met wat variabelen. Vraag zeker maar door hoor :wink:

Humpf... Lege velde moeten niet verzonden worden, luidt de titel :-) Stom van me. Wel daarvoor gaan we terug de . gebruiken en de mogelijke velden controleren. Als we er van uitgaan dat je in HTML de juiste velden met de namen veld1, veld2, veld3 en veld4 hebt gemaakt, kunnen we hiermee goochelen. Het simpelste is: [code:1:6f0f144cdb]$msg = $veld1.", ".$veld2.", ".$veld3.", ".$veld4; mail( "jouwadres@mac.com", "onderwerp", $msg );[/code:1:6f0f144cdb]

Nu is dit niet zo’n mooi bericht om het "blabla, , , " kan uitzien :slight_smile: Als dus de laatste drie velden blanco zijn. Mooier en zeer kort is als we de verschillende waarden onder elkaar gaan doorsturen in een bericht. Dat doen we zo

[code:1:6f0f144cdb]$msg = $veld1."rn".$veld2."rn".$veld3."rn".$veld4;[/code:1:6f0f144cdb]

Ik vermoed ook dat er eerst nog wat andere info ook bij moet, gebruik dan een analoge code van dit voorbeeld:

[code:1:6f0f144cdb]
$msg = "Volgende persoon vuld het mailformulier in.rn";
$msg .= $naam."rn".$emailadres."rn".$straat."rn".$gemeente."rn";
$msg .= "rnEn vulde volgende deelnemers in:rn";
$msg .= $veld1."rn".$veld2."rn".$veld3."rn".$veld4;
mail( "jouwadres@mac.com", "onderwerp", $msg );
[/code:1:6f0f144cdb]

Let hier op het gebruik van = en .= Een gelijkheidsteken alleen betekent dat je de variabele exact die waarde gaat geven. Een punt onmiddellijk gevolgd door een gelijkheidsteken wilt zeggen dat je de waarde aan de variabele toevoegt!

Voor alle zekerheid controleer je nog wel even of de mail succesvol verzonden werd :wink:

[code:1:6f0f144cdb]$result = mail( … );
if ( $result )
echo "Mail is succesvol verzonden.";
else
echo "Er trad een fout op met de server! Probeer opnieuw te verzenden a.u.b.";
[/code:1:6f0f144cdb]

Hoop dat dit ongeveer een antwoord is :slight_smile:

Ah, eindelijk wat ik zocht. Jammer alleen dat ik morgen op vakantie ga. Zonder computer welteverstaan... Dus over een week of twee ga ik het in mjn formuliertje inknutselen. Zoals ik het nu lees zijn er een aantal andere zaken gebruikt om de mail te construeren dan in mijn formulier het geval is. Zal dus eens even flink gaan pielen.

Many thanks!

(wel gaan er twee PHP-boekjes mee in de bagage…)

Haha :D

Waar ga je op vakantie? :innocent: Als het ergens warm en nice is, dan wil ik ook wel in uw bagage i.p.v. die twee php boekies :stuck_out_tongue: :stuck_out_tongue:

[url=http://www.franse-alpen.nl/nl/index-nl.htm]hiero[/url] Gelijk een beetje fotograferen voor de reisgids die ik in het najaar weer ga maken. Beetje wandelen, en andere spannende dingen doen ;)

[quote:78564f7248="3sje"]Humpf... Lege velde moeten niet verzonden worden, luidt de titel :-) Stom van me. Wel daarvoor gaan we terug de . gebruiken en de mogelijke velden controleren. Als we er van uitgaan dat je in HTML de juiste velden met de namen veld1, veld2, veld3 en veld4 hebt gemaakt, kunnen we hiermee goochelen. Het simpelste is: [code:1:78564f7248]$msg = $veld1.", ".$veld2.", ".$veld3.", ".$veld4; mail( "jouwadres@mac.com", "onderwerp", $msg );[/code:1:78564f7248]

Nu is dit niet zo’n mooi bericht om het "blabla, , , " kan uitzien :slight_smile: Als dus de laatste drie velden blanco zijn. Mooier en zeer kort is als we de verschillende waarden onder elkaar gaan doorsturen in een bericht. Dat doen we zo

[code:1:78564f7248]$msg = $veld1."rn".$veld2."rn".$veld3."rn".$veld4;[/code:1:78564f7248]

Ik vermoed ook dat er eerst nog wat andere info ook bij moet, gebruik dan een analoge code van dit voorbeeld:

[code:1:78564f7248]
$msg = "Volgende persoon vuld het mailformulier in.rn";
$msg .= $naam."rn".$emailadres."rn".$straat."rn".$gemeente."rn";
$msg .= "rnEn vulde volgende deelnemers in:rn";
$msg .= $veld1."rn".$veld2."rn".$veld3."rn".$veld4;
mail( "jouwadres@mac.com", "onderwerp", $msg );
[/code:1:78564f7248]

Let hier op het gebruik van = en .= Een gelijkheidsteken alleen betekent dat je de variabele exact die waarde gaat geven. Een punt onmiddellijk gevolgd door een gelijkheidsteken wilt zeggen dat je de waarde aan de variabele toevoegt!

Voor alle zekerheid controleer je nog wel even of de mail succesvol verzonden werd :wink:

[code:1:78564f7248]$result = mail( … );
if ( $result )
echo "Mail is succesvol verzonden.";
else
echo "Er trad een fout op met de server! Probeer opnieuw te verzenden a.u.b.";
[/code:1:78564f7248]

Hoop dat dit ongeveer een antwoord is :-)[/quote:78564f7248]

Bedenk wel even het verschil tussen $var en $_POST[‘var’]. Je vergeet superglobals te gebruiken. Sommige (lees: betere) PHP-versies weigeren anders gewoon dienst.

Bedenk liever het verschil tussen $HTTP_POST_VARS['var'] en $_POST['var']. $var zou blijkbaar overl moeten werken en op allerlei PHP-versies heb ik er nog nooit problemen mee gehad. Omdat $HTTP_POST_VARS aan het verdwijnen is onder PHP4 en liefst vervangen moet worden door $_POST, gebruik ik dit zeker niet als voorbeeld, omdat je dan achteraf misschien met twee types dooreen zit te werken, wat zeker niet goed is.

Noteer wel dat $HTTP_POST_VARS nog steeds beschikbaar blijft en werkend is, maar gewoon in onbruik wordt genomen vanaf PHP 4.1 en PHP 5. In code van PHP3 blijft het schering en inslag. Omdat ook nog sommigen met PHP 3 werken, gebruik ik dan ook liever niet $_POST omdat het op die servers helemaal niet zou werken.

Het enig groot probleem zie ik pas in als ze vanaf PHP 4.2.0 register_globals op off zetten, dan moet je wel $_POST (en aanverwante) gebruike om die variabelen te consulteren.

@mensen die er geen bal van verstaan: in de code die ik overal heb gegeven wijzig je (voor PHP 4.1 of later en PHP 5) de variabelen die tekstvelden representeren (of andere elementen van een HTML FORM) door de naam lichtjes te veranderen, vb: $veld1 -> $_POST[‘veld1’]. Werkt je server nog met PHP 3, dan moet je het wijzigen naar $HTTP_POST_VARS[‘veld1’].

Als je wil weten welke PHP-versie draait op de server waar je mee bezig bent (al dan niet of het je eigen Mac is :-)), maak dan volgend documentje aan en open het met een browser.

<?php
echo “PHP-versie is:”.phpversion();
?>

P.S. Kan je dan ook even zeggen waar ik problemen zou krijgen dan? Meestal zorgen webhosts wel net dat je oude code ook wel blijft bollen, het zou anders wel héél erg worden. Mits ik ook nog op geen enkele server hiermee problemen heb gehad, wil ik wel weten of het echt nodig is.