Formulier verzenden via PHP

Status
Niet open voor verdere reacties.
heb het toegevoegd nu moet het dan wel goed beveiligd zijn:
PHP:
<html>
<body>

<?php

if (isset($_REQUEST['telnr']))
// Als telefoonnummer is ingevuld, ga verder

	// controleer telefoonnummer
  
    	if(preg_match("/^[0-9]{2}-[0-9]{8}$/",$_REQUEST['telnr']) OR preg_match("/^[0-9]{3}-[0-9]{7}$/",$_REQUEST['telnr']) OR preg_match("/^[0-9]{4}-[0-9]{6}$/",$_REQUEST['telnr']) OR preg_match("/^[0-9]{10}$/",$_REQUEST['telnr']))
    	{
    		
    		// controleer postcode
    		if (preg_match("/[0-9]{4}[ ]?[a-z]{2}/i", trim($_REQUEST['postcode']))) 
			{
        			
  		// Verstuur email
  
  			// Haal het streepje weg, in de email, tussen het telefoonnummer
  			$telefoon = str_replace('-', '', $_REQUEST['telnr']);
  			// Haal de spatie weg tussen de cijfers en letters postcode
  			$postcode = str_replace(' ', '', $_REQUEST['postcode']);
  
  		// Mail opbouw
  		// Naam van persoon
  		$naam = $_REQUEST['naam'] ;
  		// Onderwerp van de mail
  		$onderwerp = "formulier website";
  		// Het bericht:
  		$bericht = "Naam: " . $_REQUEST['naam']. "\n" .  
  		"Adres: " . $_REQUEST['straat'] . "\n" .
  		"Postcode: " . $postcode . "\n" .
  		"Woonplaats: " . $_REQUEST['woonplaats'] . "\n" .
  		"Geboorte datum: " . $_REQUEST['gebdat'] . "\n" .
  		"Telefoonnummer: " . $telefoon . "\n" .
  		"Dit is mijn: " . $_REQUEST['mijnzwangerschap'] . " zwangerschap" . "\n" .
  		"1ste dag laatste menstruatie: " . $_REQUEST['menstruatie'] . "\n" .
  		"Naam verzekeringsmaatschappij: " . $_REQUEST['verzekeringsmaastschap'] . "\n" .
  		"Verzekeringsnummer: " . $_REQUEST['verzekeringsnummer'] . "\n" .
  		"BSN-nummer: " . $_REQUEST['bsn'] . "\n" .
  		"Mijn huisarts: " . $_REQUEST['huisarts'] ;
  		// Gegevens om te versturen
  		 while (strpos($naam, "\r\n") !== false)
		 {
       $naam = str_replace("\r\n", "", $naam);
		 } 
 		mail("HIERUW@ADRES", "$onderwerp",
  		$bericht, "From:" . $naam);
  		// Melding na succesvol verzonden van de mail 
  		echo "Bedankt voor het invullen. U krijgt binnen 5 werkdagen bericht.";
  			}
  			// melding geen geldige postcode
  			else echo("Geen geldige postcode ingevoerd! <a href='mailform.php'>Probeer opnieuw.</a>");
    	}
    	else
    	{
      // melding geen geldig telefoon nummer
      echo("Geen geldig telefoonnummer! <a href='mailform.php'>Probeer het opnieuw.</a><br>");
      }    
  

else
//Als telnr niet is ingevuld, show formulier  
{
  echo "<form method='post' action='mailform.php'>
   <p> <span class='brood'>
          <label class='brood'>
            Naam:
<input name='naam' type='text' id='naam' size='50' />
          </label>
        </span></p>
  <p> <span class='brood'>
          <label class='brood'>Adres:
            <input name='straat' type='text' id='ad_post_woonplaats' value='Straatnaam + nummer' size='50' />
          </label>
        </span></p>
        <p> <span class='brood'>
          <label class='brood'>Postcode:
            <input name='postcode' type='text' id='ad_post_woonplaats' value='1234AB' size='7' maxlength='7' />
          </label>
        </span></p>
        <p> <span class='brood'>
          <label class='brood'>Woonplaats:
            <input name='woonplaats' type='text' id='ad_post_woonplaats' value='woonplaats' size='50' />
          </label>
        </span></p>
        <p> <span class='brood'>
          <label class='brood'>Geboorte datum:
            <input name='gebdat' type='text' id='gebdat' value='dd/mm/jjjj' size='12' />
          </label>
        </span></p>
        <p> <span class='brood'>
          <label class='brood'>Telefoonnummer:
            <input name='telnr' type='text' id='telnr' size='8' maxlength='11' />
          </label>
        </span></p>
        <p><span class='brood'>Dit is mijn </span> <span class='brood'>
          <input name='mijnzwangerschap' type='text' id='mijnzwangerschap' size='8' maxlength='8' />
        </span><span class='brood'> zwangerschap.</span></p>
        <p> <span class='brood'>
          <label class='brood'> 1ste dag laatste menstruatie:
            <input name='menstruatie' type='text' id='menstruatie' value='dd/mm/jjjj' size='12' />
          </label>
        </span></p>
        <p class='brood'> Naam verzekeringmaastschappij:
          <label class='brood'>
            <input name='verzekeringsmaastschap' type='text' id='verzekeringsmaastschap' size='50' />
          </label>
        </p>
        <p><span class='brood'>
          <label class='brood'>
            <input name='verzekeringsnummer' type='text' id='verzekeringsnummer' value='verzekeringnummer' size='30' maxlength='20' />
          </label>
        </span></p>
        <p><span class='brood'>
          <label class='brood'>BSN-nummer:
            <input name='bsn' type='text' id='bsn' size='12' maxlength='10' />
          </label>
        </span></p>
        <p><span class='brood'>
          <label class='brood'>Mijn huisarts is:</label>
        </span><span class='brood'>
          <label class='brood'>
  <input name='huisarts' type='text' id='bsn2' size='45' />
          </label>
        </span></p>
        <p>
          <input name='button' type='submit' class='brood' id='button' value='Verzenden' />
          <input name='button2' type='reset' class='brood' id='button2' value='Alles wissen' />
        </p>
        <p><span class='brood'>Na het invullen+ verzenden van dit formulier wordt je   binnen           5 werkdagen gebeld voor het maken van een afspraak.</span>      </p>
  </form>";
  }
?>

</body>
</html>
 
Meestal is het verstandig om echt $_POST te gebruiken en ook daadwerkelijk te controleren of er gepost is ($_SERVER['REQUEST_METHOD'])

Betreffende het mail gedeelte: ik verwacht dat deze altijd in de spam zal komen aangezien hij niet vanaf een e-mail adres wordt verstuurd. (puur een naam)
Doorgaans gebruik ik mede hierom bestaande classes; zij hebben er al uitgebreid over nagedacht en zijn de headers ook veilig. (de meestgebruikte zijn swiftmailer en PHP Mailer)

@Supersnail; \n is ook al voldoende voor een injectie. Jouw snippet zal dus niet voldoen.
Daarnaast zijn er nog andere non-ascii characters waarmee je kunt injecteren, lastig om die zo even te verwijderen (grote kans dat je er 1 vergeet)
 
Laatst bewerkt:
Heb nu inplaats van request POST gebruikt weer iets veiliger :)
PHP:
<html>
<body>

<?php

if (isset($_POST['telnr']))
// Als telefoonnummer is ingevuld, ga verder

	// controleer telefoonnummer
  
    	if(preg_match("/^[0-9]{2}-[0-9]{8}$/",$_POST['telnr']) OR preg_match("/^[0-9]{3}-[0-9]{7}$/",$_POST['telnr']) OR preg_match("/^[0-9]{4}-[0-9]{6}$/",$_POST['telnr']) OR preg_match("/^[0-9]{10}$/",$_POST['telnr']))
    	{
    		
    		// controleer postcode
    		if (preg_match("/[0-9]{4}[ ]?[a-z]{2}/i", trim($_POST['postcode']))) 
			{
        			
  		// Verstuur email
  
  			// Haal het streepje weg, in de email, tussen het telefoonnummer
  			$telefoon = str_replace('-', '', $_POST['telnr']);
  			// Haal de spatie weg tussen de cijfers en letters postcode
  			$postcode = str_replace(' ', '', $_POST['postcode']);
  
  		// Mail opbouw
  		// Naam van persoon
  		$naam = $_POST['naam'] ;
  		// Onderwerp van de mail
  		$onderwerp = "formulier website";
  		// Het bericht:
  		$bericht = "Naam: " . $_POST['naam']. "\n" .  
  		"Adres: " . $_POST['straat'] . "\n" .
  		"Postcode: " . $postcode . "\n" .
  		"Woonplaats: " . $_POST['woonplaats'] . "\n" .
  		"Geboorte datum: " . $_POST['gebdat'] . "\n" .
  		"Telefoonnummer: " . $telefoon . "\n" .
  		"Dit is mijn: " . $_POST['mijnzwangerschap'] . " zwangerschap" . "\n" .
  		"1ste dag laatste menstruatie: " . $_POST['menstruatie'] . "\n" .
  		"Naam verzekeringsmaatschappij: " . $_POST['verzekeringsmaastschap'] . "\n" .
  		"Verzekeringsnummer: " . $_POST['verzekeringsnummer'] . "\n" .
  		"BSN-nummer: " . $_POST['bsn'] . "\n" .
  		"Mijn huisarts: " . $_POST['huisarts'] ;
  		// Gegevens om te versturen
  		 while (strpos($naam, "\r\n") !== false)
		 {
       $naam = str_replace("\r\n", "", $naam);
		 } 
 		mail("ramiro.lips@hotmail.com", "$onderwerp",
  		$bericht, "From:" . $naam);
  		// Melding na succesvol verzonden van de mail 
  		echo "Bedankt voor het invullen. U krijgt binnen 5 werkdagen bericht.";
  			}
  			// melding geen geldige postcode
  			else echo("Geen geldige postcode ingevoerd! <a href='mailform.php'>Probeer opnieuw.</a>");
    	}
    	else
    	{
      // melding geen geldig telefoon nummer
      echo("Geen geldig telefoonnummer! <a href='mailform.php'>Probeer het opnieuw.</a><br>");
      }    
  

else
//Als telnr niet is ingevuld, show formulier  
{
  echo "<form method='post' action='mailform2.php'>
   <p> <span class='brood'>
          <label class='brood'>
            Naam:
<input name='naam' type='text' id='naam' size='50' />
          </label>
        </span></p>
  <p> <span class='brood'>
          <label class='brood'>Adres:
            <input name='straat' type='text' id='ad_post_woonplaats' value='Straatnaam + nummer' size='50' />
          </label>
        </span></p>
        <p> <span class='brood'>
          <label class='brood'>Postcode:
            <input name='postcode' type='text' id='ad_post_woonplaats' value='1234AB' size='7' maxlength='7' />
          </label>
        </span></p>
        <p> <span class='brood'>
          <label class='brood'>Woonplaats:
            <input name='woonplaats' type='text' id='ad_post_woonplaats' value='woonplaats' size='50' />
          </label>
        </span></p>
        <p> <span class='brood'>
          <label class='brood'>Geboorte datum:
            <input name='gebdat' type='text' id='gebdat' value='dd/mm/jjjj' size='12' />
          </label>
        </span></p>
        <p> <span class='brood'>
          <label class='brood'>Telefoonnummer:
            <input name='telnr' type='text' id='telnr' size='8' maxlength='11' />
          </label>
        </span></p>
        <p><span class='brood'>Dit is mijn </span> <span class='brood'>
          <input name='mijnzwangerschap' type='text' id='mijnzwangerschap' size='8' maxlength='8' />
        </span><span class='brood'> zwangerschap.</span></p>
        <p> <span class='brood'>
          <label class='brood'> 1ste dag laatste menstruatie:
            <input name='menstruatie' type='text' id='menstruatie' value='dd/mm/jjjj' size='12' />
          </label>
        </span></p>
        <p class='brood'> Naam verzekeringmaastschappij:
          <label class='brood'>
            <input name='verzekeringsmaastschap' type='text' id='verzekeringsmaastschap' size='50' />
          </label>
        </p>
        <p><span class='brood'>
          <label class='brood'>
            <input name='verzekeringsnummer' type='text' id='verzekeringsnummer' value='verzekeringnummer' size='30' maxlength='20' />
          </label>
        </span></p>
        <p><span class='brood'>
          <label class='brood'>BSN-nummer:
            <input name='bsn' type='text' id='bsn' size='12' maxlength='10' />
          </label>
        </span></p>
        <p><span class='brood'>
          <label class='brood'>Mijn huisarts is:</label>
        </span><span class='brood'>
          <label class='brood'>
  <input name='huisarts' type='text' id='bsn2' size='45' />
          </label>
        </span></p>
        <p>
          <input name='button' type='submit' class='brood' id='button' value='Verzenden' />
          <input name='button2' type='reset' class='brood' id='button2' value='Alles wissen' />
        </p>
        <p><span class='brood'>Na het invullen+ verzenden van dit formulier wordt je   binnen           5 werkdagen gebeld voor het maken van een afspraak.</span>      </p>
  </form>";
  }
?>

</body>
</html>
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan