Formulier afhandeling met template

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jop B

Jop B

02/03/2016 17:18:44
Quote Anchor link
Beste leden,


Graag had ik wat advies van jullie over het volgende.
Via een formulier wil ik een email kunnen sturen met een vaste opmaak (template).
In het formulier word gebruik gemaakt van een input email adres (waar de email naar toe moet) en nog een variabele waarde die terug moet komen in de template. Daarnaast wil ik een terug koppeling op de pagina dat het gelukt is.

Het formulier en de ajax call functie heb ik volledig af en wil nu graag weten wat nu de handigste afhandeling is.

Met vriendelijke groet,

Jop
 
PHP hulp

PHP hulp

29/09/2020 10:17:34
 
Thomas van den Heuvel

Thomas van den Heuvel

02/03/2016 17:53:43
Quote Anchor link
declaratie van lokale variabelen +
output buffering +
include(_once()) van template waarin variabelen worden verwerkt?

Vervolgens zou je simpelweg met mail() + enige headers je mail kunnen versturen, of je maakt gebruik van PHPMailer als je dat leuk vindt.

Quote:
Daarnaast wil ik een terug koppeling op de pagina dat het gelukt is.

Dit staat verder los van enige werkwijze die je gebruikt. Vang de returnwaarde van mail() op in een variabele, of van de send() methode indien je PHPMailer gebruikt.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

02/03/2016 23:55:47
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$var
= 'Jouw variabele';

$content = file_get_contents('mytemplate.txt'); // zou ook html kunnen zijn

if(FALSE === $content)
{

    throw new Exception('Template not found.');
}


// vervang %VAR% voor de waarde in jouw variabele
$content = str_replace("%VAR%", $var, $content);

// verzend de email
mail($to, $subject, $content);
?>


mytemplate.txt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
Hartelijk dank voor uw aanvraag

de waarde van de variabele is: %VAR%

Met vriendelijke groet,
PHPHULP
 
Jop B

Jop B

03/03/2016 11:46:30
Quote Anchor link
Bedankt voor de reactie's.

Dit is wat ik nu heb

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<form id="forma" method="post" action="formmailer.php">
<input name="cust_e-mail" type="text" id="cust_e-mail" placeholder="E-mailadres"></input>
<select name="choise" type="select" id="choise">
<option value="koffie">Koffie</option>
<option value="thee">Thee</option>
<option value="Fris">Fris</option>
</select>
<button name="submit" class="" id="send" type="submit">Send</button>
</form>



Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
session_start();
//init variables
$emailcustomer = "";

$choise ="";
$to = "";
$subject = "";


//check if form is posted
if($_SERVER['REQUEST_METHOD'] == 'POST'){

//input to variable
$emailcustomer = $_POST['cust_e-mail'];
$choise = $_post['choise'];


$content = file_get_contents('mytemplate.txt'); // zou ook html kunnen zijn

if(FALSE === $content)
{

    throw new Exception('Template not found.');
}


// vervang %VAR% voor de waarde in jouw variabele
$content = str_replace("$choise", $var, $content);

$to = "$emailcustomer";
$subject = "Uw voorkeur";
$headers = 'From: replay@onsemailadres.com';



// verzend de email
mail($headers, $to, $subject, $content);



}

?>


Hebben jullie nog tips ?
Gewijzigd op 03/03/2016 11:49:23 door Jop B
 
- SanThe -

- SanThe -

03/03/2016 12:18:21
Quote Anchor link
Regel 16: Geen post maar POST.
Regels 27 en 29: Om een $var hoeven geen quotes.
Regel 36: Parameters staan in de verkeerde volgorde.

http://phpwiki.santhe.nl/index.php?title=De_juiste_mailheaders
 
Jop B

Jop B

03/03/2016 14:33:44
Quote Anchor link
Heb de php code aangepast, diversen malen getest alleen werkt het nog niet. Waar kan dit aan liggen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<form id="forma" method="post">
<input name="cust_e-mail" type="text" id="cust_e-mail" placeholder="E-mailadres"></input>
<select name="choise" type="select" id="choise">
<option value="koffie">Koffie</option>
<option value="thee">Thee</option>
<option value="fris">Fris</option>
</select>
<button name="submit" class="" id="send" type="submit">Send</button>
</form>

<script>
$(document).ready(function(){
$("#forma").submit(function(e) {
e.preventDefault();

$.ajax({
    type: "POST",
        'url': 'formmailer.php',
    'success': function(return) {
    alert (return);
});
});
});

</script>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
session_start();
//init variables
$emailcustomer = "";
$emailus = "";
$choise ="";
$to = "";
$subject = "";


//check if form is posted
if($_SERVER['REQUEST_METHOD'] == 'POST'){

//input to variable
$emailcustomer = $_POST['cust_e-mail'];
$choise = $_POST['choise'];


$content = file_get_contents('mytemplate.txt'); // zou ook html kunnen zijn

if(FALSE === $content)
{

    throw new Exception('Template not found.');
}


// vervang %VAR% voor de waarde in jouw variabele
$content = str_replace($choise, $var, $content);

$to = $emailcustomer;
$subject = "Uw voorkeur";
$headers = 'From: mail@naarons.nl';


// verzend de email
mail($to, $subject, $content, $headers);

$return = "Mail succesvol verstuurd";

}

?>
 
Sjon speth

sjon speth

03/03/2016 14:53:33
Quote Anchor link
Edit:
Spam verwijderd!
Gewijzigd op 03/03/2016 16:08:50 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

03/03/2016 15:40:50
Quote Anchor link
@Jop B je geeft nergens data door met je AJAX call, wellicht als je de parameter
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
'data': $('#forma').serialize(),

toevoegt na de 'url': ... regel?

Ook retourneert je script niets, er staat enkel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$return
= "Mail succesvol verstuurd";
?>

Je zou ook JSON kunnen retourneren met een status (true of false) die aangeeft of het versturen van de mail is geslaagd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$success
= mail(...);

header('Content-Type: application/json; charset=UTF-8');
echo json_encode($success);
?>

(en anders retourneer je standaard false op eenzelfde wijze)

Ook kun je in je AJAX-request aangeven wat voor type data je terugverwacht, in dit geval dus JSON. Hiertoe kun je de volgende regel ook nog toevoegen aan je JavaScript:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
'dataType': 'json',
Gewijzigd op 03/03/2016 15:41:45 door Thomas van den Heuvel
 
Jop B

Jop B

03/03/2016 17:16:49
Quote Anchor link
Beste Thomas,


Dank voor het meedenken :) even los van de return melding, op een of andere manier zend hij geen mail naar het opgegeven email adres.

De parameter zoals je boven aangaf heb ik bij de ajax call gezet.
 
Thomas van den Heuvel

Thomas van den Heuvel

03/03/2016 17:34:45
Quote Anchor link
Quote:
op een of andere manier zend hij geen mail naar het opgegeven email adres.

Hm :/.

Waar blijkt dit uit? Retourneert mail() false? Of krijg je niets binnen?

Succesvol verzenden staat niet garant voor succesvol ontvangen (net zoals de reguliere post :)).

Je zult eerst even precies moeten uitzoeken waar het schip nu strandt.

Maak anders eens een heel simpel/plat script die simpelweg een test-onderwerp en test-bericht mailt naar een statisch e-mailadres en kijk vanuit daar verder wat er misgaat. Maak voor jezelf alles inzichtelijk door een en ander op het scherm af te drukken. Overweeg om in eerste instantie de extra abstractie middels AJAX achterwege te laten, je bent dan in feite een beetje "blind" aan het ontwikkelen en dat is niet handig als je niet precies weet waar iets misgaat (EDIT: dit had ik deels ondervangen door het retourneren van de statuscode die aangaf of het mailen was geslaagd)
Gewijzigd op 03/03/2016 17:37:18 door Thomas van den Heuvel
 
Jop B

Jop B

04/03/2016 11:47:17
Quote Anchor link
Beste Thomas,

Bedankt voor de tip. Heb een functie gemaakt die ik kan uitvoeren en zo stap voor stap dingen erbij kan zetten.

Nu zit ik nog met een probleem en dat is dat mijn template (HTML) als tekst word weergegeven.
Mijn template heb ik nog simpel gehouden door alleen de achtergrond een kleur te geven.

Nu zie ik op diversen sites staan dat ze een html toevoegen door dit te doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$message
= '<html><body>en de inhoud</body></html>';

?>


Maar het moet toch ook kunnen om een html file in te voegen zoals Frank dat boven beschreef?
 
- Ariën -
Beheerder

- Ariën -

04/03/2016 11:53:53
Quote Anchor link
Als je hier kijkt: http://php.net/manual/en/function.mail.php, en dan naar Example #4, dan zie je daar de headers die je moet gebruiken voor een HTML-mail.
 
Thomas van den Heuvel

Thomas van den Heuvel

04/03/2016 16:06:13
Quote Anchor link
@Jop B
Indien je een HTML e-mail verstuurt, gelden hier (en eigenlijk in elke context) dezelfde regels: zorg ervoor dat je je invoer escaped binnen de context waarin je werkt. Je wilt waarschijnlijk niet dat mensen HTML of JavaScript in kunnen vullen en dat dat dan ook als zodanig behandeld wordt wanneer het wordt getoond aan een lezer.
 
Jop B

Jop B

04/03/2016 16:35:45
Quote Anchor link
De platte code werkt, zodra de functie word uitgevoerd krijg ik de mail zoals het zou moeten :)
Nu heb ik de html gekoppeld met de ajax functie en daar gaat het weer mis. Zodra submit is geklikt gebeurt er niets.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<from id="forma">
<input type="email" name="email"></input>
<button name="submit" class="" id="send" type="submit">Send</button>
</form>
$.ajax({
    type: "POST",
        'url': 'test.php',
    'data': $('#forma').serialize(),
}
});


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

//init variables
$to = "";
$subject = "";


$to = $_POST["cust_e-mail"];
$subject = 'onderwerp';
$content = file_get_contents("template.html");

$content = str_replace("%brand%", $brand, $content);

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Afzender <noreply@afzender.com>' . "\r\n";

mail($to, $subject, $content, $headers);
}


?>
 
Thomas van den Heuvel

Thomas van den Heuvel

04/03/2016 16:45:30
Quote Anchor link
:D

Er staat <from id="..."> in plaats van <form id="...">.

Iets te lang met mail bezig geweest? ^^
Of is dit een typefout in je snippet?

Er is ook geen veld cust_e-mail, in het bovenstaande formulier staat enkel name="email".

Je hoeft overigens voor self-closing tags zoals input geen </input> toe te voegen (en misschien is dat zelfs wel fout).

EDIT: ook moet er geen komma achter het laatste argument van je ajax call, dit is mogelijk een syntax fout.
EDIT: en de AJAX call moet overigens pas uitgevoerd worden als je het formulier submit... en niet direct...

Neem ff een rustpauze en drink een stevige kop koffie :).
Gewijzigd op 04/03/2016 16:50:58 door Thomas van den Heuvel
 
- SanThe -

- SanThe -

04/03/2016 16:46:51
Quote Anchor link
FROM ???
<from id="forma">
 
Jop B

Jop B

05/03/2016 13:09:23
Quote Anchor link
Beste Thomas en SanThe,


From was een type fout :).

Na een kop koffie en een goede nachtrust heb ik nog eens gekeken maar kan geen error achterhalen.
Hier is de complete code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html>
<head>
<link rel="stylesheet" href="css/stylesheet.css"></link>
<script type="text/javascript" src="js/jquery 2.1.0 .js"></script>
</head>
<body>
<form id="forma" method="post">
<input name="email" type="text" id="cust_e-mail" placeholder="E-mailadres">
<button name="submit" class="" id="send" type="submit">Send</button>
</form>
 
<script>
$(document).ready(function(){
$("#forma").submit(function(e) {
e.preventDefault();
 
$.ajax({
                type: "POST",
               'url': 'test.php',
                'data': $('#forma').serialize()
});
});
});
</script>



Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
//init variables
$to = "";
$subject = "";
 
$to = $_POST["email"];
$subject = 'Het onderwerp';
$content = file_get_contents("template.html");
 
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Afzender <noreply@afzender.com>' . "\r\n";
 
mail($to, $subject, $content, $headers);

 
?>
Gewijzigd op 05/03/2016 15:29:08 door Jop B
 
- Ariën -
Beheerder

- Ariën -

05/03/2016 13:12:26
Quote Anchor link
Heb je al gedebugged met bijv. Firebug en gekeken naar je AJAX-request?
 
- SanThe -

- SanThe -

05/03/2016 14:51:05
Quote Anchor link
Ik zie dit nergens: #form_waranty
 
Jop B

Jop B

05/03/2016 15:33:24
Quote Anchor link
Het werkt :) bij de php code stond er een afsluiting die er niet thuis hoorde.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
//init variables
$to = "";
$subject = "";
 
$to = $_POST["email"];
$subject = 'Het onderwerp';
$content = file_get_contents("template.html");
 
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Afzender <noreply@afzender.com>' . "\r\n";
 
mail($to, $subject, $content, $headers);

}
//deze stond er teveel
?>



Dank voor het meedenken. Ben er te lang mee bezig geweest denk ik.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/03/2016 16:02:37
Quote Anchor link
Blijkbaar worden er geen foutmeldingen weergegeven op jouw webserver. Dit kun je instellen.
Als je aan het ontwikkelen bent moeten die gewoon aanstaan.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.