PHP formulier checken en spam vrij versturen

Status
Niet open voor verdere reacties.
Er staat 2x deze code:
PHP:
echo $_POST['code'] . ' == ' . $_SESSION['rand_code'];

Namelijk:
PHP:
<?php
function checkEmail($email)
{
    return preg_match('/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i', $email);
}
 
$name = '';
$email = '';
$bericht = '';
 
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo $_POST['code'] . ' == ' . $_SESSION['rand_code']; 
    exit; // Stop met het uitvoeren van de rest
    
    // Controleer of CAPTCHA code overeenkomt
    if($_POST['code'] ==  $_SESSION['rand_code']) {
        $naam = htmlentities($_POST['naam']);
        $email = htmlentities($_POST['email']);
        $bericht = htmlentities($_POST['bericht']);

Moet die eerste niet ook een if statement worden? Hij echo't 'm daar alleen maar, en verder weet ie er niks mee te doen, toch?
 
lijkt mij een logische redenering want daaronder staat exit;
het is niet handig om daaronder nog iets te zetten want dat voert hij nooit meer uit.
dat is dus overbodig dus ik denk het wel. ik weet niet wat de uitkomst dan is.
 
Ik heb nu dit gedaan:

PHP:
<?php
function checkEmail($email)
{
    return preg_match('/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i', $email);
}
 
$name = '';
$email = '';
$bericht = '';
 
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    if($_POST['code'] == $_SESSION['rand_code'] == false) {
        $error = "Foute code.";
    }
	
        $naam = htmlentities($_POST['naam']);
        $email = htmlentities($_POST['email']);
        $bericht = htmlentities($_POST['bericht']);
        
        // Controleer of er lege velden tussen zitten
        if(!empty($_POST['naam']) && !empty($_POST['email']) && !empty($_POST['bericht']) && !empty($_POST['code'])) {
            // Controleer of er een geldig e-mailadres is ingevoerd
            if(checkEmail($email)) {
                // send email
                $to = '{e-mailadres}';
                $subject = 'Contactformulier';
                $msg = "Naam: $naam\n" .
                "E-mail:$email\n" .
                "Bericht: $bericht";
                mail($to, $subject, $msg, 'From:' . $email);
                $accept = "Formulier is verstuurd!";
            }
            else {
                $error = "Ongeldig e-mailadres";
            }
        }
        else {
            $error = "Vul het hele formulier in.";
        }
    }
else {
    $error = 'Er is geen formulier verzonden.';
}
?>

Dan krijg ik de foutmelding:
Parse error: syntax error, unexpected T_IS_EQUAL in C:\xampp\htdocs\BOM\send.php on line 12
Ik mag geen 2x == gebruiken, maar als ik de eerste == verander in &&, dan verstuurd ie het formulier wel als ik de code fout invoer. Hoe kan dat? Ik weet het echt niet meer.
 
Laatst bewerkt door een moderator:
Hij echo't de captcha nu met == erachter.
Oftewel de variabele $_POST['code'] bevat een waarde maar $_SESSION['rand_code'] niet ;)

Niet heel gek want zoals ik al eerder aangaf maak je captcha.php een variabele aan met een heel andere naam:
PHP:
// Regel 9
$_SESSION['random_code'] = $string;

Als je dan vervolgens een variabele opvraagt met de naam $_SESSION['rand_code'] zegt PHP: "Die bestaat niet, dus de waarde is leeg".
Dus wordt dit de vergelijking wanneer de code "ae6aej7" is:
PHP:
// regel 17 in mijn script
if("ae6aej7" ==  null)

Aangezien die waardes niet overeenkomen gaat PHP door naar de ELSE van dat statement en dat is
PHP:
else
{
    $error = "Foute code.";
}
 
Ik heb de variabel gecheckt in captcha.php, maar daar heet ie rand_code.

Mijn send.php is nu als volgt:
PHP:
<?php
function checkEmail($email)
{
    return preg_match('/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i', $email);
}
 
$name = '';
$email = '';
$bericht = '';
 
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    if($_POST['code'] == $_SESSION['rand_code']){
	
        $naam = htmlentities($_POST['naam']);
        $email = htmlentities($_POST['email']);
        $bericht = htmlentities($_POST['bericht']);
        
        // Controleer of er lege velden tussen zitten
        if(!empty($_POST['naam']) && !empty($_POST['email']) && !empty($_POST['bericht']) && !empty($_POST['code'])) {
            // Controleer of er een geldig e-mailadres is ingevoerd
            if(checkEmail($email)) {
                // send email
                $to = '{e-mailadres}';
                $subject = 'Contactformulier';
                $msg = "Naam: $naam\n" .
                "E-mail:$email\n" .
                "Bericht: $bericht";
                mail($to, $subject, $msg, 'From:' . $email);
                
				$accept = "Formulier is verstuurd!";
            } else {
                $error = "Ongeldig e-mailadres";
            }
        } else {
            $error = "Vul het hele formulier in.";
        }
    } else {
		$error = "Onjuiste code";
	}
}
?>

Dan blijft ie foute code zeggen.
 
Laatst bewerkt door een moderator:
Hoe zien captcha.php en contact.php er nu volledig uit?
 
Contact.php:
PHP:
<?php
include('send.php');

session_start();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
  <title>Blik op mest en de rest</title>
  <link rel="stylesheet" media="screen" type="text/css" href="style.css" />
  <link rel="stylesheet" media="screen" type="text/css" href="form.css" />
  <script type="text/javascript" src="js/jquery-1.3.1.min.js"></script>	
  <script type="text/javascript" language="javascript" src="js/jquery.dropdownPlain.js"></script>
</head>
</head>
<body>
	<div id="container">
		<div id="header">
			<img class="logo" src="Images/Logo.png" />
			
			<div class="h-adres">
				Trienke van't Blik<br />
				Mieddyk 52<br />
				9036 LG Menaldum<br />
				mobiel
			</div>
		</div>
		
		<div id="hormenu">
			<ul class="dropdown">
				<li><a href="#">Paard</a>
					<ul class="sub_menu">
						<li><a href="grote_bloedworm.html">Grote bloedworm</a></li>
						<li><a href="kleine_bloedworm.html">Kleine bloedworm</a></li>
						<li><a href="aarsmade.html">Aarsmade</a></li>
						<li><a href="horzellarven.html">Horzellarven</a></li>
						<li><a href="mok.html">Mok</a></li>
						<li><a href="ontworming.html">Ontworming</a></li>
					</ul>
				</li>
				<li><a href="#">Hond</a>
					<ul class="sub_menu">
						<li><a href="#">Wormen</a></li>
						<li><a href="#">Schurft/mijt</a></li>
					</ul>
				</li>
				<li><a href="#">Kat</a>
					<ul class="sub_menu">
						<li><a href="#">Wormen</a></li>
						<li><a href="#">Vlooien</a></li>
					</ul>
				</li>
			</ul>
		</div>
		
		<div id="vermenu">
			<a class="buttonvert" href="index.html">Home</a>
			<a class="buttonvert" href="over_mij.html">Over mij</a>
			<a class="buttonvert" href="#">Nieuw</a>
			<a class="buttonvert" href="opsturen_monster.html">Opsturen monster</a>
			<a class="buttonvert" href="uitslag.html">Uitslag</a>
			<a class="buttonvert" href="tarieven.html">Tarieven</a>
			<a class="buttonvert" href="links.html">Links</a>
			<a class="buttonvert" href="#">Contact</a>
		</div>
		
		<div id="content">
			<h1>Contact</h1>
			<p>
				Je kunt in contact met mij komen via onderstaande gegevens, of vul het formulier hieronder in.<br /><br />
			</p>
			
			<div class="icons">
				<img src="Images/home.gif" width="16" height="16" />
			</div>
			
			<div class="adres">
				<p>
					Trienke van't Blik<br />
					Mieddyk 52<br />
					9036 LG Menaldum<br />
					mobiel
				</p>
			</div>
			
			<br /><br /><br /><br /><br /><br /><br />
			
			<?php if(!empty($error)) echo '<div class="error">'.$error.'</div>'; ?>
			<?php if(!empty($accept)) echo '<div class="accept">'.$accept.'</div>'; ?>
			
			<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
				<label for="naam">Naam*:</label>
				<input class="text" type="text" id="naam" name="naam" /><br />
				<label for="email">E-mail*:</label>
				<input class="text" type="text" id="email" name="email" /><br />
				<label for="bericht">Bericht*:</label>
				<textarea id="bericht" name="bericht"></textarea><br /><br />
				<label for="code">Typ de code:</label>
				<input class="text" type="text" id="code" name="code" /><br />
				<img src="captcha.php" /><br /><br /><br />
				
				Velden met een * zijn verplicht.<br /><br />
				
				<input class="verz" type="submit" value="Verzenden" name="submit" />
			</form>
		</div>
		
		<div id="footer">
				&#169 Blik op mest en de rest
		</div>
	</div>
</body>
</html>

Captcha.php:
PHP:
<?php
	session_start();	
	
	$string = '';
	
	for ($i = 0; $i <5; $i++) {
		$string .= chr(rand(97, 122));
	}
	$_SESSION['rand_code'] = $string;
	
	$dir = 'Fonts/';
	
	$image = imagecreatetruecolor(170, 60);
	$black = imagecolorallocate($image, 0, 0, 0);
	$color = imagecolorallocate($image, 200, 100, 90); // red
	$white = imagecolorallocate($image, 255, 255, 255);
	imagefilledrectangle($image, 0, 0, 399, 99, $white);
	imagettftext ($image, 30, 0, 10, 40, $color, $dir."arial.ttf", $_SESSION['rand_code']);
	
	header("Content-type: image/png");
	imagepng($image);
?>
 
Laatst bewerkt door een moderator:
Draai dit eens om:
PHP:
<?php
include('send.php');
 
session_start();
?>
Naar
PHP:
<?php
session_start();
include('send.php');
?>
 
Jemig!!!!!!!!! Alleen dat omdraaien, en het werkt eindelijk!!!!!!
Ik heb alles getest en hij doet wat ie moet doen!!!

Super, super, super, super en super bedankt!!!!!
 
Als session_start() niet is uitgevoerd kan een $_SESSION-variabele niet gebruikt worden, daarom kon het script de controle niet uitvoeren :)
 
Tsja, stomme fout.
Iemand anders, die ook verstand heeft van php, had dat zo neergezet. Dus nooit weer aangedacht!
Maar hij werkt eindelijk, dankzij jullie hulp!!!

Nogmaals hartstikke bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan