Hallo,

Ik heb een bestaand php contactformulier aangepast en uitgebreid in php, maar ik heb ergens iets fout gedaan of over het hoofd gezien (mijn eerste stapjes in de php-wereld:). De bedoeling is dat de keuze uit het html-meerkeuzevakje (myopt) in de titel van de mail komt te staan. De rest staat in de body van de mail. Alle velden zijn verplicht in te vullen, behalve de laatste “uw vraag” txtText.

Ben ook niet zeker waar ik $Subject moet gebruiken of eventueel $myopt?

Heb ook al gevonden dat de sendmail::send functie maar 4 parameters accepteert bvb send($from, $to, $message, $subject)
Ik had er meerdere staan in mijn eerste ontwerp.

Hieronder de verschillende files: de html-form, lib.php, config.php en contact.php.

Weet er iemand een oplossing?

Alvast bedankt!
Frederic


1) LIB.PHP

<?php
class sendmail
{
public static function send($from , $to , $message, $subject)
{
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";

$headers .= "From:" . $from; if(mail($to,$subject,$message,$headers))
return true;
else
return false;
}
}
function checkEmailAddress($email){
return preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",$email);
}
function isPostBack()
{
return ($_SERVER['REQUEST_METHOD'] == 'POST');
}
?>


2) CONFIG.PHP

<?php
// Write contact email reciever here
$contactEmail = "[email protected]";
$email_subject = "$myOpt";
// Write Subscribe email reciever here
$subscribeEmail = "[email protected]";

?>


3) CONTACT.PHP

<?php
include_once './lib.php';
include_once './config.php';
if(!isPostBack()) die('Please send contact form via POST method...');

$Name = htmlspecialchars($_POST['txtName']);
$Email = htmlspecialchars($_POST['txtEmail']);
$Subject = htmlspecialchars($_POST['txtSubject']);;
$preText = "<strong>Bedrijfsnaam:</strong> $Bedrijfsnaam <br />";
$preText .= "<strong>Contactpersoon:</strong> $Name <br />";
$preText .= "<strong>Email:</strong> $Email <br />";
$preText .= "<strong>Telefoon:</strong> $Telefoon <br />";
$preText .= "<strong>BTW:</strong> $BTW <br />";
$preText .= "<strong>Vraag betreft:</strong> $myopt <br /><br />";
$Text = htmlspecialchars($_POST['txtText']);

$Text = $preText . $Text;

if(empty ($Text)) die('Velden met een * moeten ingevuld worden ...');
if(!checkEmailAddress($Email)) die('Onjuist email adres ...');

if(!sendmail::send($Email , $contactEmail , $Text , $Subject ))
die('Kan uw bericht niet verzenden. Er is een fout opgetreden.');

echo '1';
?>


4) FORM

<form action="php/contact.php" method="post" id="frmContact">
<h5>Bedrijfsnaam *</h5>
<input name="txtBedrijfsnaam" type="text" class="txbx" value="" /><br />
<h5>Contactpersoon *</h5>
<input name="txtName" type="text" class="txbx" value="" /><br />
<h5>Email *</h5>
<input name="txtEmail" type="text" class="txbx" value="" /><br />
<h5>Telefoon of GSM *</h5>
<input name="txtTelefoon" type="text" class="txbx" value="" /><br />
<h5>BTW-nummer *</h5>
<input name="txtBTW" type="text" class="txbx" value="" /><br />
<h5>Vraag betreft *</h5>
<select name="txtSubject" id="myOpt" class="txbx">
<option value="Aanvraag algemene informatie">Aanvraag algemene informatie</option>
<option value="Aanvraag documentatie">Aanvraag documentatie</option>
<option value="Aanvraag wisselstukken">Aanvraag wisselstukken</option>
<option value="Aanvraag log-in webshop">Aanvraag log-in webshop</option>
<option value="Aanvraag verkoopcondities">Aanvraag verkoopcondities</option>
<option value="Nieuwsbrief of Promotie">Nieuwsbrief of Promotie</option>
<option value="Andere vraag">Andere vraag</option>
</select>
<div class="erabox">
<h5>Uw vraag </h5>
<textarea name="txtText" class="txbx era" ></textarea><br />
<p>Velden met een * zijn verplicht.</p>
<input type="submit" class="sendbtn" name="btnSend" id="btnSend" value="Verzenden">
<div id="spanMessage">
</div>
</div>
</form>
Het probleem is dus dat je geen titel in de mail ziet?
Neen, het probleem is wel degelijk het versturen. Als ik op de verzend knop klik, geeft hij de php pagina weer, ipv de gegevens te verzenden en de gebruiker een "bedankt voor uw aanvraag" boodschap na te laten.
dus je ziet in de bron van de pagina van je browser de php-code?
idd ... volgens mij zit er ergens een fout (of meerdere) in de contact.php ... misschien iets met de $myopt of txtSubject?
als je de broncode van php ziet, dan ondersteunt je hosting / server geen php.

(of je gebruikt een short tag: <¿ ipv <¿php, maar dat doe je niet in de gegeven code)
Ik had ergens een haakje vergeten maar zie nu de code "1" op de contact.php pagina bij het versturen van de form, ipv op dezelfde pagina te blijven en de boodschap "bedankt voor uw aanvraag" te krijgen. Hij stuurt de mail wel door, maar de info die ik heb ingevuld staat er maar deels in...

Bedrijfsnaam:
Contactpersoon: Frederic
Email: [email protected]
Telefoon:
BTW:
Vraag betreft:

Dit is een testvraag. Groeten, Frederic
Als je even logisch kijkt, dan zie je dat de eerste drie regels van de PHP-code hieronder gelden voor txtName, txtEmail en txtSubject.

Maar niet voor $Bedrijfsnaam, $telefoon, $BTW, $myopt. Deze zijn niet gedefinieerd namelijk, en daarom dus ook leeg.


<?php // kleurtjes zichtbaar in je code
$Name = htmlspecialchars($_POST['txtName']);
$Email = htmlspecialchars($_POST['txtEmail']);
$Subject = htmlspecialchars($_POST['txtSubject']);

$preText = "<strong>Bedrijfsnaam:</strong> $Bedrijfsnaam <br />";
$preText .= "<strong>Contactpersoon:</strong> $Name <br />";
$preText .= "<strong>Email:</strong> $Email <br />";
$preText .= "<strong>Telefoon:</strong> $Telefoon <br />";
$preText .= "<strong>BTW:</strong> $BTW <br />";
$preText .= "<strong>Vraag betreft:</strong> $myopt <br /><br />";
$Text = htmlspecialchars($_POST['txtText']);  

$Text = $preText . $Text;  
?>


Persoonlijk zou ik het als volgt doen:

<?php //nog een keer kleurtjes in het script
$preText .= "<strong>Telefoon:</strong> ".htmlspecialchars($_POST['txtTelefoon'])."<br />";
?>

Dan hoef je die losse nieuwe variabelen niet meer aan te maken, en houd je makkelijker overzicht in je code, en zie je in een oogopslag dat de inhoud door htmlspecialchars() gaat.
Ik zie er nog meer, maar $telefoon op regel 9 is leeg, en zo zijn er meer.
Zie reactie van Aar hoe het wel te doen.
Ik gaf een enkel voorbeeld, als je logisch kijkt en ziet wat wel werkt, dan weet je ook wat je aan moet passen zodat het wel werkt.
@ Aar: Bedankt!! Uw oplossing werkt perfect zo!
Ik heb wel nog 1 probleem: hoe kan ik bvb vermelden "Bedankt voor uw aanvraag. We helpen u zo snel mogelijk verder." (eventueel op een aparte html pagina)?
Momenteel kom ik terecht op de contact.php pagina na het versturen van de form en krijg ik de boodschap "1" te zien.
Alleszinds bedankt voor uw hulp!

Reageren