Avatar billede darkdruid Nybegynder
21. august 2006 - 16:05 Der er 5 kommentarer og
1 løsning

Submit hvis resultat er rigtigt.. hvis ikke udskriv en fejlbesked

Hejsa folkens.

Jeg sidder her og er igang med at pudse lidt op på en gammel tagwall/gæstebog jeg har liggende.
Det der skal ændres ved den er en lille simpel sikkerhedsløsning med et let regnestykke så man kan kende forskel på rigtige mennesker og spam-bots.

Det hele går ud på at lave et felt hvori man skal skrive resultatet af det lille regnestykke. Hvis det er forkert kommer den med en fejl-besked og indsætter ikke noget i databasen. Hvis resultatet er rigtigt indsætter den de forskellige data ind i databasen og kommer med en lille "godkendt" besked.

Tag jer ikke af min kode da den er ret gammel og godt rodet.

Min kode ser således ud:
<?
$num1 = mt_rand(1, 9);
$num2 = mt_rand(1, 9);
$res = $num1 + $num2;
if ($_POST['send']) {
  if($_POST['right'] == $res ) { // fejlen skulle ligge her et sted
    if($_POST['name'] && $_POST['content'] ) {
      require("dbconn.php");
      $table_name = "tag";
      $date = date("d/m Y - H:i");
      $name = $_POST['name'];
      $content = $_POST['content'];
      $mail = $_POST['mail'];
      $url = $_POST['url'];
      $ip = $_SERVER["REMOTE_ADDR"];
      $content = ereg_replace("<","&lt;", $content);
      $content = ereg_replace(">","&gt;", $content);
      $content = ereg_replace("'","&#39;", $content);
      $content = ereg_replace("http:\/\/","", $content);
      $sql = "INSERT INTO ". $table_name ." (date, name, content, mail, url, ip) VALUES('". $date ."', '". $name ."','". $content ."','". $mail ."','". $url ."','". $ip ."')";
      $result = mysql_query($sql) or die(mysql_error());
      echo "Tag tilføjet...<br /><a href=\"index.php\">Tilbage til forsiden</a>";
    }
    else
    {
      echo "Felterne Navn og Besked skal udfyldes.<br /><a href=\"java script:history.back()\">Tilbage</a>";
    }
  }
  else
  {
    echo "Desværre, dit resultat var forkert.<br /><a href=\"tag.php\">Prøv igen</a>";
  }
}
else {
$ip = $_SERVER["REMOTE_ADDR"];
echo "
Denne tagwall gemmer gæstens IP adresse i databasen til senere brug hvis man benytter et bannings-system<br /><br />
Din IP adresse er <b>". $ip ."</b> og vil blive gemt i databasen sammen med din besked.<br /><br />
<center>
<form name=\"tag\" action=\"tag.php\" method=\"post\">
<b>Navn:&nbsp;</b><br />
<input type=\"text\" name=\"name\" /><br />
<b>Email:&nbsp;</b><br />
<input type=\"text\" name=\"mail\" /><br />
<b>Hjemmeside:&nbsp;</b><br />
<input type=\"text\" name=\"url\" /><br />
<b>Besked:&nbsp;</b><br />
<textarea cols=\"22\" rows=\"5\" name=\"content\"></textarea><br />
<b>Resultatet af $num1 + $num2:&nbsp;</b><br />
<input type=\"text\" name=\"right\" /><br />
<input type=\"submit\" name=\"send\" value=\"Tag\" />
</form>
</center>
";
}
?>

Fejlen skulle gerne ligge omkring min if($_POST['right'] == $res ) men jeg kan ikke selv lige regne den ud.
Jeg håber nogen har en lille fiks løsning til mit problem.

Cheers :)
Avatar billede iss Novice
21. august 2006 - 16:12 #1
Du kan kigge på denne:
<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 darkdruid Nybegynder
21. august 2006 - 16:14 #2
Takker.. den vil jeg lige lege lidt med :)
Jeg kommer tilbage og svarer hvis jeg er lidt for dum til at forstå den.
Avatar billede darkdruid Nybegynder
21. august 2006 - 16:28 #3
Ok, det var egentlig en meget simpel løsning.

Jeg udskiftede if($_POST['right'] == $res ) med if($_POST['right'] == $_POST['hidden'] ) og indsatte <input type=\"hidden\" name=\"hidden\" value=\"$res\" /> i min form.

Jeg takker mange gange for løsningen... smid lige et svar så du kan få dine point :)

Hvis folk er interesseret i at afprøve den lille tagwall/gæstebog så kan den findes på adressen http://home.goatie.dk/tagwall/newtag/ . Jeg må dog advare om at serveren den ligger på ikke er online 24/7 så det kan være den nogen gange ikke svarer.
Avatar billede iss Novice
21. august 2006 - 16:31 #4
Nej tak, samler ikke.
Avatar billede darkdruid Nybegynder
21. august 2006 - 16:32 #5
Nå ok, så smider jeg selv et svar så spørgsmålet kan blive markeret som løst/besvaret.

Men endnu engang, tak for hjælpen :)
Avatar billede iss Novice
22. august 2006 - 00:40 #6
Velbekommen.
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