login  Naam:   Wachtwoord: 
Registreer je!
 Forum

INSERT statement in mailformulier toevoegen/verwerken

Offline Erwin1976 - 16/10/2011 12:21 (laatste wijziging 16/10/2011 12:39)
Avatar van Erwin1976Lid Hallo,

Ik wil in onderstaand mailscript een insert statement invoegen. In welk gedeelte kan ik dit het beste doen?

Mijn INSERT script:
  1. $host = "localhost";
  2. $user = "root";
  3. $pass = "";
  4. $database = "voorbeeld";
  5. mysql_connect("$host","$user","$pass") or die (mysql_error());
  6. mysql_select_db ("$database") or die (mysql_error());
  7. mysql_query("INSERT INTO contact (naam,email,onderwerp,boodschap)
  8. VALUES ('$POST[naam]','$POST[email]','$POST[onderwerp]','$POST[boodschap]')");


Mijn mailformulier:
  1. <?php
  2.  
  3. include "../templates/header.html";
  4.  
  5. // E-mailadres van de ontvanger
  6. $mail_ontv = 'test@test.nl'; // <<<----- voer jouw e-mailadres hier in!
  7.  
  8. // Speciale checks voor naam en e-mailadres
  9. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  10. {
  11. // naam controle
  12. if (empty($_POST['naam']))
  13. $naam_fout = 1;
  14. // e-mail controle
  15. if (function_exists('filter_var') && !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
  16. $email_fout = 1;
  17. // antiflood controle
  18. if (!empty($_SESSION['antiflood']))
  19. {
  20. $seconde = 20; // 20 seconden voordat dezelfde persoon nog een keer een e-mail mag versturen
  21. $tijd = time() - $_SESSION['antiflood'];
  22. if($tijd < $seconde)
  23. $antiflood = 1;
  24. }
  25. }
  26.  
  27. // Kijk of alle velden zijn ingevuld - naam mag alleen uit letters bestaan en het e-mailadres moet juist zijn
  28. 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')
  29. {
  30. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  31. {
  32. if (!empty($naam_fout))
  33. echo '<p>Uw naam is niet ingevuld.</p>';
  34. elseif (!empty($email_fout))
  35. echo '<p>Uw e-mailadres is niet juist.</p>';
  36. elseif (!empty($antiflood))
  37. echo '<p>U mag slechts &eacute;&eacute;n bericht per ' . $seconde . ' seconde versturen.</p>';
  38. else
  39. echo '<p>U bent uw naam, e-mailadres, onderwerp of bericht vergeten in te vullen.</p>';
  40. }
  41.  
  42. // HTML e-mail formlier
  43. ?>
  44. <center>
  45. <table width=480>
  46. <tr>
  47. <td><H3>Contactformulier</H3>
  48. </td>
  49. </tr>
  50. <tr>
  51. <td>
  52. Vul onderstaande velden in voor contact.
  53. </td>
  54. </tr>
  55. </table>
  56. </center>
  57. <?php
  58.  
  59. echo '<form method="post" action="' . $_SERVER['REQUEST_URI'] . '" />
  60. <p>
  61.  
  62. <label for="naam">Naam:</label><br />
  63. <input type="text" id="naam" name="naam" value="' . (isset($_POST['naam']) ? htmlspecialchars($_POST['naam']) : '') . '" /><br />
  64.  
  65. <label for="email">E-mailadres:</label><br />
  66. <input type="text" id="email" name="email" value="' . (isset($_POST['email']) ? htmlspecialchars($_POST['email']) : '') . '" /><br />
  67.  
  68. <label for="onderwerp">Onderwerp:</label><br />
  69. <input type="text" id="onderwerp" name="onderwerp" value="' . (isset($_POST['onderwerp']) ? htmlspecialchars($_POST['onderwerp']) : '') . '" /><br />
  70.  
  71. <label for="boodschap">Bericht:</label><br />
  72. <textarea id="boodschap" name="boodschap" rows="8" style="width: 400px;">' . (isset($_POST['boodschap']) ? htmlspecialchars($_POST['boodschap']) : '') . '</textarea><br />
  73.  
  74. <input type="submit" name="submit" value=" Versturen " />
  75. </p>
  76. </form>';
  77. // versturen naar
  78. } else {
  79.  
  80. // set datum
  81. $datum = date('d/m/Y H:i:s');
  82.  
  83. $inhoud_mail = "===================================================\n";
  84. $inhoud_mail .= "Ingevulde contact formulier " . $_SERVER['HTTP_HOST'] . "\n";
  85. $inhoud_mail .= "===================================================\n\n";
  86.  
  87. $inhoud_mail .= "Naam: " . htmlspecialchars($_POST['naam']) . "\n";
  88. $inhoud_mail .= "E-mail adres: " . htmlspecialchars($_POST['email']) . "\n";
  89. $inhoud_mail .= "Bericht:\n";
  90. $inhoud_mail .= htmlspecialchars($_POST['boodschap']) . "\n\n";
  91.  
  92. $inhoud_mail .= "Verstuurd op " . $datum . " via het IP adres " . $_SERVER['REMOTE_ADDR'] . "\n\n";
  93.  
  94. $inhoud_mail .= "===================================================\n\n";
  95.  
  96. // spambot protectie
  97.  
  98. $headers = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['email'] . '>';
  99.  
  100. $headers = stripslashes($headers);
  101. $headers = str_replace('\n', '', $headers); // Verwijder \n
  102. $headers = str_replace('\r', '', $headers); // Verwijder \r
  103. $headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes
  104.  
  105. $_POST['onderwerp'] = str_replace('\n', '', $_POST['onderwerp']); // Verwijder \n
  106. $_POST['onderwerp'] = str_replace('\r', '', $_POST['onderwerp']); // Verwijder \r
  107. $_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes
  108.  
  109. if (mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers))
  110. {
  111.  
  112. // zorg ervoor dat dezelfde persoon niet kan spammen
  113. $_SESSION['antiflood'] = time();
  114.  
  115. echo '<h3>Het contactformulier is verzonden</h3>
  116.  
  117. <p>Bedankt voor het invullen van het contactformulier. We zullen zo spoedig mogelijk contact met u opnemen.</p>';
  118. }
  119. else
  120. {
  121. echo '<h1>Het contactformulier is niet verzonden</h1>
  122.  
  123. <p><b>Onze excuses.</b> Het contactformulier kon niet verzonden worden.</p>';
  124. }
  125. }
  126.  
  127. include "../templates/footer.html";
  128. ?>

3 antwoorden

Gesponsorde links
Offline Sam - 16/10/2011 12:39
Avatar van Sam PHP expert Oeh, lelijke code...

Als alles werkt, zou ik het op lijn 112 zetten. Nuja, ik zou heel die code weggooien en opnieuw beginnen.. Maarjah  
Offline Dlol - 16/10/2011 12:40 (laatste wijziging 16/10/2011 12:51)
Avatar van Dlol 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:

  1. // Onnodig
  2. mysql_connect("$host", ...);
  3.  
  4. // WEL goed
  5. mysql_connect($host, ...);


Verder zou ik in je query ook nog de $_POST[] niet tussen de quotes zetten, beter zo dus:
  1. mysql_query("INSERT INTO contact (naam,email,onderwerp,boodschap)
  2. 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.
Offline Erwin1976 - 16/10/2011 13:38
Avatar van Erwin1976 Lid Klopt ik weet dat de INSERT niet helemaal kloppend was. Maar het was meer om een idee te krijgen waar ik mijn INSERT script kan plaatsen in dit script.

Misschien ga ik het nog eens opnieuw opbouwen met een goeie beveilinging 
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.212s