Vraag & Antwoord

Webprogrammeren & scripting

Hoe kun je formulier input controleren

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> <br>Contact opnemen met vereniging:</p><br> <p> <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\n Naar aanleiding van uw bezoek aan www.mijnsite.nl hebt u een vraag gesteld.\n Wij hebben de volgende gegevens van u ontvangen:\n Naam: $yourname Email: $youremail Telefoon: $yourtelefoon Uw vraag: $bericht\n Uw vraag wordt zo spoedig mogelijk door ons beantwoord.\n Met vriendelijke groet, De vereniging \n ____________________________________ 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\n [/code:1:3b3c744f4c]

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

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