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

Kodeord


Reklame
Top 10 brugere
HTML
#NavnPoint
molokyle 11184
Klaudi 5506
bentjuul 3377
severino 2040
smorch 1950
strarup 1525
natmaden 1396
scootergr.. 1320
e.c 1150
10  miritdk 1110
beskyttelse af mysql/php gæstebog?
Fra : Lars Koch \(5000\)


Dato : 06-08-06 11:14

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();
?>



 
 
jopa (06-08-2006)
Kommentar
Fra : jopa


Dato : 06-08-06 13:19

Lars Koch (5000) skriblede bla:
> 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 :(

Kan sagtens lade sig gøre men ikke i HTML/CSS som denne gruppe omhandler.
Prøv her
news:dk.edb.internet.webdesign.serverside.php

--
Mvh.John
www.jp-web.dk
www.john.jp-web.dk




Lars Koch \(5000\) (06-08-2006)
Kommentar
Fra : Lars Koch \(5000\)


Dato : 06-08-06 15:00

Sorry... rykker den til den anden :)



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408927
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste