Contact formulier

Status
Niet open voor verdere reacties.

Rubensky

Forumleiding
Hoofdbeheerder
Lid geworden
20 nov 2012
Berichten
356
Iedereen,

Ik ben een website aan het maken waar ik een contact formulier voor nodig heb. Ik ben door een formulier voor een groot deel van het internet te halen en door mijn eigen kennis van PHP al een heel eind gekomen. De door mij gebruikte code zal ik hieronder plaatsen. evenals de vragen die ik nog heb waarvan ik er nu 1 zal plaatsen omdat het niet zo moet zijn dat ik iemand verzoek het complete formulier voor mij te maken. Al mag dit natuurlijk wel :)

Mijn vraag op dit moment is: Hoe ga ik er voor ga zorgen dat het formulier wat ik gebruik naar een speciaal E-mailadres wordt gestuurd en natuurlijk naar die gene die het formulier invult? (de code die ik nu gebruik is er op gericht dat je het mailadres in het script invult en dat er dan een mail naar je wordt verzonden. maar dat willen we natuurlijk niet.

Bedankt alvast voor de hulp!

Code:
<?php
session_start(); 
 

// E-mailadres van de ontvanger
$mail_ontv = ''; 

// 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['mail'], 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['mail']) || !empty($email_fout) || empty($_POST['bericht']) || 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 &eacute;&eacute;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
  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="mail">E-mailadres:</label><br />
      <input type="text" id="mail" name="mail" value="' . (isset($_POST['mail']) ? htmlspecialchars($_POST['mail']) : '') . '" /><br />
      
      <label for="onderwerp">Onderwerp:</label><br />
      <input type="text" id="onderwerp" name="onderwerp" value="' . (isset($_POST['onderwerp']) ? htmlspecialchars($_POST['onderwerp']) : '') . '" /><br />
      
      <label for="bericht">Bericht:</label><br />
      <textarea id="bericht" name="bericht" rows="8" style="width: 400px;">' . (isset($_POST['bericht']) ? htmlspecialchars($_POST['bericht']) : '') . '</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['mail']) . "\n";
  $inhoud_mail .= "Bericht:\n";
  $inhoud_mail .= htmlspecialchars($_POST['bericht']) . "\n\n";
    
  $inhoud_mail .= "Verstuurd op " . $datum . " via het IP adres " . $_SERVER['REMOTE_ADDR'] . "\n\n";
    
  $inhoud_mail .= "===================================================\n\n"; 
 
  $headers = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['mail'] . '>';
  
  $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))
  {
      
      $_SESSION['antiflood'] = time();
      
      echo '<h1>Het contactformulier is verzonden</h1>
      
      <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>';
  }
}
?>
 
Hartelijk dank voor jullie bericht ik ben een heel eind gekomen kan berichten verzenden en kan ze ontvangen e.d. ook lukt het mij om een test weer te geven als er een vak niet is ingevuld. Maar daar zit ook mijn probleem:

Ik heb hem gemaakt op de vakken naam en E-mail. Maar als ik naam wel invul en E-mail niet dan geeft hij alsnog aan dat ze beiden niet zijn ingevuld. Daarnaast wordt het formulier gewoon verzonden als ik iets niet heb ingevuld. Hieronder vinden jullie de aangepaste code wie kan mij even helpen?

HTML
Code:
<style>
p{padding:0;margin:0;}
body{padding:0;margin:0;}
</style>

<form action="mail.php" method="POST">
<p>Naam</p> <input type="text" name="name">
<p>E-mail</p> <input type="text" name="email">
<p>telefoonnummer</p> <input type="text" name="phone">
<p>onderwerp</p> <input type="text" name="subject">
<p>Wilt u worden teruggebeld?:</p>
ja:<input type="checkbox" value="Yes" name="call"><br />
Nee:<input type="checkbox" value="No" name="call"><br />

<p>Website</p> <input type="text" name="website">

<p>Priority</p>
<select name="priority" size="1">
<option value="Low">Low</option>
<option value="Normal">Normal</option>
<option value="High">High</option>
<option value="Emergency">Emergency</option>
</select>
<br />

<p>Type</p>
<select name="type" size="1">
<option value="update">algemene informatie</option>
<option value="change">offerte</option>
<option value="addition">onnze diensten</option>
<option value="new">test</option>
</select>
<br />

<p>uw bericht</p><textarea name="message" rows="6" cols="25"></textarea><br />
<input type="submit" value="Send"><input type="reset" value="Clear">
</form>

PHP
Code:
<?php
$name = $_POST['name'];
if (isset($name)) {
    echo "u hebt u naam niet ingevuld.";
};
$email = $_POST['email'];
if (isset($name)) {
    echo "u hebt u mail niet ingevuld.";
};
$phone = $_POST['phone'];
$call = $_POST['call'];
$subject = $_POST['subject'];
$website = $_POST['website'];
$priority = $_POST['priority'];
$type = $_POST['type'];
$message = $_POST['message'];
$formcontent=" From: $name \n Phone: $phone \n Subject: $subject \n Call Back: $call \n Website: $website \n Priority: $priority \n Type: $type \n Message: $message";
$recipient = "info@rubensky.com";
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");

echo "Thank You!" . " -" . "<a href='form.html' style='text-decoration:none;color:#ff0099;'> Return Home</a>";
?>
 
Kijk eens naar de beide if-regeltjes aan het begin van je script. Hier gebruik je voor beide controles $name. En dat klopt natuurlijk niet ;).
 
Klopt maar als ik die aanpas werkt het alsnog niet!
 
Hoe pas je ze aan dan?
 
natuurlijk door de $naam in $email aan te passen.
 
Dat zou moeten werken. Misschien komt het door de ; aan het eind van je accolade die er niet hoort.

Maar het script kan nog veel netter:
Code:
<?php
$errors = array(); // maak een array klaar voor de errors.
// Kijk of de velden leeg zijn, en trim ze eventueel om losse spaties te voorkomen 
if (trim($_POST['name'])=="") {
    $errors[] = "U hebt uw naam niet ingevuld.";
}
if (trim($_POST['email'])=="") {
    echo "U hebt uw e-mailadres niet ingevuld.";
}

// kijken of er geen errors zijn!
if(count($errors)==0) {
// voer hier je script uit, vanaf het moment als alles goed is ingevuld.
} else {
// er zijn wel errors, loop de array met foutmeldingen door.
 echo "<ul>";
 foreach($errors as $error) {
  echo "<li>".$error."</li>";
 }
 echo "</ul>";
}
?>
 
Laatst bewerkt:
Dit is mijn eigen code maar wat zou hierin fout zijn gegaan? Ik heb hem aangepast:
Code:
<?php
$name = $_POST['name']
if (isset($name)) {
    echo "u hebt u naam niet ingevuld.";
};
$email = $_POST['email']
if (isset($email)) {
    echo "u hebt u mail niet ingevuld.";
};
$phone = $_POST['phone'];
$call = $_POST['call'];
$subject = $_POST['subject'];
$website = $_POST['website'];
$priority = $_POST['priority'];
$type = $_POST['type'];
$message = $_POST['message'];
$formcontent=" From: $name \n Phone: $phone \n Subject: $subject \n Call Back: $call \n Website: $website \n Priority: $priority \n Type: $type \n Message: $message";
$recipient = "info@rubensky.com";
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");

echo "Thank You!" . " -" . "<a href='form.html' style='text-decoration:none;color:#ff0099;'> Return Home</a>";
?>
 
Ik gok de ; na je accolade. Zei ik al in mijn vorige post.
 
Die ; moet sowieso weg.

Verder kijk je of de variable voor naam en mail bestaat, en dan geef je een foutmelding.

Dat klopt niet ;)
 
Ik kijk toch of die leeg is? (if isset) wat kan ik aanpassen dan. (ik wil het snappen vandaar)
 
Isset kijkt of het bestaat. Niet of het niet bestaat. Je moet dus kijken of het false is. Of liever kijken of de string leeg is, want isset() is niet de juiste manier van valideren.
 
Oke mensen ik ben het aan het leren kan iemand mij vertellen waarom er een fout wordt gegeven op lijn 41 van het formulier?

Code:
<html>
<head>
<title> Mailformulier </title>
</head>
<body>
<?php
ini_set("SMTP", "mail.mijndomein,nl");
ini_set("smtp_port", 26);
ini_set ("sendmail_from", "info@mijnmailadres");
if ($_POST["verzendbutton"] != "verzenden" || !$_POST["naam"] ||
!$_POST["mailadres"] ||
!$_POST["reactie"]) {
?>
<form action="mailform3.php" method= "post">
<?php
if ($_POST["verzendbutton"] && !$_POST["naam"]) {
		echo "<font color=\"red\"> Vul hier uw naam in!</font><br>";
}
?>
Naam: <input type="text" name="naam" value="<?php echo $_POST["naam"]
?>"> <br>
<?php
if ($_POST["verzendbutton"] && !$_POST["mailadres"] ) {
echo "<font color=\"red\"> Vul hier uw mailadres in!</font><br>";
}
?>
E-mail: <input type="text" name="mailadres" value="<?php echo $_POST["mailadres"] ?>"><br>
<?php
if ($_POST["verzendbutton"]  && !$_POST["reactie"]) {
	echo "<font color=\"red\"> Vul hier uw reactie in!</font><br>";
}
?>
Uw reactie <textarea cols="30"rows="4" name="reactie"><?php echo $_POST["reactie"]	?></textarea>
<input type="submit" value="verzenden" name="verzendbutton">
</form>
<?php
} else { 
$boodschap = "Naam: ".$POST["naam"]. "\nCommentaar: ".$_POST["reactie"];
mail($_POST["mailadres"], "Uw reactie van de website", $boodschap);
echo "Bedankt ".$_POST["naam"].
}
?>
</body>
</html>

let op ik heb aan de bovenkant mijn mailadres weggehaald.
 
bekijk eens
PHP:
ini_set("SMTP", "mail.mijndomein.nl");

verder bekijk ook eens
PHP:
$valid_email = filter_input(INPUT_POST, 'email');

gelieve ook php te gebruiken ipv code als je code plaatst in(sublocatie)
 
Laatst bewerkt:
PHP:
if ($_POST["verzendbutton"] != "verzenden" || !$_POST["naam"] ||
!$_POST["mailadres"] ||
!$_POST["reactie"]) {
Wat is dit toch voor antiek gecontroleer?
Kijk eerst met dit of het formulier verstuurd is:
PHP:
<?php
if($_SERVER['REQUEST_METHOD']=="POST") {

En daarna met dit, of iets ingevuld is:
PHP:
if (trim($_POST['name'])=="") {

Oke mensen ik ben het aan het leren kan iemand mij vertellen waarom er een fout wordt gegeven op lijn 41 van het formulier?
Verder is het ook niet overbodig om te zeggen WAT er bij jouw fout gaat? We kunnen uiteindelijk niet zien wat jouw scherm toont. Ook kunnen we niet in de sterren of een glazen bol zien wat jij ziet.
 
Laatst bewerkt:
Mensen ik begin een hoop van jullie te leren en het nu ook stapje voor stapje te begrijpen. volgens mij ben ik op de goede weg maar ik kom nog niet helemaal weg:

ik krijg de volgende fout ( Parse error: syntax error, unexpected '$mail' (T_VARIABLE) mailform3.php on line 12 en heb gebruikt de volgende code:

PHP:
<html>
<head>
<title> Mailformulier </title>
</head>
<body>
<?php
ini_set("SMTP", "mail.mijndomein,nl");
ini_set("smtp_port", 26);
ini_set ("sendmail_from", "info@mijnadres");
if($_SERVER['REQUEST_METHOD']=="POST") {
$name = $_POST['name']
$mail = $_POST['mail'] 
$reactie = $_POST['reactie']
?>
<form action="mailform3.php" method= "post">
<?php
if (trim($_POST['name'])=="") {

		echo "<font color=\"red\"> Vul hier uw naam in!</font><br>";
}
?>
Naam: <input type="text" name="naam" value="<?php echo $_POST["name"]
?>"> <br>
<?php
if (trim($_POST['mail'])=="") {
echo "<font color=\"red\"> Vul hier uw mailadres in!</font><br>";
}
?>
E-mail: <input type="text" name="mailadres" value="<?php echo $_POST["mail"] ?>"><br>
<?php
if (trim($_POST['reactie'])=="") {
	echo "<font color=\"red\"> Vul hier uw reactie in!</font><br>";
}
?>
Uw reactie <textarea cols="30"rows="4" name="reactie"><?php echo $_POST["reactie"]	?></textarea>
<input type="submit" value="verzenden" name="verzendbutton">
</form>
<?php
} else { 
mail($name, $mail, $reactie) or die("Error!");
echo "Thank You!" . " -" . "<a href='form.html' style='text-decoration:none;color:#ff0099;'> Return Home</a>";
}
?>
</body>
</html>
 
Laatst bewerkt:
Je bent op de regels 11, 12 en 13 vergeten de regel af te sluiten met een puntkomma.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan