INSERT statement in mailformulier toevoegen/verwerken
Erwin1976 - 16/10/2011 12:21 (laatste wijziging 16/10/2011 12:39)
Lid
Hallo,
Ik wil in onderstaand mailscript een insert statement invoegen. In welk gedeelte kan ik dit het beste doen?
Mijn INSERT script:
$host = "localhost";
$user = "root";
$pass = "";
$database = "voorbeeld";
mysql_connect("$host","$user","$pass") or die (mysql_error());
mysql_select_db ("$database") or die (mysql_error());
mysql_query("INSERT INTO contact (naam,email,onderwerp,boodschap)
VALUES ('$POST[naam]','$POST[email]','$POST[onderwerp]','$POST[boodschap]')");
$host = "localhost" ;
$user = "root" ;
$pass = "" ;
$database = "voorbeeld" ;
mysql_query ( "INSERT INTO contact (naam,email,onderwerp,boodschap) VALUES ('$POST[naam] ','$POST[email] ','$POST[onderwerp] ','$POST[boodschap] ')" ) ;
Mijn mailformulier:
<?php
session_start();
include "../templates/header.html";
// E-mailadres van de ontvanger
$mail_ontv = 'test@test.nl'; // <<<----- voer jouw e-mailadres hier in!
// Speciale checks voor naam en e-mailadres
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// naam controle
if (empty($_POST['naam']))
$naam_fout = 1;
// e-mail controle
if (function_exists('filter_var') && !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
$email_fout = 1;
// antiflood controle
if (!empty($_SESSION['antiflood']))
{
$seconde = 20; // 20 seconden voordat dezelfde persoon nog een keer een e-mail mag versturen
$tijd = time() - $_SESSION['antiflood'];
if($tijd < $seconde)
$antiflood = 1;
}
}
// Kijk of alle velden zijn ingevuld - naam mag alleen uit letters bestaan en het e-mailadres moet juist zijn
if (($_SERVER['REQUEST_METHOD'] == 'POST' && (!empty($antiflood) || empty($_POST['naam']) || !empty($naam_fout) || empty($_POST['email']) || !empty($email_fout) || empty($_POST['boodschap']) || empty($_POST['onderwerp']))) || $_SERVER['REQUEST_METHOD'] == 'GET')
{
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (!empty($naam_fout))
echo '<p>Uw naam is niet ingevuld.</p>';
elseif (!empty($email_fout))
echo '<p>Uw e-mailadres is niet juist.</p>';
elseif (!empty($antiflood))
echo '<p>U mag slechts één bericht per ' . $seconde . ' seconde versturen.</p>';
else
echo '<p>U bent uw naam, e-mailadres, onderwerp of bericht vergeten in te vullen.</p>';
}
// HTML e-mail formlier
?>
<center>
<table width=480>
<tr>
<td><H3>Contactformulier</H3>
</td>
</tr>
<tr>
<td>
Vul onderstaande velden in voor contact.
</td>
</tr>
</table>
</center>
<?php
echo '<form method="post" action="' . $_SERVER['REQUEST_URI'] . '" />
<p>
<label for="naam">Naam:</label><br />
<input type="text" id="naam" name="naam" value="' . (isset($_POST['naam']) ? htmlspecialchars($_POST['naam']) : '') . '" /><br />
<label for="email">E-mailadres:</label><br />
<input type="text" id="email" name="email" value="' . (isset($_POST['email']) ? htmlspecialchars($_POST['email']) : '') . '" /><br />
<label for="onderwerp">Onderwerp:</label><br />
<input type="text" id="onderwerp" name="onderwerp" value="' . (isset($_POST['onderwerp']) ? htmlspecialchars($_POST['onderwerp']) : '') . '" /><br />
<label for="boodschap">Bericht:</label><br />
<textarea id="boodschap" name="boodschap" rows="8" style="width: 400px;">' . (isset($_POST['boodschap']) ? htmlspecialchars($_POST['boodschap']) : '') . '</textarea><br />
<input type="submit" name="submit" value=" Versturen " />
</p>
</form>';
// versturen naar
} else {
// set datum
$datum = date('d/m/Y H:i:s');
$inhoud_mail = "===================================================\n";
$inhoud_mail .= "Ingevulde contact formulier " . $_SERVER['HTTP_HOST'] . "\n";
$inhoud_mail .= "===================================================\n\n";
$inhoud_mail .= "Naam: " . htmlspecialchars($_POST['naam']) . "\n";
$inhoud_mail .= "E-mail adres: " . htmlspecialchars($_POST['email']) . "\n";
$inhoud_mail .= "Bericht:\n";
$inhoud_mail .= htmlspecialchars($_POST['boodschap']) . "\n\n";
$inhoud_mail .= "Verstuurd op " . $datum . " via het IP adres " . $_SERVER['REMOTE_ADDR'] . "\n\n";
$inhoud_mail .= "===================================================\n\n";
// spambot protectie
$headers = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['email'] . '>';
$headers = stripslashes($headers);
$headers = str_replace('\n', '', $headers); // Verwijder \n
$headers = str_replace('\r', '', $headers); // Verwijder \r
$headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes
$_POST['onderwerp'] = str_replace('\n', '', $_POST['onderwerp']); // Verwijder \n
$_POST['onderwerp'] = str_replace('\r', '', $_POST['onderwerp']); // Verwijder \r
$_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes
if (mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers))
{
// zorg ervoor dat dezelfde persoon niet kan spammen
$_SESSION['antiflood'] = time();
echo '<h3>Het contactformulier is verzonden</h3>
<p>Bedankt voor het invullen van het contactformulier. We zullen zo spoedig mogelijk contact met u opnemen.</p>';
}
else
{
echo '<h1>Het contactformulier is niet verzonden</h1>
<p><b>Onze excuses.</b> Het contactformulier kon niet verzonden worden.</p>';
}
}
include "../templates/footer.html";
?>
<?php
include "../templates/header.html" ;
// E-mailadres van de ontvanger
$mail_ontv = 'test@test.nl' ; // <<<----- voer jouw e-mailadres hier in!
// Speciale checks voor naam en e-mailadres
if ( $_SERVER [ 'REQUEST_METHOD' ] == 'POST' )
{
// naam controle
if ( empty ( $_POST [ 'naam' ] ) ) $naam_fout = 1 ;
// e-mail controle
if ( function_exists ( 'filter_var' ) && ! filter_var
( $_POST [ 'email' ] , FILTER_VALIDATE_EMAIL
) ) $email_fout = 1 ;
// antiflood controle
if ( ! empty ( $_SESSION [ 'antiflood' ] ) ) {
$seconde = 20 ; // 20 seconden voordat dezelfde persoon nog een keer een e-mail mag versturen
$tijd = time ( ) - $_SESSION [ 'antiflood' ] ; if ( $tijd < $seconde )
$antiflood = 1 ;
}
}
// Kijk of alle velden zijn ingevuld - naam mag alleen uit letters bestaan en het e-mailadres moet juist zijn
if ( ( $_SERVER [ 'REQUEST_METHOD' ] == 'POST' && ( ! empty ( $antiflood ) || empty ( $_POST [ 'naam' ] ) || ! empty ( $naam_fout ) || empty ( $_POST [ 'email' ] ) || ! empty ( $email_fout ) || empty ( $_POST [ 'boodschap' ] ) || empty ( $_POST [ 'onderwerp' ] ) ) ) || $_SERVER [ 'REQUEST_METHOD' ] == 'GET' ) {
if ( $_SERVER [ 'REQUEST_METHOD' ] == 'POST' )
{
echo '<p>Uw naam is niet ingevuld.</p>' ; elseif ( ! empty ( $email_fout ) ) echo '<p>Uw e-mailadres is niet juist.</p>' ; elseif ( ! empty ( $antiflood ) ) echo '<p>U mag slechts één bericht per ' . $seconde . ' seconde versturen.</p>' ; else
echo '<p>U bent uw naam, e-mailadres, onderwerp of bericht vergeten in te vullen.</p>' ; }
// HTML e-mail formlier
?>
<center>
<table width=480>
<tr>
<td><H3>Contactformulier</H3>
</td>
</tr>
<tr>
<td>
Vul onderstaande velden in voor contact.
</td>
</tr>
</table>
</center>
<?php
echo '<form method="post" action="' . $_SERVER [ 'REQUEST_URI' ] . '" /> <p>
<label for="naam">Naam:</label><br />
<input type="text" id="naam" name="naam" value="' . ( isset ( $_POST [ 'naam' ] ) ?
htmlspecialchars ( $_POST [ 'naam' ] ) : '' ) . '" /><br />
<label for="email">E-mailadres:</label><br />
<input type="text" id="email" name="email" value="' . ( isset ( $_POST [ 'email' ] ) ?
htmlspecialchars ( $_POST [ 'email' ] ) : '' ) . '" /><br />
<label for="onderwerp">Onderwerp:</label><br />
<input type="text" id="onderwerp" name="onderwerp" value="' . ( isset ( $_POST [ 'onderwerp' ] ) ?
htmlspecialchars ( $_POST [ 'onderwerp' ] ) : '' ) . '" /><br />
<label for="boodschap">Bericht:</label><br />
<textarea id="boodschap" name="boodschap" rows="8" style="width: 400px;">' . ( isset ( $_POST [ 'boodschap' ] ) ?
htmlspecialchars ( $_POST [ 'boodschap' ] ) : '' ) . '</textarea><br />
<input type="submit" name="submit" value=" Versturen " />
</p>
</form>' ;
// versturen naar
} else {
// set datum
$datum = date ( 'd/m/Y H:i:s' ) ;
$inhoud_mail = "===================================================\n " ;
$inhoud_mail .= "Ingevulde contact formulier " . $_SERVER [ 'HTTP_HOST' ] . "\n " ;
$inhoud_mail .= "===================================================\n \n " ;
$inhoud_mail .= "Bericht:\n " ;
$inhoud_mail .= "Verstuurd op " . $datum . " via het IP adres " . $_SERVER [ 'REMOTE_ADDR' ] . "\n \n " ;
$inhoud_mail .= "===================================================\n \n " ;
// spambot protectie
$headers = 'From: ' . htmlspecialchars ( $_POST [ 'naam' ] ) . ' <' . $_POST [ 'email' ] . '>' ;
$headers = str_replace ( '\n' , '' , $headers ) ; // Verwijder \n $headers = str_replace ( '\r' , '' , $headers ) ; // Verwijder \r
$_POST ['onderwerp'] = str_replace('\n ', '', $_POST ['onderwerp']); // Verwijder \n
$_POST ['onderwerp'] = str_replace('\r ', '', $_POST ['onderwerp']); // Verwijder \r
$_POST ['onderwerp'] = str_replace(" \
"" , "\\\" " , str_replace ( "\\" , " \\\\
", $_POST ['onderwerp'])); // Slashes van quotes
if (mail($mail_ontv , $_POST ['onderwerp'], $inhoud_mail , $headers ))
{
// zorg ervoor dat dezelfde persoon niet kan spammen
$_SESSION ['antiflood'] = time();
echo '<h3>Het contactformulier is verzonden</h3>
<p>Bedankt voor het invullen van het contactformulier. We zullen zo spoedig mogelijk contact met u opnemen.</p>';
}
else
{
echo '<h1>Het contactformulier is niet verzonden</h1>
<p><b>Onze excuses.</b> Het contactformulier kon niet verzonden worden.</p>';
}
}
include " ../ templates/ footer. html";
?>
3 antwoorden
Gesponsorde links
Dlol - 16/10/2011 12:40 (laatste wijziging 16/10/2011 12:51)
Lid
Je insertscript (je spreekt over een insertstatement, maar ik ga er vanuit dat je het script bedoelt) voeg je toe na al je controles of de naam is ingevuld etc. Met andere woorden, indien alle controles zijn doorstaan, ga je naar het insertscript, via een if else structuur.
Verder zitten er nog wel enkele fouten in het insertscript.
$POST['naam'] gaat niet werken, het moet $_POST['naam'] zijn.
Ook is het totaal overbodig om te schrijven:
// Onnodig
mysql_connect("$host", ...);
// WEL goed
mysql_connect($host, ...);
Verder zou ik in je query ook nog de $_POST[] niet tussen de quotes zetten, beter zo dus:
mysql_query("INSERT INTO contact (naam,email,onderwerp,boodschap)
VALUES ('" . $_POST['naam'] . "','" . $_POST['email'] . "','" . $_POST['onderwerp'] . "', '" . $_POST['boodschap'] . "')");
mysql_query ( "INSERT INTO contact (naam,email,onderwerp,boodschap) VALUES ('" . $_POST [ 'naam' ] . "','" . $_POST [ 'email' ] . "','" . $_POST [ 'onderwerp' ] . "', '" . $_POST [ 'boodschap' ] . "')" ) ;
En dan heb ik het eigenlijk nog niet over de beveiliging gehad... Maar zorg eerst maar dat je het werkend krijgt.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.