Een werkend contactformulier gebruikmakende van SMTP

Status
Niet open voor verdere reacties.

chripoo

Gebruiker
Lid geworden
6 jan 2013
Berichten
18
Hallo,

Ik heb in mijn website een simpel contactformuliertje opgenomen.
In het action kader heb ik een mailto funtie gezet met mijn emailadres.
Echter als ik op de verzendknop druk dan opent mijn mailprogramma
i.p.v. dat het formulier rechtstreeks verzonden wordt. Ik zou deze functie
liever ook niet gebruiken omdat er nogal wat nadelen aan vast schijnen te zitten.
Ik ben dan ook op zoek naar een smtp script die het mailgedeelte afhandelt.
Ik heb van mijn provider een servernaam opgekregen voor uitgaande mail,
een poortnummer etc.
Ik weet echter niet waar ik een werkend script vandaan kan halen en hoe
ik de gegevens van mijn provider moet implementeren.
En waar moet ik dat script precies plakken?
Ik ben vormgever maar snap echt nada van scripting.
Ik hoop dat iemand mij verder kan en wil helpen.
Alvast bedankt.
 
Je hebt nu al een contact formulier zeg je, bijvoorbeeld zoiets:

HTML:
<form action="" method="POST">
 <input type="text" name="naam" placeholder="Je naam...">
 <input type="email" name="email" placeholder="Je email adres...">
 <textarea name="bericht" placeholder="Je bericht..."></textarea>
 <button type="submit" name="submit">Verzenden</button>
</form>

Wanneer dit verzonden moet worden, zet je dit erboven:

PHP:
<?php
if($_POST['submit'])
{
 if(!$_POST['naam'] OR !$_POST['email'] OR !$_POST['bericht']){
  echo 'Niet alle velden zijn ingevuld';
 } else {
  mail('jeeigen@emailadres.nl', 'Onderwerp', htmlspecialchars($_POST['bericht'],ENT_QUOTES));
  echo 'Het bericht is succesvol verzonden!';
 }
}
?>

Zorg er wel voor dat je de pagina opslaat als .php in plaats van .html
Probeer dit eerst, in veel gevallen is het opgeven van een SMTP server niet nodig.
 
Bedankt voor je snelle reactie, Roy
Ik ga ermee aan de slag! Ben benieuwd!
 
Ik heb mijn 'contact' button gelinkt aan 'contact.php'.
Echter als ik mijn site upload linkt de button nog steeds aan 'contact.html'
En als ik dan op de 'verzend' button druk opent nog steeds mijn mail programma.
Enig idee hoe dat kan?

pff.. duurt dus ff voordat alle content op de externe server is aangepast. Ik wil weer eens te snel.
 
Laatst bewerkt:
Welke code precies?
Ik zou graag willen weten waarom de button nog steeds naar het html bestand linkt
Hij zou nu toch naar mijn php bestand moeten linken
 
<form action="" method="POST">
deze action verwijst terug naar zichzelf!!!!!!!
 
Ben nu zover dat het formulier eindelijk in mijn inbox verschijnt! HALLELUJAH!!!!
Echter met onderstaande code:
<?php
if($_POST['submit'])
{
if(!$_POST['naam'] OR !$_POST['email'] OR !$_POST['bericht']){
echo 'Niet alle velden zijn ingevuld';
} else {
mail('jeeigen@emailadres.nl', 'Onderwerp', htmlspecialchars($_POST['bericht'],ENT_QUOTES));
echo 'Het bericht is succesvol verzonden!';
}
}
?>
krijg ik alleen hetgeen is ingevuld bij bericht en hetgeen is ingevuld in de overige velden wordt niet mee verstuurd.
Mss dat iemand weet hoe ik de code moet aaanpassen?
 
Kijk hier eens naar, experimenteer ermee en leer ervan natuurlijk!

PHP:
<?php
// Lijstje met veld namen welke verplicht ingevuld dienen te worden
$verplichte_velden = array('naam','email','bericht');

// Formulier verstuurd?
if($_POST['submit'])
{
	// Door de verplichte velden lopen
	foreach($verplichte_velden as $veld)
	{
		// Verplichte veld NIET ingevuld?
		if(!$_POST[$veld])
		{
			// Fouten array maken met foutmeldingen
			$fouten[] = ucfirst($veld).' is niet ingevuld.';
		}
	}

	// Géén fouten?
	if(!$fouten)
	{
		// Door alle verstuurde velden lopen
		foreach($_POST as $veld=>$waarde)
		{
			// Array maken met alle velden en hun opgegeven waarde (deze waarde wordt ge-escaped zodat eventueel ingevoerde HTML niet actief is. Ofwel XSS voorkomen)
			$regels[] = ucfirst($veld).': '.htmlspecialchars($waarde,ENT_QUOTES);
		}

		// Alle velden op een nieuwe regel zetten
		$bericht = implode("\r\n",$regels);

		// Email versturen
		mail('jeeigen@emailadres.nl', 'Onderwerp', $bericht);

		// Vertellen dat hij verstuurd is!
		echo '<div class="success">Het bericht is succesvol verzonden!</div>';

	// Wel fouten?
	} else
	{
	?>
		<div class="error">
			<strong>Er is iets fout gegaan!</strong>
			<ul>
			<? foreach($fouten as $fout): ?>
				<li><?=$fout;?></li>
			<? endforeach; ?>
			</ul>
		</div>
	<?php
	}
}
?>
 
Laatst bewerkt:
Dank je Roy,

Maar ik heb mijn scriptje inmiddels prima voor elkaar.
Netjes met het getypte berichtje, de afzender (email adres) en tijd.
Het enige wat nog niet wil lukken is doorlinken naar een bedankt pagina als het formulier succesvol verstuurd is.
Elke keer als ik mijn bedankt pagina in het script opneem en ik test het formulier na upload dan verschijnt gelijk de bedankt pagina zonder dat ik uberhaupt wat heb ingevuld, haha.
Maar daar zal ik waarschijnlijk ook nog wel uitvogelen.
In ieder geval bedankt voor je moeite.

Groet, Chris
 
Graag gedaan!

Doorlinken is ook super eenvoudig, uit mijn voorbeeld deze regel:
PHP:
echo '<div class="success">Het bericht is succesvol verzonden!</div>';

Vervangen door:
PHP:
header('Location: http://jewebsite.nl/bedankt.php');

Zorg er hierbij wel voor dat er nog géén output is! Ofwel; geen html of echo's hierboven!

Succes!
 
Bedankt Roy,

Zo zou het moeten lukken.
Alleen dat laatste snap ik niet helemaal.
Bedoel je dat de 'header' regel na de 'mail' regel moet?

Groet, Chris
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan