Archief - contact form

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

ReBirTh

Legacy Member
Misschien dat iemand van de experts hier me eens wil/kan helpen met een probleempje.

Ik heb onderstaande code eens ergens gevonden, en gebruik deze op een site voor een contactformulier. Hij verstuurt de mail zonder problemen, maar om één of andere reden krijg ik nooit de lijn te zien waarin hij zegt dat de mail succesvol verzonden is. Wil iemand me eens zeggen waar precies de fout zit, en wat de mogelijke oplossing is?

PHP:
<HTML>
<HEAD>
</HEAD> 
 
<BODY bgcolor="#4C6260">

<?php
if(isset($_SESSION['contact_gelukt'])){                            // is e-mail verstuurd?

    if($_SESSION['contact_gelukt'] == "yes"){                    // is gelukt?
        unset($_SESSION['contact_gelukt']);
        
        echo '<p>De e-mail is met succes verstuurd.</p>' .NL;
    }
    elseif($_SESSION['contact_gelukt'] == "no"){            // is niet gelukt?
        unset($_SESSION['contact_gelukt']);
        
        echo '<p><strong>De volgende fout heeft zich voorgedaan:</strong></p>' .NL;
        echo '<p>Er heeft zich een probleem voorgedaan bij het versturen van de e-mail</p>' .NL;
        echo '<p>Gelieve op een later tijdstip opnieuw te proberen. Excuses voor het ongemak.</p>' .NL;
    }
}
else{

    if(isset($_POST['contact'])){                                         // is formulier gepost?
        $bFormulier_gepost = TRUE; 
    } 
    else{ 
        $bFormulier_gepost = FALSE; 
    }

    // variabelen uitlezen, of lege variabelen aanmaken
    $sNaam    =   ($bFormulier_gepost ? html_entity_decode(trim($_POST['naam']))    : ""); 
    $sEmail   =   ($bFormulier_gepost ? html_entity_decode(trim($_POST['email']))   : ""); 
    $sBericht =   ($bFormulier_gepost ? html_entity_decode(trim($_POST['bericht'])) : "");

    if($bFormulier_gepost){                                                     // is formulier gepost

        // lege foutvariabelen aanmaken
        $aFouten["naam"]["err"]        = 0;
        $aFouten["email"]["err"]       = 0;
        $aFouten["bericht"]["err"]     = 0;

        // controleren op fouten
        $bFout_gevonden = FALSE;          
        if(strlen($sNaam)==0){ 
            $bFout_gevonden = TRUE; 
            $aFouten["naam"]["err"] = 1; 
            $aFouten["naam"]["err_msg"] = "Gelieve uw naam in te vullen."; 
        } 
        if(strlen($sEmail)==0){ 
            $bFout_gevonden = TRUE; 
            $aFouten["email"]["err"] = 1; 
            $aFouten["email"]["err_msg"] = "Gelieve uw e-mailadres in te vullen."; 
        } 
        elseif(!is_emailadres_geldig($sEmail)){ 
            $bFout_gevonden = TRUE; 
            $aFouten["email"]["err"] = 1; 
            $aFouten["email"]["err_msg"] = "Gelieve een geldig e-mailadres in te vullen.";
        } 
        if(strlen($sBericht)==0){ 
            $bFout_gevonden = TRUE; 
            $aFouten["bericht"]["err"] = 1; 
            $aFouten["bericht"]["err_msg"] = "Gelieve uw bericht in te vullen."; 
        } 
    } 
    else{ 
        $bFout_gevonden = FALSE; 
    }

    if($bFormulier_gepost && !$bFout_gevonden){ 
        // formulier is gepost en geen fouten gevonden

        $to = "*********@mail.com"; // hier komt je eigen e-mailadres 

        $onderwerp = "Reactie op de website www.*********.be"; 

        $headers = "From: ".html2specialchars($sNaam)."<".html2specialchars($sEmail).">\r\n"; 
        $headers .= "X-Sender: <contact@*********.be>\r\n"; 
        $headers .= "Return-Path: <contact@*********.be>\r\n"; 

        $bericht = "Deze mail is verzonden vanuit http://www.*********.be/contact.php\n"; 
        $bericht .= "Naam        : " . html2specialchars($sNaam) . "\n"; 
        $bericht .= "E-mailadres : " . html2specialchars($sEmail) . "\n\n"; 
        $bericht .= html2specialchars($sBericht) . "\n\n\n"; 

        $verzonden = mail($to,$onderwerp,$bericht,$headers);

        if($verzonden){
            $_SESSION['contact_gelukt'] = "yes"; 
            header('Location: http://www.*********.be/contact.php'); 
            exit; 
        } 
        else{
            $_SESSION['contact_gelukt'] = "no"; 
            header('Location: http://www.*********.be/contact.php'); 
            exit; 
        }
    } 
    else{ 
?>
U kan contact met ons opnemen, door het invullen van onderstaand formulier:<BR>
De velden met een sterretje zijn wel verplicht in te vullen!<BR><BR>
<?php
define('NL',"\n");
        if($bFormulier_gepost && $bFout_gevonden){ 
            echo '<h3>Foutmelding!</h3>' .NL; 
            echo $aFouten["naam"]["err"]==1 ? ('<p class="fout">'.$aFouten["naam"]["err_msg"].'</p>'.NL) : ''; 
            echo $aFouten["email"]["err"]==1 ? ('<p class="fout">'.$aFouten["email"]["err_msg"].'</p>'.NL) : ''; 
            echo $aFouten["bericht"]["err"]==1 ? ('<p class="fout">'.$aFouten["bericht"]["err_msg"].'</p>'.NL) : ''; 
        } 
?>
<form action="http://www.*********.be/contact.php" method="post"> 
<table border="0">
	<tr>
		<td><label for="naam"<?php echo (isset($aFouten) && $aFouten["naam"]["err"]==1 ? 'class="fout" ':''); ?>>Naam*:</label></TD>
		<td><input name="naam" id="naam" type="text" maxlength="255" value="<?php echo htmlentities($sNaam); ?>" /></TD>
	</tr>
	<tr>
		<td><label for"email"<?php echo (isset($aFouten) && $aFouten["email"]["err"]==1 ? 'class="fout" ':''); ?>>E-mail* :</label></td>
		<td><input name="email" id="email" type="text" maxlength="255" value="<?php echo htmlentities($sEmail); ?>" /></td>
	</tr>
	<tr>
		<td><label for="bericht"<?php echo (isset($aFouten) && $aFouten["bericht"]["err"]==1 ? 'class="fout" ':''); ?>>Bericht*:</label></td>
		<td><textarea name="bericht" cols="60" rows="12" id="bericht"><?php echo htmlentities($sBericht); ?></textarea></td>
	</tr>
	<tr>
		<td><input name="contact" type="submit" value="Verstuur" /></td>
	</tr>
</table>
</form>    
<?php
    }
    
}

function html2specialchars($str){ 
    $trans_table = array_flip(get_html_translation_table(HTML_ENTITIES)); 
    return strtr($str, $trans_table); 
} 
?>
<?php

function is_emailadres_geldig($email){ 

    return (eregi( 

        '^[-!#$%&\'*+\\./0-9=?A-Z^_`{|}~]+'.      // de gebruikersnaam

        '@'.                                      // het @-teken

        '([-0-9A-Z]+\\.)+' .                       // domeinnaam

        '([0-9A-Z]){2,6}$',                       // top-level domain (TLD) 

        trim($email))); 

}

?>

Ter verduidelijking: ik heb wel wat kennis van html en php, maar ik ben verre van een expert, en dit script heb ik gevonden op een site, en niet zelf gemaakt.

ReBirTh

Legacy Member
yeah, I know, maar ik geef de voorkeur aan dit script, sorry :p
Alleen wil ik het erg graag werkende krijgen, vandaar dus mijn vraag...

GivenToFly

Legacy Member
Ik heb niet alles gecheckt maar het eerste dat opvalt is dat er nergens session_start() staat terwijl je wel sessie-variabelen gebruikt. Zet eens
PHP:
<?php
session_start();
?>
aan het begin van je pagina (nog voor <html> dus).

passero

Legacy Member
Volgens mij krijg je daar gewoon een foutmelding op omdat ge de header probeert te wijzigen nadat ge html put...

Uw eerste lijnen:

PHP:
<HTML> 
<HEAD> 
</HEAD>  
  
<BODY bgcolor="#4C6260">

conflicteren met de header(....) call. Die veroorzaakt gegarandeert een fout.

PHP:
if($verzonden){ 
            $_SESSION['contact_gelukt'] = "yes";  
            header('Location: http://www.*********.be/contact.php');  
            exit;

Oh ja... waarom niet heel de logica van het versturen bovenaan zetten en dan een var bijhouden of het gelukt is of niet. Dan controleer je later in die pagina of die var = "yes" ipv naar u sessie te gaan. Op die manier moet ge ook niet redirecten naar zijn eigen en kan je gewoon op dezelfde page blijven. Lijkt me toch logischer...

ReBirTh

Legacy Member
Intussen heb ik dit nog altijd niet aan het werk gekregen :(
Is er hier niemand die eens uitgebreid de moeite wil nemen om me hier in detail mee te helpen?

passero

Legacy Member
Als je conversaties via PM gaat houden wordt het moeilijk voor anderen om te helpen he...

ReBirTh

Legacy Member
Niet bepaald é, aangezien het gewoon met jou was, maar je blijkbaar niet wil reageren op die pm.

ReBirTh

Legacy Member
yep.
Alleen vermoed ik dat ik ergens een foutje gemaakt heb bij de tip van passero, want ik kreeg dan alleen een leeg scherm te zien. Vandaar dat ik hem een pm gezonden had om te vragen waar m'n fout eventueel zat, maar daar kreeg ik geen reactie op. Ik nu eenmaal niet zo'n expert op dit vlak.

ReBirTh

Legacy Member
volgens dat er hier zoveel webontwikkelaars e.d. zitten, krijg ik hier toch verbazend weinig hulp op een vraag die toch niet zo moeilijk kan zijn. Of schiet iedereen hier pas in actie als er &#8364;'s bij komen kijken?

Squealer

Legacy Member
Post anders nog eens de nieuwste versie. Zeker dat je session_start doet?

Btw, er staat label for"email", dus zonder =

Voor de rest volg ik passero. Ge moet niet met een session of een redirect werken. Gewoon alle logica bovenaan en rond het form checken op success of niet, punt.

Zet eens dit in het begin:
ini_set('display_errors', '1');
error_reporting(E_ALL);

Doe eens phpinfo().
Wat is de waarde van
session.use_cookies
session.use_trans_sid
session.save_handler
Hebt ge write permissies naar session.save_path?

Probeer eens een session_write_close voor uw header

Windows of linux host?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan