Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

mailer php werkt niet

teacher
17 antwoorden
  • beste mensen,
    Ik kom er even niet meer uit…
    ik heb een formulier dat de volgende foutmelding geeft.

    Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/webquest/test/mailer.php:8) in /www/htdocs/webquest/test/mailer.php on line 60

    In de foutmelding zie ik :8 staan wat ik niet kan thuisbrengen

    Het zelfde script heb ik ergens anders wel draaiende gekregen. Wat zie ik over het hoofd?

    Mailer php:[quote:614c9afc6c]<!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>
    <!– Copyright 2005 Macromedia, Inc. All rights reserved. –>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>email verzonden</title>
    <link rel="stylesheet" href="css/mm_spa.css" type="text/css" />
    <style type="text/css">
    <!–
    #apDiv1 {
    position:absolute;
    left:325px;
    top:113px;
    width:450px;
    height:375px;
    z-index:1;
    }
    .stijl1 {
    color: #FF6600;
    font-style: italic;
    font-weight: bold;
    font-size: medium;
    }
    –>
    </style>

    </head>

    <body>
    <?

    /* Form Mailer Program */

    /* Edit HTML at bottom of script for HTML output */

    /* 2000 YOA/LSYF/YoAi */



    $errorpage = "error.htm";

    $mailto = "mijn@mailadres.nl";

    $required = array("subject","aanhef","naam","adres","no","postcode","plaats","telefoon","email","vraag"); // what do you wish to require?



    // edit below this line at your own risk



    $n = 0;

    do {

    $r = $required[$n];

    if(!$$r) {

    print Header("Location: $errorpage");

    exit;

    }

    $n++;

    } while ($n != count($required));



    $a = urldecode($QUERY_STRING);

    $a = str_replace("&","

    ",$a);

    $a = str_replace("=",": ",$a);

    $a = str_replace("@","@",$a);

    mail($mailto,$HTTP_GET_VARS["subject"],$a,"From: $mailto");

    ?>



    <p>&nbsp;</p>

    <p>&nbsp;</p>

    <blockquote><table width="79%" border="0" cellspacing="0" cellpadding="0">

    <tr>

    <td><font size="+1"><strong class="subHeader"><font size="+2">Dank voor uw email, u ontvangt

    zo spoedig mogelijk bericht.</font></strong><font size="+2"></font> </font> </td>

    </tr>

    </table></blockquote>

    </body>
    </html>
    [/quote:614c9afc6c]

    formulier: (deel van de pagina, daarboven staan css en nodige blabla voor de opbouw van de pagina)
    [quote:614c9afc6c]<table width="700">
    <form action="mailer.php" method="get">
    <input type="hidden" value="vraag vanaf de website"

    name="subject" />

    <tr class="bodyText">Wenst u meer informatie, vul dan onderstaand formulier in en klik op verzenden.<br />
    </tr>
    <tr>
    <td width="138" height="25"><div align="right">
    <input type="radio" name="aanhef" value="Dhr." checked="checked" />
    Dhr.
    <input type="radio" name="aanhef" value="Mevr." />
    Mevr.&nbsp;</div></td>
    <td width="371"><input maxlength="40" size="40" name="naam" />
    </td>
    </tr>
    <tr>
    <td><div align="right">straat en huisnummer&nbsp;</div></td>
    <td><input maxlength="40" size="40" name="adres" />
    &nbsp; no:
    <input type="text" name="no" size="10" />
    </td>
    </tr>
    <tr>
    <td><div align="right">postcode en plaats&nbsp;</div></td>
    <td><input maxlength="10" size="10" name="postcode" />
    <input type="text" name="plaats" size="45" /></td>
    </tr>
    <tr>
    <td><div align="right">telefoon&nbsp;</div></td>
    <td><input maxlength="40" size="40" name="telefoon" /></td>
    </tr>
    <tr>
    <td><div align="right">email&nbsp;</div></td>
    <td><input maxlength="40" size="40" name="email" /></td>
    </tr>
    <tr>
    <td><div align="right">vraag&nbsp;</div></td>
    <td rowspan="2"><textarea name="vraag" cols="40" rows="10"></textarea></td>
    </tr>
    <tr>
    <td>&nbsp;</td>
    </tr>
    <tr>
    <td><input type="submit" value="verzend" /></td>
    </tr>
    </form>
    </table>
    <p>&nbsp;</p>

    <p>&nbsp;</p>

    <br /></td>
    </tr>
    </table>
    [/quote:614c9afc6c]
    Alvast dank voor het meedenken
    Katrien
  • headers already sent[quote:ce89890c6b]

    Als je dit in Google in geeft, krijg je uitgebreide uitleg over wat er mis is met je script. :wink: [/quote:ce89890c6b]
  • Ik vind dit nogal een rare constructie:
    [code:1:54daaf8132]print Header("Location: $errorpage");[/code:1:54daaf8132]
    Misschien dat daar het probleem zit? ;)

    Uitleg: print() is output naar de client, daarna kan header() waarschijnlijk niet meer aangeroepen worden, al zou je verwachten dat laatstgenoemde eerst verwerkt zou worden. Hoe dan ook is het een rare constructie. Ik neem aan dat je het allemaal al wist en je er gewoon overheen gelezen hebt, maar voor de zekerheid…

    - Bas
  • dank voor de reactie, ik blijf proberen.
    dit op non actief print Header("Location: $errorpage");
    geeft geen foutmelidng meer maar ook geen binnekomende email….
  • Je kúnt natuurlijk gaan voor de moeilijke weg, maar als je de php niet begrijpt, waarom dan een script waarin niet te volgen is wat er allemaal gebeurt ?

    Dit script werkt, even je emailadres en website aanpassen:

    <?php

    $submit=$_POST['submit'];
    $c = $_SERVER['REMOTE_ADDR']; /* ipadres van degene waar de website op het scherm verschijnt */
    $naam=htmlspecialchars($_POST['naam']);
    $emailadres=htmlspecialchars($_POST['emailadres']);
    $onderwerp=htmlspecialchars($_POST['onderwerp']);
    $bericht=$_POST['bericht'];

    if ($submit=='')
    {
    $naam='';
    $emailadres='';
    $onderwerp='';
    $bericht='';

    echo '<HTML><HEAD><TITLE>Blue Peter</TITLE><meta name="keywords">';
    echo '</HEAD><body bgcolor="#FFFEE9" background="backgrd.jpg"><br><br>';
    echo '<center> <FORM action="contact.php" method="POST"> <table border=0>';
    echo '<tr><td ><font color="#0000CC">Naam:&nbsp;&nbsp;</font></td>';
    echo '<td ><input type="text" name="naam" size=54 value="'.$naam.'"></td>';
    echo '</tr><tr>';
    echo '<td ><font color="#0000CC">Emailadres:&nbsp;&nbsp;</font></td>';
    echo '<td><input type="text" name="emailadres" size=54 value="'.$emailadres.'"></td>';
    echo '</tr><tr>';
    echo '<td ><font color="#0000CC">Onderwerp:&nbsp;&nbsp;</font></td>';
    echo '<td><input type="text" name="onderwerp" size=54 value="'.$onderwerp.'"></td>';
    echo '</tr><tr><td height=40></td><td></td></tr><tr><td colspan=2>';
    echo ' <font color="#0000CC">Bericht:</font><br>';
    echo '<textarea class="bericht" name="bericht" cols=70 rows=7 >'.$bericht.'</textarea><br><br>';
    echo ' <INPUT type="submit" name="submit" value="Verzend het bericht"></td></tr>';
    echo '</table></FORM></center> </BODY> </HTML>';
    }
    elseif ($naam==''||$emailadres==''||$onderwerp==''||$bericht=='')
    {
    echo '<HTML><HEAD><TITLE>Blue Peter</TITLE><meta name="keywords" content=""></HEAD>';
    echo '<body bgcolor="#FFFEE9" background="backgrd.jpg">';
    echo '<br><br><center><font size="5" color="red">U heeft niet alles ingevuld</font></center><br><br>';
    echo ' <center><FORM action="contact.php" method="POST"> <table border=0>';
    echo '<tr><td ><font color="#0000CC">Naam:</font></td><td>';
    echo '<input type="text" name="naam" value="'.$naam.'"></td></tr>';
    echo '<tr><td ><font color="#0000CC">Emailadres:</font></td><td>';
    echo '<input type="text" name="emailadres" value="'.$emailadres.'">';
    echo '</td></tr>';
    echo '<tr><td ><font color="#0000CC">Onderwerp:</font></td><td>';
    echo '<input type="text" name="onderwerp" value="'.$onderwerp.'">';
    echo '</td></tr><tr><td colspan=2>';
    echo '<font color="#0000CC">Bericht:</font><br>';
    echo '<textarea class="bericht" name="bericht" cols=70 rows=7 >'.$bericht.'</textarea><br><br>';
    echo '<INPUT type="submit" name= "submit" value="Verzend het bericht"></td>';
    echo '</tr></table></FORM></center> </BODY> </HTML>';

    }
    elseif (ereg("[A-Za-z0-9_-]+([\.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([\.]{1}[A-Za-z0-9-]+)+",$emailadres))
    {
    $msg=' naam: '.$naam.' - emailadres: '.$emailadres.' - bericht: '.$bericht;

    $recipient="jouwmail_adres.nl";

    $recipient = str_replace("_", "@", $recipient); /* spam beveiliging, hier de invoer omzetten naar een correct emailadres met@ ipv _ */
    $subject=$onderwerp;

    $mailheaders .= "From: Website_Antieke_klokken
    ";
    $mailheaders .= 'Reply-To: '.$emailadres;
    //send the mail
    mail($recipient, $subject, $msg, $mailheaders);
    echo '<br><br><center><font size="5" color="blue"> Bericht is verzonden</font></center>';
    echo'<meta HTTP-EQUIV="REFRESH" content="2; url=http://jouw website"><body bgcolor="#FFFEE9" background="backgrd.jpg">';
    }
    else {
    echo '<HTML><HEAD><TITLE>Blue Peter</TITLE><meta name="keywords" content=""></HEAD>
    <body bgcolor="#FFFEE9" background="backgrd.jpg">';
    echo '<br><br><center><font size="5" color="red"> Emailadres is niet goed</font></center><br><br>';
    echo '<center> <FORM action="contact.php" method="POST"> <table border=0>
    <tr><td ><font color="#0000CC">Naam:</font></td><td >';
    echo '<input type="text" name="naam" value="'.$naam.'"></td></tr>';
    echo '<tr><td ><font color="#0000CC">Emailadres:</font></td><td>';
    echo '<input type="text" name="emailadres" value="'.$emailadres.'">';
    echo '</td></tr>';
    echo '<tr><td ><font color="#0000CC">Onderwerp:</font></td><td>';
    echo '<input type="text" name="onderwerp" value="'.$onderwerp.'">';
    echo '</td></tr><tr><td colspan=2>';
    echo '<font color="#0000CC">Bericht:</font><br>';
    echo '<textarea class="bericht" name="bericht" cols=70 rows=7 >'.$bericht.'</textarea><br><br>';
    echo '<INPUT type="submit" name= "submit" value="Verzend het bericht"></td>';
    echo '</tr></table></FORM></center> </BODY> </HTML>';
    }


    ?>

    [code:1:f11ba6e63d][/code:1:f11ba6e63d]
  • Rumaro bedankt voor je berichtje .
    Het formulier kaal werkt in ieder geval. waarom is de afzender acamar.eatserver.nl
    Enne…. ik begrijp nog steeds niet waarom 'mijn' script op de ene website wel (http://www.cloin.nl/contactformulier.html) en op de andere (http://www.webquestion.nl/test/contactformulier.html) niet werkt. (zelfde host)
    Dat triggert me nog steeds.
  • Misschien dat er verwijzingen in staan die niet overeenkomen ?

    De ene staat namelijk in de root en de andere in test/
  • helaas, maakt niet uit, beide getest.
    vreemd ik heb gisteren uitgebreid geantwoord maar vind het hier niet terug.
    Ook moet ik telkens opnieuw inloggen ( ja ik heb aangevinkt)

    weird.. de pc blijft voor mij raadsels houden ;-)
  • [quote:65b9c7b433] waarom is de afzender acamar.eatserver.nl[/quote:65b9c7b433]

    Is goed dat je dat nog even aanhaalt, dat moet ik zelf ook nog even aanpassen.

    Het is het adres van je server.
  • [quote:8b05f7d3a1="katrien"]Rumaro bedankt voor je berichtje .
    Het formulier kaal werkt in ieder geval. waarom is de afzender acamar.eatserver.nl
    Enne…. ik begrijp nog steeds niet waarom 'mijn' script op de ene website wel (http://www.cloin.nl/contactformulier.html) en op de andere (http://www.webquestion.nl/test/contactformulier.html) niet werkt. (zelfde host)
    Dat triggert me nog steeds.[/quote:8b05f7d3a1]
    het kan zijn dat global variables aanstaat op die ene server waardoor het wel werkt en op de ander uit. Overigens zou dit ivm veiligheid altijd uit moeten staan. Ik haal dit uit het feit dat $QUERY_STRING gewoonlijk niet zo beschikbaar is. Het is maar n gok trouwens.
    Overigens getuigt het script niet van een schoonheid in programmeren en zijn betere scripts (de besten zijn meestal in de vorm van classes, naar mijn mening) overal gratis verkrijgbaar.
  • Kan wel zijn, maar de mijne werkt in ieder geval. :roll:
  • Ik zet altijd ob_start() boven aan mijn pagina, dan is het probleem opgelost…
  • ob_start() schijnt niet altijd de beste weg te zijn.
    Wel de snelste, maar niet de beste.
  • [quote:cc7e62c3f1="katrien"]dank voor de reactie, ik blijf proberen.
    dit op non actief print Header("Location: $errorpage");
    geeft geen foutmelidng meer maar ook geen binnekomende email….[/quote:cc7e62c3f1]De juiste conclusie zal dan waarschijnlijk zijn dat er zich een foutmelding voordoet, ofwel [i:cc7e62c3f1]!$$r[/i:cc7e62c3f1] is [i:cc7e62c3f1]true[/i:cc7e62c3f1]. Daarom sluit ik me bij marientje aan, wat zij zegt lijkt me inderdaad de reden van je probleem. Ook ik vind overigens dat global vars altijd uit moeten staan.

    [b:cc7e62c3f1]Edit:[/b:cc7e62c3f1] Kan het probleem anders niet gewoon liggen in het feit dat je twee maal een dollarteken ($$) hebt staan? Misschien helpt het als je dat vervangt door [i:cc7e62c3f1]$_GET[$r][/i:cc7e62c3f1] of hoe je ook aan de variabelen komt.
    [quote:cc7e62c3f1="koenbrouwer"]Ik zet altijd ob_start() boven aan mijn pagina, dan is het probleem opgelost…[/quote:cc7e62c3f1]Hoewel ob_start() voor bepaalde toepassingen heel geschikt is, wordt het helaas te pas en te onpas gebruikt, meestal als lapmiddel voor het gebrek aan programmeerkwaliteiten. Het feit dat je opent met [i:cc7e62c3f1]"Ik zet altijd …"[/i:cc7e62c3f1] bevestigt dit een beetje. Tip: gebruik het niet. Dit zeg ik niet om je af te kraken, maar omdat ik denk dat je ermee geholpen bent als je weet dat het geen goede benadering van een probleem als dit is.

    - Bas
  • Nou het komt eigenlijk wel een beetje zo over.

    Ik kan prima programmeren en als het moet bouw ik zo een verbeterd PHPBB3 forum na, alleen het feit dat ik "altijd" ob_start() bovenaan mijn pagina plaats maakt dat het werk, en ik zou niet weten hoe het anders ook zou werken. Maar ik sta open voor tips en mensen die weten hoe het wel werk, kan nog een hoop leren.
  • Toch ben ik het met Bas eens.

    Ik ben ook tegen dingen aan gelopen dat ik dacht dat het echt niet anders kon dan met start_ob().
    En zie: Wat ik tot nu toe gemaakt heb draait ZONDER start_ob()
    Je moet even creatief zijn, maar hey, je bent webmaster of niet. :lol:

    Leuk dat je opschept dat jij zo een forum in elkaar draait, maar je weerspreekt je zelf behoorlijk.
    Juist een goede programmeur zal namelijk NOOIT plakbandscript gebruiken.

    Het is hetzelfde als met CSS ipv frames: frames is zo lekker makkelijk, maar nu ik CSS kan/ken, voor mij geen frames meer !. :D

    Dus hup: wees creatief en bedenk een omweg waarbij je start_ob() kunt vergeten.
  • [quote:ca208d7fd5="BasHamar"]De juiste conclusie zal dan waarschijnlijk zijn dat er zich een foutmelding voordoet, ofwel [i:ca208d7fd5]!$$r[/i:ca208d7fd5] is [i:ca208d7fd5]true[/i:ca208d7fd5]. Daarom sluit ik me bij marientje aan, wat zij zegt lijkt me inderdaad de reden van je probleem. Ook ik vind overigens dat global vars altijd uit moeten staan.
    [/quote:ca208d7fd5]

    Allereerst wilik toch even zeggen dat ik een hij ben.

    !$$r is ok in dit script. Wat er gebeurt:

    $r neemt een van de waarden aan die in de array $required zit.
    $$r neemt zodoende achter elkaar de waarde aan van $subject, $aanhef etc.
    met !$$r kan je (op een simpele manier) testen of die variabele een waarde heeft (niet-leeg, niet-null, niet-0 etc)

    Nogmaals, dit script is wat mij betreft ver verouderd. Het gaat in ieder geval uit van GlobalVars, iets wat uit zou moeten staan. Verder zie ik $QUERY_STRING (gebruik $_SERVER['QUERY_STRING']), ik zie $HTTP_GET_VARS (gebruik $_GET), de data wordt met GET verstuurd (ik zou hier POST gebruiken maar daar valt nog over te discussieren), de bovenstaande check of velden zijn ingevuld is ontoereikend en (dus) onveilig en er wordt ook nog niet een gepaste foutmelding gegeven maar naar een foutpagina geredirect.

    Mijn conclusie (absoluut niet beledigend bedoeld en puur met de intentie om je op een goede weg te helpen om samen het web beter te maken): gooi dit script weg, zoek iets op internet wat wel werkt en beter aan standaarden voldoet en/of verdiep je meer in PHP, webdesign, -technieken, -toegankelijkheid en -richtlijnen.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.