Avatar billede nielspt Nybegynder
16. juli 2006 - 16:25 Der er 19 kommentarer og
1 løsning

Forhindre spam i gæstebog - validering f.eks. med billede?

Hej eksperter.

Jeg har en gæstebog på min hjemmeside, som desværre ofte bliver besøgt af spambots..

Nogen der har en genial løsning på dette?

Måske man kan lave en validering, eksempelvis ved at indtaste 5 tegn et billede viser, før man får lov at komme ind til selve gæstebogen? eller ved at lave et lille regnestykke som her: http://www.mopseweb.dk/guestbook.php ?

Nogen som har en bid kode i php (eller javascript), som virker?

Med venlig hilsen,
Niels.
Avatar billede tdafoobar Nybegynder
16. juli 2006 - 16:29 #1
Det kaldes en CAPTCHA. Du kan se eksempler på Wikipedia

http://en.wikipedia.org/wiki/Captcha
Avatar billede iss Novice
16. juli 2006 - 16:38 #2
Avatar billede nielspt Nybegynder
16. juli 2006 - 17:22 #3
Takker for links!

Jeg kunne egentlig godt tænke mig sådan et lille regnestykke, ligesom dette: http://www.mopseweb.dk/guestbook.php .. men virker det? og hvordan for jeg det implementeret i en form (så det tjekker om man har tastet rigtigt, før det bliver sendt til databasen?)
Avatar billede nielspt Nybegynder
16. juli 2006 - 17:26 #4
- altså, hvor regnestykket er random hver gang..
Avatar billede iss Novice
16. juli 2006 - 17:34 #5
Du laver den med rand()... den er ret nem at omgåes den der...
<td align='right' class='tbl'>4 + 5:</td>
<td class='tbl'>
<input type='text' name='validation' value='' class='textbox' style='width:200px'>
<input type='hidden' name='validation_answer' value='9' class='textbox' style='width:200px'>
Som efter et resultatet er i klar tekst...
Avatar billede iss Novice
16. juli 2006 - 17:35 #6
Ville nok skrive talne med bogstaver... og så bede folk skrive resultatet med bogstaver... Så kan man godt skrive resultat i klar tekst i koden...
Avatar billede nielspt Nybegynder
16. juli 2006 - 17:39 #7
Er du rar at skrive hele koden for det? :-/
Jeg er ikke så skrap til det.
Avatar billede iss Novice
16. juli 2006 - 17:48 #8
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<?
$tal = array("nul", "en", "to", "tre", "fire", "fem", "seks", "syv", "otte", "ni", "ti");
$x = rand (0, 5);
$y = rand (0, 5);
$xy = $x+$y;
?>
Hvad er <?=$tal[$x]?> plus <?=$tal[$y]?> <input type="text" name="resultat">
<input type="hidden" name="gemtresultat" value="<?=$xy?>">
<input type="submit">
</form>

<?
if(!empty($_POST)) {
    if($tal[$_POST['gemtresultat']] ==  strtolower($_POST['resultat'])) {?>
OK
<?    }
    else {?>
Forkert
<?    }
}
?>
Avatar billede iss Novice
16. juli 2006 - 17:56 #9
Og en hvor selv ordblinde kan være med:
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<?
$tal = array("nul", "en", "to", "tre", "fire", "fem", "seks", "syv", "otte", "ni", "ti");
$x = rand (0, 5);
$y = rand (0, 5);
$xy = $x+$y;
?>
Hvad er <?=$tal[$x]?> plus <?=$tal[$y]?>
<select name="resultat">
    <option value="11" SELECTED>- Vælg resultat -</option>
<?foreach ($tal as $valg) {?>
    <option><?=$valg?></option>
<?}?>
</select>
<input type="hidden" name="gemtresultat" value="<?=$xy?>">
<input type="submit">
</form>

<?
if(!empty($_POST)) {
    if($tal[$_POST['gemtresultat']] ==  strtolower($_POST['resultat'])) {?>
OK
<?    }
    else {?>
Forkert
<?    }
}
?>
Avatar billede nielspt Nybegynder
16. juli 2006 - 18:07 #10
Mange tak. Lige en sidste ting..

Lige nu har min gæstebog selvfølgelig nogle felter: Navn, lokation, besked mv. - og til sidst en Send-knap: <input type='submit' name='HerSendes' value='Send' class='inputsend'>

Hvordan kan jeg implementere ovenstående kode, så regnestykket står lige til venstre for send-knappen - så hvis man skriver det rigtige resultat og trykker send, sendes dataen til databasen. (hvis forkert resultat, sendes intet videre..)?
Avatar billede iss Novice
16. juli 2006 - 18:12 #11
<select name="resultat">
    <option value="11" SELECTED>- Vælg resultat -</option>
<?foreach ($tal as $valg) {?>
    <option><?=$valg?></option>
<?}?>
</select>
<input type="hidden" name="gemtresultat" value="<?=$xy?>">
Sætter du ind foran send knappen.
Avatar billede nielspt Nybegynder
16. juli 2006 - 18:24 #12
Nu er jeg forvirret.. Help? :)
Avatar billede iss Novice
16. juli 2006 - 18:47 #13
Smid din kode her, ellers kan du nok ikke få mere hjælp.
Avatar billede nielspt Nybegynder
16. juli 2006 - 19:06 #14
<?php

$banned_ip = array();
//ip's


foreach($banned_ip as $banned) {
    $ip = $_SERVER['REMOTE_ADDR'];
    if($ip == $banned){
        echo "Access denied. IP-adress logged. Legal action might be taken.";
        exit();
    }
}
// rest of PHP Script here!


include ("gb/inc/functions.php");
?>






<center>

<form method='post' action='form.handler.php'>
<center>



<table border='<?=$tableborder;?>' width='<?=$tablewidth;?>' cellspacing='<?=$tablecellspacing;?>' cellpadding='<?=$tablecellpadding;?>' >
  <tr>
    <td width='100%'><center><br><input type='text' name='navn' value='Navn' onfocus="if(this.value=='Navn')this.value='';"
                      onblur="if(this.value=='')this.value='Navn';" size='22' class='input'></td>
  </tr>
 
 
  <tr>
    <td width='100%'><center><input type='text' name='email' value='E-mail' onfocus="if(this.value=='E-mail')this.value='';"
                      onblur="if(this.value=='')this.value='E-mail';" size='22' class='input'></td>
  </tr>
 
 
  <tr>
    <td width='100%'><center><input type='text' name='lok' value='Lokation' onfocus="if(this.value=='Lokation')this.value='';"
                      onblur="if(this.value=='')this.value='Lokation';" size='22' class='input'></td>
  </tr>
 
 
 
  <tr>
    <td width='100%'><center><input type='text' name='http' value='Hjemmeside' onfocus="if(this.value=='Hjemmeside')this.value='';"
                      onblur="if(this.value=='')this.value='Hjemmeside';" size='22' class='input'></td>
  </tr>
 
 
 
  <tr>
    <td width='100%'><center><textarea name='tekst' rows='9' cols='50'></textarea></td>
  </tr>
 
  <tr>
    <td width='100%'>
      <center><br><input type='submit' name='HerSendes' value='Send' class='inputsend'></p>
      <hr color="#000000" size="1" width="100%">
     
      <font size="2" face="Courier New">
      (>)<img src="gb/img/arrow.gif">&nbsp;:D<img src="gb/img/biggrin.gif">&nbsp;:s<img src="gb/img/confused.gif">&nbsp8)<img src="gb/img/cool.gif">&nbsp;:((<img src="gb/img/cry.gif">&nbsp;::-<img src="gb/img/eek.gif">&nbsp;:#<img src="gb/img/evil.gif">&nbsp;(!)<img src="gb/img/exclaim.gif"> (!!)<img src="gb/img/idea.gif">&nbsp;:-D<img src="gb/img/lol.gif">
      <br><br>:(<img src="gb/img/mad.gif">&nbsp;:o)<img src="gb/img/mrgreen.gif">&nbsp;:|<img src="gb/img/neutral.gif">&nbsp;(?)<img src="gb/img/question.gif">&nbsp;:p<img src="gb/img/razz.gif">&nbsp;:-/<img src="gb/img/redface.gif">&nbsp;8-/<img src="gb/img/rolleyes.gif">&nbsp;:-(<img src="gb/img/sad.gif">&nbsp;:)<img src="gb/img/smile.gif">&nbsp;
      :o<img src="gb/img/surprised.gif">
      <br><br>>D<img src="gb/img/twisted.gif">&nbsp;;)<img src="gb/img/wink.gif">
      </font>
    </td>
  </tr>
</table>
</form>



<?
if($showmode == '1') {

    if($_GET[vis] == "") { $_GET[vis] = 0; }
    if($_GET[vis2] == "") { $_GET[vis2] = 0; }

   
    $query = mysql_query("SELECT * FROM tagwall");

    if($_GET[vis] >= $pagelimit) {
    if($_GET[vis] < mysql_num_rows($query)+ $pagelimit) {
    echo "<a href='$PHP_SELF?vis=".($_GET[vis] - $pagelimit)."&vis2=$_GET[vis2]'> <b>«</b> </a> &nbsp; ";
        }
    }

    if($_GET[vis] <= mysql_num_rows($query)- $pagelimit) {
    echo "<a href='$PHP_SELF?vis=".($_GET[vis] + $pagelimit)."&vis2=$_GET[vis2]'> <b>»</b> </a>";
    }
}
if($showmode == '2') {
    if($_GET[vis] == "") { $_GET[vis] = 0; }
    if($_GET[vis2] == "") { $_GET[vis2] = 0; }
   
    $antal = mysql_num_rows(mysql_query("SELECT id FROM tagwall")) ;

    $pages = ceil($antal / $pagelimit) ;
    $page = ceil(($_GET[vis] + 1) / $pagelimit) ;
               
    echo "<span class='m'>Gå til side: </span> " ;
               
    for ($i = 1 ; $i <= $pages ; $i++) {
                   
    if ($i == $page) {
    echo "<span class='m'><b> " . $i . " </b></span>" ;
    }
    else {
    echo "<a href='$PHP_SELF?vis=" . (($i * $pagelimit) - $pagelimit)  . "'>" . $i . "</a>" ;
        }
    }
}



$query = mysql_query("SELECT * FROM tagwall ORDER BY id DESC LIMIT $_GET[vis], $pagelimit") or die(mysql_error());
while($row = mysql_fetch_array($query)) {
echo"
    <table border='$tableborder' width='$tablewidth' cellspacing='$tablecellspacing' cellpadding='$tablecellpadding'>
      <tr>
        <td width='100%' valign='top' class='tagboxtop'>";
       
        if($row[http] !=="Hjemmeside"){
        echo"
       
        <a href='http://$row[http]' target='_blank'>$row[navn]</a>";
        if($row[email] !=="E-mail"){echo"<span class='m'></span><a href='mailto:$row[email]'> @ </a>";}
        }
       
        if($row[http] =="Hjemmeside"){
        echo"
        <span class='m'>$row[navn]</span> ";if($row[email] !=="E-mail"){echo"<span class='m'> - </span><a href='mailto:$row[email]'>e-mail</a>";}
        }
       
        if($row[lok] =="Lokation"){
        echo"
        <span class='m'> </span>"
        ;}
       
        if($row[lok] !=="Lokation"){
        echo"
       
        <span class='m'>$row[lok]</span>";}

        print"
        <span class='m'> &nbsp;&nbsp;$row[time]</span>";
       
       
       
       
       
        echo"
        </td>
      </tr>
      <tr>
        <td width='100%' valign='top' class='tagboxbund'><span class='m'>$row[tekst]</span></td>
      </tr>
    </table>";
}


?>
Avatar billede iss Novice
16. juli 2006 - 19:15 #15
Og hvad med form.handler.php?
Avatar billede nielspt Nybegynder
16. juli 2006 - 19:17 #16
kommer her (form.handler.php):



<?php
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("<h1>","", $besked);
    $besked = str_replace("<h2>","", $besked);
    $besked = str_replace("<h3>","", $besked);
    $besked = str_replace("<h4>","", $besked);
    $besked = str_replace("<h5>","", $besked);
    $besked = str_replace("<h6>","", $besked);
    $besked = str_replace("<h7>","", $besked);
    $besked = str_replace("<h8>","", $besked);
    $besked = str_replace("<h9>","", $besked);
    $besked = str_replace("<img","", $besked);
    $besked = str_replace("<html","", $besked);
    $besked = str_replace("<title","", $besked);
    $besked = str_replace("<h>","", $besked);
    $besked = str_replace("<ta","", $besked);
    $besked = str_replace("<tr","", $besked);
    $besked = str_replace("<td","", $besked);
    $besked = str_replace("<p","", $besked);
    $besked = str_replace("<st","", $besked);
   
    $besked = str_replace("(>)","<img border='0' src='gb/img/arrow.gif'>", $besked);
    $besked = str_replace(":D","<img border='0' src='gb/img/biggrin.gif'>", $besked);
    $besked = str_replace(":s","<img border='0' src='gb/img/confused.gif'>", $besked);
    $besked = str_replace("8)","<img border='0' src='gb/img/cool.gif'>", $besked);
    $besked = str_replace(":((","<img border='0' src='gb/img/cry.gif'>", $besked);
    $besked = str_replace("::-","<img border='0' src='gb/img/eek.gif'>", $besked);
    $besked = str_replace(":#","<img border='0' src='gb/img/evil.gif'>", $besked);
    $besked = str_replace("(!)","<img border='0' src='gb/img/exclaim.gif'>", $besked);
    $besked = str_replace("(!!)","<img border='0' src='gb/img/idea.gif'>", $besked);
    $besked = str_replace(":-D","<img border='0' src='gb/img/lol.gif'>", $besked);
    $besked = str_replace(":(","<img border='0' src='gb/img/mad.gif'>", $besked);
    $besked = str_replace(":o)","<img border='0' src='gb/img/mrgreen.gif'>", $besked);
    $besked = str_replace(":|","<img border='0' src='gb/img/neutral.gif'>", $besked);
    $besked = str_replace("(?)","<img border='0' src='gb/img/question.gif'>", $besked);
    $besked = str_replace(":p","<img border='0' src='gb/img/razz.gif'>", $besked);
    $besked = str_replace(":-/","<img border='0' src='gb/img/redface.gif'>", $besked);
    $besked = str_replace("8-/","<img border='0' src='gb/img/rolleyes.gif'>", $besked);
    $besked = str_replace(":-(","<img border='0' src='gb/img/sad.gif'>", $besked);
    $besked = str_replace(":)","<img border='0' src='gb/img/smile.gif'>", $besked);
    $besked = str_replace(":o","<img border='0' src='gb/img/surprised.gif'>", $besked);
    $besked = str_replace(">D","<img border='0' src='gb/img/twisted.gif'>", $besked);
    $besked = str_replace(";)","<img border='0' src='gb/img/wink.gif'>", $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 iss Novice
16. juli 2006 - 19:25 #17
form.handler.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'])){

Og den anden:
  <tr>
    <td width='100%'>
      <center><br>
<?$tal = array("nul", "en", "to", "tre", "fire", "fem", "seks", "syv", "otte", "ni", "ti");
$x = rand (0, 5);
$y = rand (0, 5);
$xy = $x+$y;?>
      Hvad er <?=$tal[$x]?> plus <?=$tal[$y]?>&nbsp;
      <select name="resultat">
      <option value="11" SELECTED>- Vælg resultat -</option>
      <?foreach ($tal as $valg) {?>
          <option><?=$valg?></option>
      <?}?>
      </select>
      <input type="hidden" name="gemtresultat" value="<?=$xy?>">&nbsp;&nbsp;&nbsp;     
      <input type='submit' name='HerSendes' value='Send' class='inputsend'></p>
      <hr color="#000000" size="1" width="100%">

Og som du nok har bemærket har jeg ikke postet hele scriptsne, plus, der er noget bedre måder at lave det du laver med str_replace'erne...
Avatar billede nielspt Nybegynder
16. juli 2006 - 19:38 #18
Tusind tak iss! Det virker nu.
Virkelig lækkert at du gider tage dig tid til at hjælpe!

Smid et svar. :)
Avatar billede iss Novice
16. juli 2006 - 19:43 #19
Nej, tak...
Avatar billede nielspt Nybegynder
16. juli 2006 - 19:49 #20
Okay.
lukker spørgsmålet alligevel.

Endnu en gang - mange tak!
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