/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
beskyttelse af mysql/php gæstebog?
Fra : Lars Koch \(5000\)


Dato : 06-08-06 15:00

Hej
Håber der er en der kan komme med et lille forslag. Jeg har lavet en lille
gæstebog på www.letsbeat.dk, der giver vores besøgende adgang til en lille
gæstebog lavet i php, hvor data bliver skrevet til mysql-database. Problemet
er nu at der desværre er en form for spambot, der smider trælse posts hele
tiden.

Er der en måde at lave gæstebogen om på, så jeg f.eks. kan godkende de posts
der skal vises, eller gøre så hvis en post indeholder bestemte ord, så
bliver den automatiske ikke vist? Der er i forvejen gjort sådan så html ikke
er muligt, men det er spam-botten ligeglad med :(

På forhånd tak :)

Her er koden - vidste ikke hvor meget jeg skulle tage med:
<?php

#####################################################################
# #
# Dette er en simpel gæstebog, stillet til rådighed af webcafe.dk #
# Skidtet er klampret sammen af claus@webclaus.com #
# #
# Gennemgang af kode samt installationsvejledning finder du på: #
# #
# http://webcafe.dk/artikler/php/phpmysqlgaestebog/ #
# #
#####################################################################

require("./gbog-ting/mysql-funktioner.php");
require("./gbog-ting/design-funktioner.php");
require("./gbog-ting/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'];
}

#
# Når folk kigger på gBogen første gang har de ikke noget $start_nr, så vi
giver dem et nul,
# så de starter med det nyeste indlæg.
# Hvis en skuummel gæst selv prøver at sætte $start_nr kan den ende med at
blive under nul,
# når man bruger navigationen. Hvis den er under nul laver vi den også om
til nul, så
# mysql ikke begynder at brokke sig over ugyldigt input
#

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

#
# Udskriver den første stump HTML
#

echo top ("<div align=\"center\">The official Guestbook");

?>

<font size="2" color="#fffff0">

<p align="center">
<a title="Tilbage til forsiden" href="../index.htm">
<img border="0" src="test.jpg" width="600" height="400"></a><?php
echo "<div align=\"center\"> <p><h4>Feel free to sign our guestbook. We
appreciate every comment.<br>If you want to send an email please use
letsbeat@gmail.com</h4></p>";
?>
</font>
<?php

#
# Vi henter to ting ud af MySQL - først og fremmest alle de indlæg vi skal
kigge på
# men også en hurtig optælling af, hvor mange indlæg der er ialt. Det sidste
skal vi
# bruge når vi bygger "frem"- og "tilbage"-links.
#
# Der er ingen grund til at åbne databasen endnu - vi skal først lige have
bygget
# de to forespørgsler.
#

$sql = "select id, navn, epost, date_format(tid, '%e/%c %Y, %H:%i') as
tiden, besked from gaestebog order by tid desc limit $start_nr,
$antal_ad_gangen";
$taeller_sql = "select count(*) as antal from gaestebog";

#
# Nu åbner vi databasen, hiver informationerne ud og lukker med det samme
igen.
# Det er god skik at en forbindelse til database ikke er åben længere end
højst nødvendigt.
#
# Abstraktionerne fra mysql-funktioner.php sørger for alt det grove arbejde
og fejlhåndtering - dejligt.
#

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

#
# Så går vi igang med at bygge navigationen
# Først bruger vi extract til at få $antal ud til behandling.
# Vi looper ikke igennem resultatet, da vi ved der kun er een række,
# så vi tilgår den direkte ved $optaelling[0].
#

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 href=\"$PHP_SELF?start_nr=$naeste_start_nr\">Back</a>";

} else {

$naeste_nav = "<span class=\"doedt-link\">-</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
href=\"$PHP_SELF?start_nr=$forrige_start_nr\">Forward</a>";

} else {

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

}

# Her plejer koden for smilies at være, men er ikke så relevant :)

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

$nav = "<table width=\"500\" border=\"0\" cellpadding=\"5\"
cellspacing=\"0\">
<tr><td align=\"left\" width=\"15%\">$forrige_nav</td>
<td align=\"center\" width=\"70%\"><a href=\"skriv.php\"><strong>Sign
guestbook/Skriv Indl&aelig;g</strong></a></td>
<td align=\"right\" align=\"15%\">$naeste_nav</td></tr>
</table>";

#
# Og skriver tabellen ud med det samme:
#

echo " $nav <p />";

#
# Her begynder det egentlig interesante - vi looper os igennem de enkelte
indlæg
# og skriver dem ud til skærmen.
#
# Hvis forespørgslen ikke har returneret nogle resultater, springer vi alt
dette over.
#

if(count($resultat) < 1) {

echo "Der er ingen indl&aelig;g i gBogen";

} 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);
$besked = htmlentities($besked);
$epost = htmlentities($epost);
}

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

$besked = nl2br($besked);

#
# Så er alt klart til browseren og vi spytter en tabel ud med denne besked.
# Hvis du vil ændre markant i udseendet af din gæstebog, så er det
# i blokken herunder det foregår. Du skal bare beholde de givne navne i
# <input>-tagsene.
#
# Vi hopper lige ud af PHP-mode lidt, så vi er fri for at escape alle
gåseøjnene.
#

?>
<div align="center">
<body bgcolor="#FFFFFF" text="#000000">

<table border="2" style="border-collapse: collapse">
<tr><td class="gbog-baggrund" width="100%" align="center">

<table border="0" cellpadding="6" width="600" align="left"
style="border-collapse: collapse">
<tr><td class="gbog-top" width="600">
<font size="2" color="#000000">From: <strong><?php echo $navn; ?>
(<?php echo $epost; ?>)</strong> - <?php echo $tiden; ?></font></td></tr>
</table>

</td></tr><tr><td class="gbog-baggrund" align="center" width="600">

<table border="0" cellpadding="8" cellspacing="0" width="600">
<tr><td class="gbog-bund" size="1" width="600">
<font size="2">
<?php echo smil($besked); ?>
</font>

</table>

</td></tr>
</table>
<p />
</div>
<?php

#
# Vi hopper tilbage i PHP-mode.
#
# 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;

#
# Her slutter if-else-konstruktionen der fanger, om der er nogle indlæg
overhovedet.
#

}

#
# Og spytter den sidste stump HTML ud.
#
echo bund();
?>



 
 
Dan Storm (06-08-2006)
Kommentar
Fra : Dan Storm


Dato : 06-08-06 15:24

Kig eventuelt på tråden "Forhindre spam indlæg."

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Ove Lie (06-08-2006)
Kommentar
Fra : Ove Lie


Dato : 06-08-06 17:07

" Lars Koch (5000)" <koch@galnet.DANSK> skrev i melding
news:44d5f5ee$0$15786$14726298@news.sunsite.dk...

> Er der en måde at lave gæstebogen om på, så jeg f.eks. kan godkende de
posts
> der skal vises, eller gøre så hvis en post indeholder bestemte ord, så
> bliver den automatiske ikke vist? Der er i forvejen gjort sådan så html
ikke
> er muligt, men det er spam-botten ligeglad med :(
>
> På forhånd tak :)

http://groups.google.no/group/no.it.programmering.php/browse_frm/thread/84ab
63fe3d894e6b/fd91804ed78381b3?lnk=st&q=&rnum=8&hl=no#fd91804ed78381b3

Få med hele linken. Mange gode ideer fra post 31 og ut her.

-Ove



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste