Autor Zpráva
hladis
Profil
Ahoj, před pár lety sem se pokusil spustit stránku na odesílání mailů, úspěšně. Teď bych to potřeboval trochu zdokonalit - přidat obrázkovou antispamovou ochranu. Dost se mi líbí tato - www.zubrag.com/scripts/antispam-image-generator.php, jak to mám vložit do tohoto skriptu

<?php

$komu = $_POST['komu'];
$predmet = $_POST['predmet'];
$email = $_POST['email'];
$text = $_POST['text'];
$spam = $_POST['spam'];

if($spam == "2"){
if ($predmet != "") {
if ($text != "") {
if ($email != "") {
if (ereg("^.+@.+\\..+$", $komu)){
if (mail($komu, $predmet, $text, 'From: ' . $email)){
echo("Email byl úspěšně odeslán");
}
else {
echo("Email se nepodařilo odeslat");
}
}
else {
echo("Adresa příjemce není platnou emailovou adresou");
}
}
else {
echo("Adresa odesílatele není platnou emailovou adresou");
}
}
else {
echo("Nenapsal jsi žádný text");
}
}else {
echo("Nenapsal jsi žádný předmět");
}
}else{
echo("Nevíš, kolik je jedna plus jedna?");
}


?>


Tady je stránka toho webmailu - http://fasteml.tym.cz/

Pomohl by mi někdo dokončit tento projekt? Byl bych moc vděčný.
hladis
Profil
A ještě sem přidávám odesílací formulář:

      <table align="center">
       <tbody>
        <tr>
            <td><p>Komu:</p></td>
            <td><INPUT TYPE="text" SIZE="110"  NAME="komu"></td>
        </tr>
        <tr>
            <td><p>Odesílatel:</p></td>
            <td><INPUT TYPE="text" NAME="email" SIZE="110" MAXLENGTH="30"></td>
        </tr>
        <tr>
            <td><p>Předmět:</p></td>
            <td><INPUT TYPE="text" NAME="predmet" SIZE="110" MAXLENGTH="30"></td>
        </tr>
        <tr>
            <td><p>Text:</p></td>
            <td><TEXTAREA COLS="83" ROWS="5" NAME="text"></TEXTAREA></td>
        </tr>
        <tr>
            <td><p>AntiSpam:</p></td>
            <td><input name="spam" size="25"> <strong>= 1 + 1</strong></td>
        </tr>
        <tr>
            <td><button type="submit" style="background:url('http://fasteml.tym.cz/img/odeslat.gif');width:80px;height:30px;" onclick="return confirm('doopravdy odeslat?')"> </button></td>
            <td><button type="reset" style="background:url('http://fasteml.tym.cz/img/vymazat.gif');width:80px;height:30px;" onclick="return confirm('doopravdy smazat?')"></td></button>
        </tr>
       </tbody>
      </table>
        
        </FORM>
SwimX
Profil
hladis:
do formuláře někam přidej:
<img id="captcha" src="captcha.php" alt="antispam" width="180" height="50"><br class="invis">
<label for="kod" id="opsat">Opište kód <span>malá písmenka</span> <span>čísla 1-9</span></label><input type="text" name="captcha" id="kod">

soubor captcha.php
<?php
session_start();
define ("POCET", 5);                                                         // číslo = náhodných písmen nebo čísel v captche

$capt = "";
  for($i=0; $i<POCET; $i++){
    $nahoda = mt_rand(0, 1);
    if ($nahoda == 0)                                                       // mala pismenka
      $capt .= chr(mt_rand(97, 122));
    else                                                                    // cisla
      $capt .= chr(mt_rand(49, 57));                                        // nenačítám nulu aby nedošlo ke zmatení zda jde o nulu nebo o
  }
$_SESSION['capta'] = $capt;                                               // uložení do sessionu abych to moohl porovnávat na jiné stránce
$img = imagecreate((POCET+1)*30, 50);                                       // vytvoření obrázku podle počtu cifer
$color_bg = imagecolorallocate($img, 11, 11, 11);                        //  barva pozadí
imagefill($img, 0, 0, $color_bg);                                           // vyplnění obrázku barvou

for ($i = 0; $i<3; $i++){                                                   // 3krát zamíchání souřadnic, barev  
  $x1 = mt_rand(0, (POCET+2)*10);
  $x2 = mt_rand($x1, (POCET+2)*30);
  $y1 = mt_rand(0, 20); 
  $y2 = mt_rand($y1, 50);
  $r = mt_rand(50, 255);
  $g = mt_rand(50, 255);
  $b = mt_rand(50, 255);
  $color_line = imagecolorallocate($img, $r, $g, $b);                       
  imageline($img, $x1, $y1, $x2, $y2, $color_line);                           // udělání čar do obrázků
}

for($i=0; $i<POCET; $i++){                                                   // vytisknutí písmenek do obrázku 
  $size = mt_rand(20, 30);                                                    // náhodná velikost
  $angel = mt_rand(-30, 30);                                                  // náhodný sklon
  $r = mt_rand(100, 255);                                                       //náhodná barva
  $g = mt_rand(100, 255);
  $b = mt_rand(100, 255);
  $color_txt = imagecolorallocate($img, $r, $g, $b);
  imagettftext($img, $size, $angel, $i*30+10, 40, $color_txt, "Mias.ttf", $_SESSION['capta'][$i]); // vložení textu do obrázku pomocí fontu Mias.ttf
  
}

for ($i = 0; $i<3; $i++){                                                    // zase 3 čáry, ale tentokrát přes písmo
  $x1 = mt_rand(0, (POCET+2)*10);
  $x2 = mt_rand($x1, (POCET+2)*30);
  $y1 = mt_rand(0, 20); 
  $y2 = mt_rand($y1, 50);
  $r = mt_rand(50, 255);
  $g = mt_rand(50, 255);
  $b = mt_rand(50, 255);
  $color_line = imagecolorallocate($img, $r, $g, $b);
  imageline($img, $x1, $y1, $x2, $y2, $color_line);
}


header("Content-type: image/png");                                           // nastavení headru na image/png 
    ImagePng($img);                                                            // prirazeni obrazku do captcha.php 
    
    imagedestroy($img);                                                        // uvolneni promnene img - aby nemusela byt v pameti zbytecne
?>

a v tom php souboru:

nahraď tyto řádky
$spam = $_POST['spam'];

if($spam == "2"){

za tyto
$spam = $_POST['captcha'];

if($spam == $_SESSION['capta']){

a uplně nahoru přidej session_start();
Kalby
Profil
ja to vetsinou delam jednoduse tak ye do divu kteremu nastavim visibility:hidden vlozim input ktery pojmenuju nejak lakalve treba url, email, atd. pote testuji jestli byl vyplnen, pokud ano je to BOT a neodeslu formular
hladis
Profil
Kalby: Díky za radu, kdyžtak bych to vyzkoušel.

SwimX: Nějak to nefunguje, kdyžtak se koukni na tu stránku. Nenačítá se tam obrázek, ale umístění a zapsání souborů jsem kontroloval... můj formulář s antispamem teď vypadá takto:
        <tr>
            <td><p>Antispam:</p></td>
            <td><p><img id="captcha" src="captcha.php" alt="antispam" width="180" height="50"><br class="invis">
                   <label for="kod" id="opsat">Opište kód <span>malá písmenka</span> <span>čísla 1-9</span></label><br>
                   <input type="text" name="captcha" id="kod"></td>
        </tr>


Zkusím ještě jednou vše zkontrolovat, pak se uvidí.
SwimX
Profil
hladis:
musíš ještě ke captche uložit soubor http://plavec.borec.cz/Mias.ttf s fontem písma, zapomněl jsem na něj :)
hladis
Profil
SwimX:
Pořád nic - http://fasteml.tym.cz/
SwimX
Profil
hladis:
to je divné. Mě to samé funguje už řadu let. www.plavec.borec.cz/captcha.php
hladis
Profil
SwimX:
Tady mi to vyhazuje nějakou chybku. Zkontroluj prosím, jestli si mi napsal vše dobře.
SwimX
Profil
hladis:
nějakou chybku
jakou? Žádnou nevidím. Zkopíroval jsem to, mělo by to být dobře. Co ti to píše?
hladis
Profil
SwimX:
Obrázek “http://fasteml.tym.cz/captcha.php” nelze zobrazit, protože obsahuje chyby.
SwimX
Profil
hladis:
je důležité aby v souboru captcha.php nebyl žádný bílý znak. Tedy první řádka začínala <?php a žádná mezera nic před tím. Ale to zřejmě máš, jinak by to hodilo error že nejdou měnit headers.
Co je na hostingu za verzi php?

Opravdu nevím čím to může být :(

Zkus na začátek captchy dát ERROR_REPORTING(E_ALL);
hladis
Profil
SwimX:
Pořád to stejné... Když si se mnou strávil tolik času, pomohl bys mi vložit antispam z této stránky - www.zubrag.com/scripts/antispam-image-generator.php]www.zubrag.com/scripts/antispam-image-generator.php ? Jenom co kam vložit, aby mi to fungovalo.
SwimX
Profil
hladis:
je to to samé co to moje. Tak schválně.

php soubor:

<?php
@session_start(); // start session if not started yet

$komu = $_POST['komu'];
$predmet = $_POST['predmet'];
$email = $_POST['email'];
$text = $_POST['text'];


if ($_SESSION['AntiSpamImage'] == $_POST['anti_spam_code']){
$_SESSION['AntiSpamImage'] = rand(1,9999999);
if ($predmet != "") {
if ($text != "") {
if ($email != "") {
if (ereg("^.+@.+\\..+$", $komu)){
if (mail($komu, $predmet, $text, 'From: ' . $email)){
echo("Email byl úspěšně odeslán");
}
else {
echo("Email se nepodařilo odeslat");
}
}
else {
echo("Adresa příjemce není platnou emailovou adresou");
}
}
else {
echo("Adresa odesílatele není platnou emailovou adresou");
}
}
else {
echo("Nenapsal jsi žádný text");
}
}else {
echo("Nenapsal jsi žádný předmět");
}
}else{
$_SESSION['AntiSpamImage'] = rand(1,9999999);
echo("Špatně opsáno");
}


?>
ve formuláři jen místo <img src='captcha dej antispam.php a nahraj soubor na ftp.


Mělo by to jít?
hladis
Profil
SwimX:
Mělo. Ale nejde. Když zobrazím ten soubor antispam.php tak mi to píše Cannot render TTF text..
Jo a nahrál jsem tam i písmo Arial z Windowsu.
hladis
Profil
To nikdo neví?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: