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

Hoe kun je formulier input controleren

Anoniem
None
5 antwoorden
  • Om te voorkomen dat mijn formulier door spammers wordt misbruikt wil ik bepaalde tekens en lettercombinaties niet toestaan in de invoer-velden. Bijvoorbeeld @, boundary en bcc.

    Ik heb dat als volgt geprobeerd:[code:1:3fd2411677]
    if(preg_match("/@/",$bericht)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }

    if(preg_match("/bcc/",$bericht)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }
    if(preg_match("/boundary=/",$bericht)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }[/code:1:3fd2411677]

    maar dat gaat niet goed…. Als je bijvoorbeeld invult "dit is een @ verboden teken" wordt het formulier toch verstuurt. Het formulier geeft een foutmelding als alléén het @ wordt ingevuld en niet als er ook tekst wordt toegevoegd.

    Kun je op een andere manier de input controleren op bepaalde tekens of lettercombinaties?
  • Hoewel je voor dit soort simpele vergelijkingen beter stristr kunt gebruiken, zou dit in principe moeten werken. Maar dit alleen is natuurlijk niet genoeg. Hoe gaat het script verder? Controleer je op de inhoud van $msg ? Gaat dat wel goed?

    [code:1:ea8d7aba54]
    <?php
    $s = 'bla @ bla';
    echo preg_match("/@/", $s);
    ?>
    [/code:1:ea8d7aba54]

    hier komt bij mij gewoon true of 1 uit.
  • Ik denk dat je het hele script even moet zien:


    [code:1:050c8ed222]<?php


    $admin_mail="info@mijnsite.nl";
    $your_name_msg="Uw naam:";
    $your_email_msg="email-adres:";
    $yoursubject="Vraag aan vereniging";
    $your_telefoon_msg="Telefoonnummer:";
    $your_message_msg="Uw vraag:";
    $send_copy_msg="Stuur mij een kopie";
    $fill_msg="<p>&nbsp;<br>Contact opnemen met vereniging:</p><br>
    <p>&nbsp;<br>
    ";
    $thank_you_msg="Wij hebben uw bericht ontvangen en geven zo spoedig mogelijk antwoord.";
    $your_name_error="Fout: U hebt geen naam ingevuld.";
    $your_email_error="Fout: U hebt geen emailadres ingevuld.";
    $your_subject_error="Fout: U hebt geen onderwerp ingevuld.";
    $your_telefoon_error="Fout: U hebt geen telefoonnummer ingevuld.";
    $geen_verboden_tekens="Fout: verboden tekens.";
    //$your_message_error="Fout: U hebt geen bericht ingevuld.";
    $send_message_submit="Verstuur";

    $msg=$fill_msg;
    $tabadd=true;
    $tabthank=false;
    $black="#000000";
    $red="#ff0000";


    if($send){

    if(empty($yourname)){
    $msg=$your_name_error;
    $font_c=$red;
    }

    if(empty($yourtelefoon)){
    $msg=$your_telefoon_error;
    $font_c=$red;
    }

    /*if(empty($bericht)){
    $msg=$your_message_error;
    $font_c=$red;
    }
    */

    if(!preg_match("/@/",$youremail)){
    $msg=$your_email_error;
    $fontc=$red;
    }

    if(preg_match("/@/",$yourname)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }

    if(preg_match("/@/",$yourtelefoon)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }

    if(preg_match("/@/",$bericht)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }

    if(preg_match("/bcc/",$bericht)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }
    if(preg_match("/boundary=/",$bericht)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }
    if(preg_match("/errors-to/",$bericht)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }


    if(preg_match("/mime/",$bericht)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }
    if(preg_match("/x-mailer/",$bericht)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }
    if(preg_match("/charset/",$bericht)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }

    if(preg_match("/Content-Type/",$bericht)){
    $msg=$geen_verboden_tekens;
    $fontc=$red;
    }


    else if( ($yourtelefoon) && ($yoursubject) && ($youremail) && ($yourname) && (preg_match("/@/",$youremail))){
    $mail_msg="Beste $yourname

    Naar aanleiding van uw bezoek aan www.mijnsite.nl hebt u een vraag gesteld.

    Wij hebben de volgende gegevens van u ontvangen:


    Naam: $yourname
    Email: $youremail
    Telefoon: $yourtelefoon
    Uw vraag: $bericht

    Uw vraag wordt zo spoedig mogelijk door ons beantwoord.

    Met vriendelijke groet,
    De vereniging

    ____________________________________
    De vereniging
    internet: www.mijnsite.nl
    email: info@mijnsite.nl
    ____________________________________
    ";
    $send_mail= mail ($admin_mail, $yoursubject, $mail_msg, "From: $youremail");
    if(!empty($copy)){
    $send_mail_copy= mail ($youremail, $yoursubject, $mail_msg, "From: $youremail");
    }
    $tabadd=false;
    $tabthank=true;
    $msg=false;
    }
    }


    ?>

    // en dan het formulier:

    <form action=…..>
    < alle tables en formfields…>

    met o.a:
    <tr>
    <td width="100" align="left" valign="top"><?php echo"$your_message_msg";?></td>
    <td width="250"><textarea name="yourmsg" cols="50" rows="8" wrap="VIRTUAL"><?php echo "$bericht"; ?></textarea></td>
    </tr>
    </form[/code:1:050c8ed222]





  • je controleert helemaal niet op de inhoud van msg :wink:

    OF: alleen wanneer aan de laatste if (Content-Type) wordt voldaan wordt de mail niet verzonden. Je moet van elke if een elseif (behalve de eerste natuurlijk) maken.

    Je kan overigens al die ifs in eentje zetten, je zet nu wel heel vaak dezelfde code neer :wink:
  • Marientje

    Nee, ik zie het nu ook. Eigenlijk rommel ik maar wat aan….. Als beginnend PHP-er wil ik wel iets voor elkaar krijgen, maar weet soms niet goed hoe.
    Na enig speurwerk via internet kom ik tot een nieuwe oplossing. Voor zover ik het kan controleren lijkt dit goed te werken:
    Nét voordat de mail wordt verzonden wordt de inhoud gecontroleerd op verboden tekst of tekens (@). Als dat zo is, wordt het woord / teken vervangen door "spam". Mijn huidige oplossing:
    [code:1:3b3c744f4c]


    if(!preg_match("/@/",$youremail)){
    $msg=$your_email_error;
    $fontc=$red;
    }

    else if( ($yourtelefoon) && ($yoursubject) && ($youremail) && ($yourname) && (preg_match("/@/",$youremail))){


    // Deze woorden vervangen
    $oudwoord = array("@","bcc","BCC","boundary","mime","MIME");
    // Vervangen door:
    $nieuwwoord = "spam";
    // Controleer de input en vervang fouten in $yourmsg
    $yourmsg = str_replace($oudwoord , $nieuwwoord , $yourmsg);
    // verzend de nieuwe input
    $yourmsg;


    $mail_msg="Beste $yourname

    [/code:1:3b3c744f4c]

Beantwoord deze vraag

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