Avatar billede dmy Nybegynder
25. september 2008 - 14:05 Der er 5 kommentarer

Spamsikret gæstebog, hvordan?

Jeg har en gæstebog, men kan ikke finde ud af at spamsikre den.
Nogen der kan hjælpe?

(Tænkte man måske kunne gøre det med en verifikationskode, men det har jeg kun kunne få til at virke sammen med en formmail.)

Den kan hentes her
http://www.dianamy.dk/gbog.7z
Avatar billede showsource Seniormester
25. september 2008 - 14:17 #1
Min foretrukne er at bruge session og så et random navn til et hiddenfelt.
Registrere random navn med session ved visning, og ved post så tjekke om $_SESSION["randomnavn"] og $_POST[$_SESSION["randomnavn"]] er sat.
Avatar billede dmy Nybegynder
25. september 2008 - 14:22 #2
det forstår jeg intet af hehe
hvor skal jeg gøre det henne?
Avatar billede showsource Seniormester
25. september 2008 - 18:28 #3
<?php
// starter session
session_start();

// Bliver der postet ?

if($_SERVER["REQUEST_METHOD"] == "POST" && isset($_SESSION["feltnavn"])) {

    // Er $_POST[$_SESSION["feltnavn"]] sat ?
    if(isset($_POST[$_SESSION["feltnavn"]])) {

    // Slet $_SESSION["feltnavn"] så den ikke "genbruges" til post
    unset($_SESSION["feltnavn"]);

    // Gem i DB m.m.

    }

}
?><html><head><title>Test</title></head>

<body>
<?php
// Sletter $_SESSION["feltnavn"]
unset($_SESSION["feltnavn"]);

// Sætter $_SESSION["feltnavn"]
// Første del af navnet er "post_" og derefter nogle tilfældige tal
$_SESSION["feltnavn"] = "post_".rand();
?>

<form action=m.m.>
<input type="hidden" name="<?php echo $_SESSION["feltnavn"]; ?>" value="<?php echo rand(); ?>">

resten af formular

</form>

</body></html>


Value for hiddenfeltet er ligegyldig her, og sættes til noget tifældigt
Avatar billede showsource Seniormester
25. september 2008 - 20:51 #4
Og der er jo iøvrigt denne:
http://www.eksperten.dk/artikler/1019
Avatar billede dmy Nybegynder
26. september 2008 - 08:59 #5
Jeg har fået ændret, sådan at man nu kan se billedet med koden på, men jeg skal så med php have fortalt at den skal godkende når koden er rigtig og fejle når koden er forkert eller ikke skrevet. Hvordan gør jeg det og hvor i koden gør jeg det?

Se min kode her :

<form action="gem.php" method="post">
Navn:<input type="text" name="navn" size="30" maxlength="100" style="font-size:12px; margin-left:45px; margin-top:10px; font-family:Verdana, Arial, Helvetica, sans-serif;" />
<br />
E-mail:<input type="text" name="epost" size="30" maxlength="100" style="font-size:12px; margin-left:37px; margin-top:2px; font-family:Verdana, Arial, Helvetica, sans-serif;" /><br />
Emne:<input type="text" name="subject" size="30" maxlength="100" style="font-size:12px; margin-left:41px; margin-top:2px; font-family:Verdana, Arial, Helvetica, sans-serif;" />
<br />
Din hilsen:
<textarea name="besked" rows="8" cols="25" style="margin-left:13px; margin-top:2px; font-family:Verdana, Arial, Helvetica, sans-serif;"></textarea>
<br />
<br />
<img style="margin-left:75px" src="myverify/verify.php" alt="auth" /><br /><br />Indtast kode!
<input type="password" id="auth" name="auth" />
<br />
<br />
<input type="submit" id="subm" class="knapper" value="Gem" accesskey="s" /><input type="reset" id="reset" class="knapper" value="Slet" accesskey="s" /><br /><br />
</fieldset>
</form>


<?php
require("indstillinger.php");

# Vi skal have fat i vores variabler, uanset hvilken version af PHP der bruges


if(is_array($HTTP_GET_VARS)) {
  $start_nr = $HTTP_GET_VARS['start_nr'];
} elseif (is_array($_GET)) {
  $start_nr = $_GET['start_nr'];
}

# Sæt første $start_nr til nul, så
# mysql ikke begynder at brokke sig over ugyldigt input

if(!$start_nr || $start_nr < 0) {
  $start_nr = 0;
}

# Hent data ud af MySQL - tæl antal indlæg.

$sql = "select id, navn, epost, date_format(tid, '%e/%c %Y, %H:%i:%s') as tiden, subject, besked from id order by tid desc limit $start_nr, $antal_ad_gangen";
/* $sql = "select id, navn, epost, date("j/n/Y", strtotime($data["date_time"])) as tiden, subject, besked from id order by tid desc limit $start_nr, $antal_ad_gangen"; */
$taeller_sql = "select count(*) as antal from id";

aabn_forbindelse_og_vaelgdb();
$resultat = sql_spoerg_og_faa_svar($sql);
$optaelling = sql_spoerg_og_faa_svar($taeller_sql);
luk_forbindelse();

extract($optaelling[0]);

# Skal der laves et links til flere indlæg?

if($antal > ($start_nr + $antal_ad_gangen)) {
   
    $naeste_start_nr = $start_nr + $antal_ad_gangen;
    $naeste_nav = "<a class=\"tlink\" href=\"$PHP_SELF?start_nr=$naeste_start_nr\">Næste side </a>";

} else {

    $naeste_nav = "<span class=\"doedt-link\">Næste side </span>";

}

# Skal der laves link til forrige indlæg?

if($start_nr > 0 && ($start_nr - $antal_ad_gangen) < $antal) {

    $forrige_start_nr = $start_nr - $antal_ad_gangen;
    $forrige_nav = "<a class=\"tlink\" href=\"$PHP_SELF?start_nr=$forrige_start_nr\"> Forrige side</a>";

} else {

    $forrige_nav = "<span class=\"doedt-link\"> Forrige side</span>";

}

# Her sætter vi det hele sammen i en tabel vi kan bruge til at sætte ind på siden.

$nav = "<div>
<p style=\"width:25%;float:right;text-align:right; font-variant:small-caps; \">$naeste_nav</p>
<p style=\"width:25%;float:left; font-variant:small-caps;\">$forrige_nav</p>
</div>";

echo "$nav\n\n";

# Skriv de enkelte indlæg ud til skærmen.
# Hvis forespørgslen ikke har returneret nogle resultater, springer vi alt dette over.

if(count($resultat) < 1) {

  echo "<p>Der er ingen indlæg i gæstebogen</p>";

} else {

  for($i=0;$i<count($resultat);$i++) {

    # Med extract får vi smidt værdierne i variabler
   
    extract($resultat[$i]);

    # Vi brugte addslashes() da vi lagde tingene i databasen så for at få det til
    # at se læseligt ud, fjerne vi dem igen med stripslashes()

    $besked = stripslashes($besked);
    $navn = stripslashes($navn);
    $epost = stripslashes($epost);

    # Hvis der ikke må bruges HTML fjerner vi lige alle tags med htmlentities()

    if($html_p != "t") {
        $navn = htmlentities($navn);
        $epost = htmlentities($epost);
        $subject = htmlentities($subject);
        $besked = htmlentities($besked);
    }

    # For at vi får linjeskift i HTML også, bruger vi nl2br til at skifte alle \n
    # ud med <br>

    $besked = nl2br($besked);

    # Vi laver et simpelt check: Hvis eposten indeholder et snabel-a, så laver
    # vi det til en mailto:

    if(ereg("@", $epost)) {
        $navn = "<a class=\"book\" href=\"mailto:$epost\">$navn</a>";
    }

    # Så er alt klart til browseren og vi lægger data ud i en css-tilpassede div.
   
$navn=str_replace("@","@", $navn);
$navn=str_replace(".",".", $navn);

?>

    <div style="clear:both;border:1px solid #ccf; margin-bottom:10px; width: 375px; padding:5px;">
        <p align="right" class="mb">Den <span class="tid"><?php echo $tiden; ?></span><br /> Skrevet af: <?php echo $navn; ?></p>

        <p class="mt"><?php echo $subject; ?></p>
        <br />

        <p class="tm"><?php echo $besked; ?></p>
        <br />
    </div>

<?php

  # Her slutter loopet og PHP springer tilbage og går hele turen igennem med den næste
  # besked. Når der ikke er flere indlæg i denne omgang går PHP videre.

  }

  # Endelig skriver vi frem- og tilbage-links på i bunden af siden også.

  echo $nav;

}


?>
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