Form met 2 verschillende verzendknoppen

Status
Niet open voor verdere reacties.

JasperJ

Gebruiker
Lid geworden
19 jan 2007
Berichten
55
Op een nieuwe website maak ik gebruik van een formuliertje. Dit is een <form> wat verwijst naar een php-bestand. Deze doet een check op verplichte velden en verstuurt vervolgens de inhoud per email naar de sitebeheerder.

Wat ik nu wil, is 2 verschillende send-knoppen, waarbij ik in het ontvangen mailtje kan zien op welke knop er is gedrukt. Zie website www.2uit1.nl.

Dus een mailtje met de inhoud van het formulier en de gebruikte knop (call me back of afspraak maken).

Via google vind ik een heleboel, maar geen werkbare of begrijpelijke oplossing. Heeft iemand een tip? Alvast bedankt!
 
Er zijn verschillende mogelijkheden, maar wat je bijvoorbeeld kan is via javascript een hidden field met data te vullen als je op de 1e knop drukt, en met wat anders als je op de 2e drukt. Zoiets:

HTML:
<form bla='bla'>

   <input type='bla' bla='bla' />
   <!-- meer van je form -->

   <input id='welkeKnop' type='hidden' value='' />

   <input type='submit' onclick='doeBellen();' />
   <input type='submit' onclick='doeAfspraak();' />
</form>
PHP:
//js

function doeBellen()
{
   document.getElementById('welkeKnop').value = "bellen";
}

function doeAfspraak()
{
   document.getElementById('welkeKnop').value = "afspraak";
}

ik weet niet zeker of dit gaat werken, maar ik denk t wel. Ohja, als ie niet submit, moet je even een 'jeform.submit();' callen na de functies.
 
Beste Vegras,

Bedankt voor je snelle reactie. Ik ga het snel proberen. Zoals je wellicht op de site hebt gezien zijn de buttons plaatjes, dus zijn ze van het type image ipv submit.

Laat je snel weten of het gelukt is.
 
Helaas... het werkt nog niet.

Met één knop werkte het wel en kreeg je na het verzenden een bedankt-pagina. Nu blijft de browser hangen op een blanco pagina met als url het php-document. Kan niet kloppen...
En het mailtje komt ook niet binnen...

De code in mijn pagina's:

HTML-pagina:
HTML:
<table id="frontform" width="100%"><form action="formulier/callmeback_form.php" method="post" name="contact">

...invulvelden...

<input class="btn_call" name="contactform" value="Callmeback" tabindex="7" type="image" src="images/telefoon.gif" longdesc="Call me back 2uit1">&nbsp;<input class="btn_afspraak" name="contactform" value="Afspraakmaken" tabindex="8" type="image" src="images/afspraak.gif" width="60" height="55" longdesc="Afspraak met 2uit1">

PHP-document:
PHP:
// get posted data into local variables

//javascript
function callmeback()
{
  document.getElementById('welkeKnop').value = "callmeback";
}

function afspraak()
{
  document.getElementById('welkeKnop').value = "afspraak";
}

callmeback_form.submit();

<?php

$EmailFrom = $Email;
$EmailTo = "info@jasperj.nl";
$Subject = "Formulier 2uit1-site: call me back";

$Vnaam = Trim(stripslashes($_POST['Vnaam']));
$Anaam = Trim(stripslashes($_POST['Anaam'])); 
$Wplaats = Trim(stripslashes($_POST['Wplaats'])); 
$sex = Trim(stripslashes($_POST['sex']));
$Email = Trim(stripslashes($_POST['Email']));
$Telnr = Trim(stripslashes($_POST['Telnr']));
$VraagOpm = Trim(stripslashes($_POST['VraagOpm']));

// validation
$validationOK=true;
if (Trim($Vnaam)=="") $validationOK=false;
if (Trim($Anaam)=="") $validationOK=false;
if (Trim($Email)=="") $validationOK=false;
if (Trim($Telnr)=="") $validationOK=false;
if (!$validationOK) {
  print "<meta http-equiv=\"refresh\" content=\"0;URL=nietcompleet.htm\">";
  exit;
}

// prepare email body text
$Body .= "";
$Body .= "Een belangstellende heeft het formulier op je website ingevuld.";
$Body .= "\n";
$Body .= "Hieronder de ingevulde gegevens.";
$Body .= "\n";

// send email 
$success = mail("info@jasperj.nl", $Subject, $Body, "From: $EmailFrom");

// redirect to success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=verzonden.htm\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=fout.htm\">";
}
?>

Andere suggesties?
Wederom alvast bedankt!
 
waarom JavaScript gebruiken?

een button in een form kun je een naam geven, geef ze allebei een andere naam en laat bij het verzenden controleren welke "bestaat" (welk geklikt is)

HTML:
<form method="post" action="action.php">
<input type="submit" value="terugbellen" name="terugbellen" />
<input type="submit" value="afspraak" name="afspraak" />
</form>

Je hebt nou twee buttons in een form, de ene heet terugbellen en de ander heet afspraak.
Dan nu action.php, dit kan ook dezelfde pagina zijn etc maar even voor het gemak.

PHP:
if(isset($_POST['terugbellen'])){
// Er is op de knop terugbellen gedrukt
}
else if(isset($_POST['afspraak'])){
// Er is op de knop afspraak gedrukt
}
else{
// Er is nergens op gedrukt, er is op een "illegale" manier de pagina geprobeerd te bereiken.
}
 
Hallo Falcojugger,

Ik probeer het te snappen, maar ben hier niet zo in thuis.

Je bedoelt dat ik vanuit de html-pagina een nieuwe form aanroep. In dat nieuwe php-bestand staat welk php-formulier er gebruikt moet worden n.a.v. op welke knop er gedrukt is?
 
Oke je hebt een HTML form, dit is het formulier wat de gebruiker ziet op de webpagina en moet gaan beslissen of een afspraak wilt maken of terug wilt bellen.
In die HTML form heb je sowieso 2 knoppen zitten: afspraak maken en terugbellen.
Nou is het zo dat je deze een naam kunt geven zodat ze later terug te traceren zijn, dit doe je door name="hier de naam" te typen.

Voorbeeld:
HTML:
<input type="submit" value="Maak een afspraak!" name="afspraak" />

Nou moet zo'n formulier dus iets doen als je op die knop drukt. dit doe je door in de form tag, al aan te geven waar de informatie heen moet. Je komt het allemaal op dezelfde pagina houden bijvoorbeeld met de code PHP_SELF. Maar je kunt ook naar een andere pagina linken. Ik gebruik even een pagina genaamd action.php

Voorbeeld:
HTML:
<form method="post" action="action.php">
<input type="submit" value="Maak een afspraak!" name="afspraak" />
</form>

Wat er gebeurd: zodra er op de knop: "Maak een afspraak!" wordt gedrukt, wordt de informatie doorgestuurd naar de pagina: action.php

Vervolgens ga je dus in action.php iets met de ingevoerde gegevens doen.
Je wilt een mail sturen naar jezelf, met informatie die de gebruiker heeft ingevoerd.

Ik ga even niet verder in op de mailfunctie.

Wat je eerst gaat doen is kijken welke knop de gebruiker nou heeft ingevoerd, wilt deze een afspraak of wilt deze dat je terugbelt. Dit doe je door te kijken of er informatie is doorgestuurd met een bepaalde naam. Als de gebruiker op de knop afspraak heeft gedrukt wordt dat stukje informatie meegezonden. Je krijgt dan in de action.php:

PHP:
if(isset($_POST['afspraak'])){
$onderwerpemail = "Verzoek afspraak";
}

Omdat er eerder al aangegeven was dat de methode POST was, moet je hier de variabelen van POST gebruiken. Je kunt ook GET gebruiken, maar dit is minder veilig. Met dingen als afspraak maken of terugbellen maakt dat echter niet veel uit.

Wat gebeurde er nu in dat stukje code?
Als er informatie mee is gezonden, dat er op de knop "Maak een afspraak!" is gedrukt, bestaat de variabele $_POST['afspraak']. Als deze dus bestaat, maak je het een variabele met als onderwerp voor je email met de waarde "Verzoek afspraak".

Je kunt dan dus ook zeggen:
PHP:
if(isset($_POST['terugbellen'])){
$onderwerpemail = "Terugbellen";
}

Tenslotte gebruik je dan de mailfunctie waar je de variabele $onderwerpemail instopt. Heeft de gebruiker op afspraak maken gedrukt, dan wordt de variabele "Verzoek afspraak", heeft de gebruiker op terugbellen gedrukt, dan wordt de variabele "Terugbellen".

Beetje duidelijker zo?
 
Dank voor je snelle en uitgebreide reactie!
Toch gaat er nog iets elementairs mins, volgens mij.

In mijn html-doc staat:
HTML:
<form action="formulier/formulier.php" method="post" name="contact">
en
HTML:
<input class="btn_call" name="callmeback" value="callmeback" tabindex="7" type="image">&nbsp;<input class="btn_afspraak" name="afspraak" value="afspraak" tabindex="8" type="image">

Vervolgens heb ik een php-bestand met daarin o.a.:
PHP:
// get posted data into local variables

<?php

if (isset($_POST['afspraak'])){
$Subject = "Formulier 2uit1-site: Verzoek afspraak";
}

if (isset($_POST['callmeback'])){
$Subject = "Formulier 2uit1-site: Verzoek afspraak;
}

$EmailFrom = $Email;
$EmailTo =

Daarna komt er nog wat validatie en het opbouwen van de emailbody.
Dit formulier heb ik met 1 knop al een paar jaar werkend.

Heb je nog een tip?
 
Sorry, ik zal proberen duidelijker te zijn.

De code in mijn vorige bericht heb ik nu toegepast op de site, maar het werkt niet. Na het klikken op een knop komt er een blanco pagina met als url het php-bestand.

Het is me dus nog niet gelukt om het aan de praat te krijgen. Zie jij in mijn code nog gekke dingen?
 
oh ja, sorry de pagina code was "natuurlijk" nog niet af.

hij stuurt dus de actiepagina bepaalde gegevens. dan "bezoekt" de gebruiker dus die actiepagina alleen kan hij niks zien. (phpcode is niet te zien als gebruiker zijnde)

je kunt dan verschillende dingen doen. je kunt op die pagina een berichtje maken, dit doe je gewoon met standaard HTML. Dit doe je NA de phptags, immers die phpcode moet voor enige output komen en html is output.

je kunt hem ook laten redirecten. dit kun je doen op 2 verschillende manieren:

1. GETIMED. Je kunt hierbij ook HTML gebruiken voor de bepaalde pagina. Vervolgens voeg je de phpcode toe (let wel, voor alle output)
PHP:
header('refresh:3 url=www.site.nl');

Wat gebeurt er nu? de code geeft je 3 seconden de tijd om op die pagina te blijven, daarna wordt je naar de pagina gestuurd die achter url= staat, dit kan zowel een absoluut path zijn (www.site.nl/iets/nogiets/pagin.html) of relatief path (../) hierbij gaat hij op zoek naar een index.html of index.php in de bovenliggende map. dit is gewoon een voorbeeld

2. DIRECT. Hierbij kun je HTML tags gebruiken, maar het is volkomen nutteloos. De gebruiker krijgt deze pagina namelijk nooit te zijn. Het gaat zo snel dat je niet eens weet dat je op de pagina bent geweest. (behalve als je naar de broncode van het formulier gaat kijken)
PHP:
header('Location: www.site.nl');

Succes
 
Om ook helemaal volledig te zijn... ;)

Vanuit het php-document worden 3 mogelijke pagina's aangeroepen:
- validatiefout (een veld niet ingevuld)
- succespagina (bedankt, bla, bla)
- foutpagina (verzenden is niet gelukt

Namelijk:
PHP:
if (Trim($Telnr)=="") $validationOK=false;
if (!$validationOK) {
  print "<meta http-equiv=\"refresh\" content=\"0;URL=nietcompleet.htm\">";
  exit;
}
en
PHP:
// send email 
$success = mail("info@jasperj.nl", $Subject, $Body, "From: $EmailFrom");

// redirect to success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=verzonden.htm\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=fout.htm\">";
}

Ik dacht dat ie hiermee redirecte. Sterker nog: met 1 knop deed ie dat ook goed.
Nu weet ik dus niet goed of en waar ik jouw code met de header moet plaatsen....

Bedankt voor je hulp en geduld :)
 
ieder zo zijn manier toch, de header komt aan het begin tussen de phptags, wel moet je dan die getimede versie (laat ik het zo even noemen) nemen. terwijl hij dan gaat timen, print hij ondertussen de pagina uit die jij wilt.

je kunt ze bijvoorbeeld naar de index laten redirecten na 10 seconden. in die 10 seconden krijgen ze te zijn of het gelukt is of niet.

je kunt ook redirecten op basis van uitkomst. als het succesvol is, na 10 seconden naar de index pagina, mocht het niet succesvol zijn, dan terugkeren naar het formulier.

ps. ik merk nou dat ik zelf een foutje hebt gemaakt: header functie mag ook NA output.
 
Helaas....

De redirect werkt niet. Ook niet voor de verschillende pagina's (validatie, succes, fout
In de bijlage het hele php-document.

Zou je hier eens naar willen kijken? Er moet dus ergens een fout in staan...

Wederom alvast bedankt!!!
 

Bijlagen

Er staan kleine 5 foutjes in.

Allereerst de eerste en belangrijkste fout.
Gewoon stom misschien maar in regel 10 ben je aanhalingstekens vergeten.
Dit moet hem zijn:
PHP:
$Subject = "Formulier 2uit1-site: Verzoek afspraak";

Vervolgens snap ik het even niet want dan geef je in regel 13 de variabele $EmailFrom de waarde van $Email. Echter in regel 20 geef je $Email pas een waarde. (namelijk de ingevoerde van de gebruiker) Dit moet je omdraaien denk ik.

Ik snap niet of dat kan met die body voor de email, maar daar ga ik me niet over inlaten. Kan goed zijn dat het werkt hoor.

In regel 67 stop je de mailfunctie in een bepaalde variabele. Volgens mij verstuurd hij dan echter niet. Je moet het if-statement van de validatie erbij betrekken.
Het moet dan zoiets worden:
PHP:
if (!$validationOK) {
  print "<meta http-equiv=\"refresh\" content=\"0;URL=nietcompleet.htm\">";
  exit;
}
else{
mail("info@jasperj.nl", $Subject, $Body, "From: $EmailFrom");
}
Enige nadeel hiervan is ten opzichte van je andere, dat je geen controle hebt of de mail wel verstuurd wordt. Maar daar kun je altijd nog verder naar kijken.

Als laatste heb je dan mooi je header onderaan, wat in principe als laatste uitgevoerd wordt. Zo zou hij moeten werken (niet zelf getest).
Mocht je er niks van begrijpen dan ga ik het script even aanpassen en stuur ik het wel
 
De eerste was duidelijk een domme typefout :o.

Wat ik zo gek vind, is dat dit formulier met 1 knop gewoon werkt. Dat heb ik al getest. Dus niet volledig invullen geeft de fout-pagina en wel volledig invullen geeft de bedankt-pagina en een mailtje in mijn mailbox.

Maar met de toevoeging van het 2-knoppen-principe werkt het ineens niet. Hij blijft nu hangen bij het blanco weergeven van het php-document en verstuurt geen mail.

Dus hoe nu verder? (Iets met bomen en een bos...)
 
heb je het aangepast of niet? geef anders even de code voor zover je nu hebt en wat je wilt en niet doet.
 
Hai Falcojugger,

Ik heb de typefout aangepast. Verder niets. Omdat het formulier in originele staat wel werkte, vind ik het raar dat er nu fouten in zouden zitten.

In de bijlage het huidige formulier. Als ik deze gebruik, krijg ik de blanco php-pagina en geen mail.

Wat ik graag zou willen is dat de bezoeker, na het invullen van zijn/haar gegevens, op één van de knoppen drukt. Vervolgens moet er een controle zijn of alle gegevens zijn ingevuld (verplichte velden) en een foutmelding als dat niet zo is.
Is wel alles ingevuld, dan is het de bedoeling dat de bezoeker een bedankt-pagina te zien krijgt en ik een mailtje met daarin de ingevulde gegevens en op welke knop er gedrukt is.

Blij dat je de moed nog niet hebt opgegeven:thumb:!
 

Bijlagen

Ik ben er even uit geweest (vakantie) en duik nu met nieuwe moed in mijn probleem. Is er iemand die me een helpende hand kan bieden?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan