Autor Zpráva
pato
Profil
ahoj, potřeboval bych poradit jak udělat jednoduchou ochranu proti spamu
něco na ten způsob jak se opisují ty čísla z generovanýho obrázku

děkuju za pomoc
BaTeCzKo
Profil
Už jsem to tu jednou psal.
Vygenerování obrázku s kódem (kod.php)
Tento skript vytvoří obrázek s čtyřmístným číslem, které je mu předáno metodou get jako parametr n.


<?php
$img=imagecreate(32,14);

//barvy
$bg = imagecolorallocate($img, 255, 255, 255);
$cerna=imagecolorallocate($img, 0, 0, 0);

//vypis textu
imagestring($img,4,0,0,$_GET['n'],$cerna);

//odeslani a ukonceni
header("Content-type: image/PNG");
imagepng($img);
imagedestroy($img);
?>



Použití na stránce
Na stránce s formulářem pro odesílání příspěvků (do knihy apod.) se vytvoří nové pole input a vedle něj se umístí obrázek s kódem, který se má opsat (zdrojový kód obrázku je níže). Také je nutné před vložením obrázku volat php funkci mt_rand tímto stylem:


<?php
$kontrola=mt_rand(1000,999); /*toto vygeneruje náhodné číslo od 1000 do 9999 a přiřadí jej jako hodnotu proměnné kontrola*/
?>




obrázek


<img src="kod.php?n=<?php echo $kontrola; ?>">
Timy
Profil
pato
Zkusil bych spíš tohle http://suplik.petnik.cz/funkcni-javasriptova-bariera-na-komentarovy-sp am-qxxq628.html anebo tajdlencto http://pristupnost.nawebu.cz/weblog/blogpost.php?post=107
pato
Profil
děkuji za rychlou reakci

není mi jasné co pak dál s novým polem input...
Acci
Profil
pato
A pak třeba v PHP budeš testovat:

if($_GET['robot'] != 4)
die('Zadal jste špatné číslo');
pato
Profil
Timy

tak jsem to podle návodu přidal, je nějaká možnost jak ověřit že mi to pracuje správně ??
BaTeCzKo
Profil
Takto:

stranka:

<form action="neco.php" method="post">
<input type="hidden" name="kontrolas" value="<?php echo $kontrola; ?>">
Kontrolní číslo: <input type="text" name="kontrolaz" maxlength="4">
</form>


neco.php:

$kontrolas=$_POST['kontrolas'];
$kontrolaz=$_POST['kontrolaz'];
if($kontrolas==$kontrolaz){

/*akce v pripade spravneho zadani*/

}
else{

/*akce v pripade chybneho zadani*/

}
Acci
Profil
tak jsem to podle návodu přidal, je nějaká možnost jak ověřit že mi to pracuje správně ??
Jediná možnost je počkat
pato
Profil
tady je celý skript na konci to je, myslíte že je to teda dobře ???


<?php
include "include/header.php";
/* --- zobrazení komentářů --- */
if (isset($_GET["id"])) {
$id = $_GET["id"];
$result = mysql_query("select nadpis from clanky where id = $id",$db);
$myrowx = mysql_fetch_array($result);
$nazev_cl = $myrowx["nadpis"];
cr_head($sitename, "Komentáře k článku $nazev_cl");

$result = mysql_query("select id from komentare where id_clanek = $id",$db);
$odp_1 = mysql_num_rows($result);

if ($odp_1 != "0") {
echo "<h2>Komentáře k článku $nazev_cl</h2>\n\n";
echo "<a href=\"article.php?id=$id\">Návrat k článku</a><br/><br/>\n\n";
$vysledek = mysql_query("select datum, jmeno, predmet, email, text from komentare where id_clanek = $id order by id desc",$db);
while ($row = mysql_fetch_array($vysledek)) {
$datum = $row["datum"];
$jmeno = $row["jmeno"];
$predmet = $row["predmet"];
$email = $row["email"];
$text = $row["text"];
echo "<p class=\"com1\">$predmet - <a href=\"maito:$email\">$jmeno</a></p>\n<p class=\"com2\">$text</p>\n<p class=\"com3\">$datum</p>\n";
}
}
}
/* --- funkce na cenzuru sprostých slov --- */
function censor($censored) {
include "include/badwords.php";
$cmask = "<i>[cenzurováno]</i>";
if (is_array($profan)) {
reset($profan);
while (list(, $sWord) = each($profan)) {
if (strstr(strtoupper($censored), strtoupper($sWord))) {
if (strtoupper($censored)==strtoupper($sWord)) {
$censored=$cmask;
} else {
$censored = eregi_replace("^$sWord([^a-zA-Z])", "$cmask\\1", $censored);
$censored = eregi_replace("([^a-zA-Z])$sWord$", "\\1$cmask", $censored);
while(eregi("([^a-zA-Z])($sWord)([^a-zA-Z])", $censored))
$censored = eregi_replace("([^a-zA-Z])($sWord)([^a-zA-Z])", "\\1$cmask\\3", $censored);
}
}
}
}
return($censored);
}
/* --- přidání komentáře a zobrazení komentářů --- */
if (isset($_POST["id_clanek"])) {
$id = $_POST["id_clanek"];
$jmeno = $_POST["jmeno"];
$email = $_POST["email"];
$predmet = $_POST["predmet"];
$komentar = $_POST["komentar"];

if((!$jmeno) || (!$email) || (!$predmet) || (!$komentar)) {
$result = mysql_query("select nadpis from clanky where id = $id",$db);
$myrowx = mysql_fetch_array($result);
$nazev_cl = $myrowx["nadpis"];

cr_head($sitename, "Komentáře k článku $nazev_cl");

echo '<p>Nevyplnil jste některé údaje ve formuláři:</p><ul>';

if(!$jmeno){
echo "<li>Chybí jméno!</li>";
}
if(!$email){
echo "<li>Chybí email!</li>";
}
if(!$predmet){
echo "<li>Chybí předmět!</li>";
}
if(!$komentar){
echo "<li>Chybí komentář!</li>";
}

echo "</ul>";
} else {
$komentar = htmlspecialchars($komentar);
$komentar = censor($komentar);

/* --- kontrola správnosti parametru ID --- */

$result = mysql_query("select nadpis from clanky where id = $id",$db);
$odp_1 = mysql_num_rows($result);

if ($odp_1 == "1") {

$myrowx = mysql_fetch_array($result);
$nazev_cl = $myrowx["nadpis"];
cr_head($sitename, "Komentáře k článku $nazev_cl");

/* --- vlo?ení komentáře do databáze --- */
$datum = date("j. m. Y G:i");
$sql = "insert into komentare (id, id_clanek, datum, jmeno, predmet, email, text) values ('','$id','$datum','$jmeno','$predmet','$email','$komentar')";
$result2 = mysql_query($sql);

if (!$result2) {
echo "<p>Váš komentář nebyl uložen!</p>";
} else {
echo "<p>Váš komentář byl uložen!</p>";
}
} else {
echo "<p>Špatné ID!</p>";
}

$result = mysql_query("select id from komentare where id_clanek = $id",$db);
$odp_1 = mysql_num_rows($result);

if ($odp_1 != "0") {
echo "<h2>Komentáře k článku $nazev_cl</h2>\n\n";
echo "<a href=\"article.php?id=$id\">Návrat k článku</a><br/><br/>\n\n";
$vysledek = mysql_query("select datum, jmeno, predmet, email, text from komentare where id_clanek = $id order by id desc",$db);
while ($row = mysql_fetch_array($vysledek)) {
$datum = $row["datum"];
$jmeno = $row["jmeno"];
$predmet = $row["predmet"];
$email = $row["email"];
$text = $row["text"];
echo "<p class=\"com1\">$predmet - <a href=\"maito:$email\">$jmeno</a></p>\n<p class=\"com2\">$text</p>\n<p class=\"com3\">$datum</p>\n";
}
}
}
}

if ($_POST["robot"]*1==6)
// pridej prispevek

?>

<h4>Přidat komentář</h4>
<form method="post" action="comment.php">
<input type="hidden" name="id_clanek" value="<?php echo $id;?>"/>

<table class="com4">
<tr>
<td>
Jméno:
</td>
<td>
<input type="text" class="ramecek" name="jmeno" size="30"/>
</td>
</tr>
<tr>
<td>
Email:
</td>
<td>
<input type="text" class="ramecek" name="email" size="30"/>
</td>
</tr>
<tr>
<td>
Předmět:
</td>
<td>
<input type="text" class="ramecek" name="predmet" size="30"/>
</td>
</tr>
<tr>
<td>
Komentář:
</td>
<td>
<textarea name="komentar" class="ramecek" rows="5" cols="40"></textarea>
</td>
</tr>
</table>

<!-- zde jsou normální pole formuláře -->
<p id="spamprotirobotum">
Ochrana proti spamu. Kolik je dvakrát tři?
<input type="text" name="robot" value="" id="protirobotum">
</p>
<script>
/* tento skript vloží číslici do příslušného políčka automaticky */
document.getElementById("protirobotum").value="6";
document.getElementById("spamprotirobotum").style.display = "none";
</script>
<p><input type="submit" class="ramecek" name="submit" value="Odeslat"/></p>


</form>
<?php
include "include/footer.php";
?>
Toto téma je uzamčeno. Odpověď nelze zaslat.

0