Avatar billede nielspt Nybegynder
21. juli 2006 - 13:54 Der er 9 kommentarer og
1 løsning

Gæstebog: Hvis beskeden indeholder bestemt ord: STOP

I kampen mod spam i min gæstebog..

Jeg vil gerne løbe det indtastede igennem, FØR det sendes til databasen. Her skal det så kun sendes hen, hvis det indtastede ikke indeholder bestemte ord (- Som medical, viagra mv.)

Nogen der ved hvordan dette gøres?



Det er vel i denne kode det skal implementeres:



<?php

$tal = array("nul", "en", "to", "tre", "fire", "fem", "seks", "syv", "otte", "ni", "ti");
include("gb/inc/functions.php");
if(!empty($_POST[tekst]) && !empty($_POST[navn]) && $tal[$_POST['gemtresultat']] ==  strtolower($_POST['resultat'])){


include("gb/inc/functions.php");
if(!empty($_POST[tekst]) && !empty($_POST[navn])){

    $besked = $_POST[tekst];
   
    $besked = str_replace("&apos;","", $besked);
    $besked = str_replace("'","'", $besked);
   

   
    $besked = str_replace("  "," &nbsp;", nl2br(htmlentities(addslashes($besked))));

    $besked = str_replace("&lt;u&gt;","<u>", $besked);
    $besked = str_replace("&lt;/u&gt;","</u>", $besked);

    $besked = str_replace("&lt;i&gt;","<i>", $besked);
    $besked = str_replace("&lt;/i&gt;","</i>", $besked);

    $besked = str_replace("&lt;b&gt;","<b>", $besked);
    $besked = str_replace("&lt;/b&gt;","</b>", $besked);

    $besked = str_replace("&lt;","<", $besked);
    $besked = str_replace("&gt;",">", $besked);
 
    $besked = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",
                    "<a href=\"\\0\">\\0</a>", $besked);

    $link  = "$_POST[http]";
    $http  = str_replace("http://", "", $link);
   
    $currentDate = date("d/m-Y, H:i");
   
    $ip = $_SERVER[REMOTE_ADDR];;


mysql_query("INSERT INTO tagwall (navn, email, http, tekst, lok, time, ip) VALUES ('$_POST[navn]','$_POST[email]','$http','$besked', '$_POST[lok]', '$currentDate', '$ip')")or die(mysql_error());
header("Location:gb.php");
}
  }
else {
    header("Location:gb.php");
}
?>
Avatar billede flashbordon Nybegynder
21. juli 2006 - 14:11 #1
$dirty_word = array('viagra','medical');
    $chk = true;
    foreach($dirty_word as $word){
      if(strpos($besked,$word) === false){
        $chk = false;
        break;
      }
    }
    if($chk){


mysql_query("INSERT INTO tagwall (navn, email, http, tekst, lok, time, ip) VALUES ('$_POST[navn]','$_POST[email]','$http','$besked', '$_POST[lok]', '$currentDate', '$ip')")or die(mysql_error());

    }

-flash
Avatar billede flashbordon Nybegynder
21. juli 2006 - 14:12 #2
if(strpos($besked,$word) !== false){

ups....
Avatar billede nielspt Nybegynder
21. juli 2006 - 15:08 #3
Perfekt! Tak.

Hvis det indtastede ikke accepteres, kan man så - lige før break - åbne en ny side, hvor der f.eks. står "det indtastede blev ikke accepteret.."? (I tilfælde af at en af mine besøgende uheldigvis benytter et ikke-accepteret ord)

Mvh. Niels
Avatar billede nielspt Nybegynder
21. juli 2006 - 15:11 #4
- Og kan man gøre sådan, at den ikke er case-sensitive (forskel på store og små bogstaver)? Altså så hverken VIAGRA, Viagra eller viagra accepteres?
Avatar billede jackass- Nybegynder
21. juli 2006 - 15:22 #5
Jeps..

foreach($dirty_word as $word){
  if(stripos($besked,$word) === false){
    $chk = false;
    echo "<script>self.location.href=\"failed.php\"</script>";
    break;
  }
}

fx...
Avatar billede jackass- Nybegynder
21. juli 2006 - 15:22 #6
jeg ups'er også lige.. det er naturligvis !== false :-)
Avatar billede nielspt Nybegynder
21. juli 2006 - 15:34 #7
Det sidste ser ikke ud til at virke - den åbner ikke et nyt vinduer - eller sender brugeren videre..

- Og kan man gøre sådan, at den ikke er case-sensitive (forskel på store og små bogstaver)? Altså så hverken VIAGRA, Viagra eller viagra accepteres? (gentager lige mig selv) :-)
Avatar billede jackass- Nybegynder
21. juli 2006 - 15:42 #8
Ja.. som jeg skrev:

if(stripos($besked,$word) !== false){

..og hvorfor virker self.location.href ikke? Det virker fint ved mig :) Men det er korrekt at det ikke åbner et _nyt_ vindue.. er det nødvendigt?
Avatar billede jackass- Nybegynder
21. juli 2006 - 15:51 #9
I så fald kan du jo bruge javascript window.open() i stedet
Avatar billede nielspt Nybegynder
21. juli 2006 - 15:58 #10
Har fundet ud af hvorfor det drillede. Kode-stumpen fejler naturligvis ikke noget :-) Jeg har nemlig både indlæggene og formen på samme side, så når folk har skrevet en besked bruger jeg header("Location:gb.php");  -  så der vil de ende uanset om det indtastede accepteres eller ej.. Så har lige flyttet lidt rundt på koden og lavet en if-sætning så det virker.

Mange tak jackass!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester