Autor Zpráva
DasQweras
Profil *
Zdravím, potřeboval bych poradit s jedním problémem..

Mám soubor new.php ve kterým je napsaný formulář.. po vyplnění dám odeslat a vyskočí mi text, že to bylo úspěšně odesláno.. ovšem.. zůstanu pořád na tý samý stránce, čili.. když dám F5 např. 10x, tak se mi to odešle na e-mail 10x, čili mi to někdo zaspamuje.

Je tam echo, čili po odeslání mi zmizí formulář a na tý samý stránce se přes tohle zobrazí text - Váš požadavek o přidání vašeho serveru byl odeslán správci na e-mail. Do 24 hodin obdržíte e-mail od nás. V případě problému se neváhejte obrátit na e-mail **** rádi Váš problém zodpovíme.

echo je takhle

echo '<img border="0" src="default/images/Done.png" alt="Úspěšně vyřízeno"title="Úspěšně vyřízeno" width="80" height="80"/></a>';
echo '<b>Váš požadavek o přidání vašeho serveru byl odeslán správci na e-mail. Do 24 hodin obdržíte e-mail od nás. V případě problému se neváhejte obrátit na e-mail ****, rádi Váš problém zodpovíme.</b>';

Takže pokud se najde někdo, kdo vyplní formulář, 20x zmáčkne F5 tak mi zaspamuje e-mail... jak se tomu vyhnout?



Další problém.. captcha..

Ve formuláři není, čili to zas může vyplnit nějakej spambot a posílat.. jak ji tam dát?
Holi-cz
Profil *
Na captcha si prostuduj toto. http://www.google.com/recaptcha
A jinak, jestli chceš vyřešit ten spam místo toho echa bych přesměroval na hlavní stránku s nějakou GET proměnnou a vypsal to na hlavní stránce.
Asi takto. Samozřejmě určitě se najde někdo s lepším řešením :)
Po odeslání formuláře
$email = $_POST['email'];
header("location: index.php?form=ok&mail=$email");
A index
[pre
if($_GET['form'] == "ok")
{
$email = $_GET['mail'];
echo ("Váš požadavek o přidání vašeho serveru byl odeslán správci na e-mail. Do 24 hodin obdržíte e-mail od nás. V případě problému se neváhejte obrátit na e-mail $email rádi Váš problém zodpovíme.");
}
[/pre]


Aha, popletl jsem si to :) .. Myslel jsem si, že se má zobrazit jeho email. Tudíž není třeba odesílat proměnnou GET mail a na hlavní stránce také není potřeba ji kontrolovat.
Andrasin
Profil
To odeslání mailu pouze jednou bych řešil třeba takhle:

<?php
session_start();
if (empty($_SESSION['odeslano'])) {
    // zde bude funkce pro odeslání mailu
    $_SESSION['odeslano'] = true;
}
else echo 'E-mail jste již jednou odeslali!';
DasQweras
Profil *
Tak tohle jsem nepochopil..

Tý captche vůbec nerozumím.. Jak na to?

Já sem hodím ten kod aby jste se podívali, jsem z toho jelen..


<?php include('encode.php');

//==========================================
$Web      = "http://*****";    //Web, z kterého budou E-Maily chodit (v e-mailu bude odkaz na stránku)
$To       = "e-mail";  //Na který E-Mail májí ostatní zprávy chodit
//------------------------------------------
$formview = false;              //Toto je pro zobrazování formuláře
$sended   = $_POST['sended'];   //Proměnná posláno
$Name     = $_POST['Name'];     //Název serveru
$Rate       = $_POST['Rate'];     //Rate serveru
$Email    = $_POST['Email'];    //E-mail dotyčného
$Majitel  = $_POST['Majitel'];    //Majitel
$Url      = $_POST['Url'];         //URL webu
$Urldwn   = $_POST['Urldwn'];   //URL Download
$Description = $_POST['Description']; //Popis serveru
$Banner   = $_POST['Banner'];   //Banner
$Fb       = $_POST['Fb'];       //FaceBook
$Contact  = $_POST['Contact'];  //Jeho E-Mail
$ImgSrc1  = $_POST['ImgSrc1'];  //Odkaz na obrázek
$ImgSrc2  = $_POST['ImgSrc2'];
$ImgSrc3  = $_POST['ImgSrc3'];
$ImgSrc4  = $_POST['ImgSrc4'];
$ImgSrc5  = $_POST['ImgSrc5'];
$Vysledek = $_POST['Vysledek'];
$Ip       = $_SERVER['REMOTE_ADDR']; //IP adresa
//------------------------------------------
$Nick = StrTr($Nick,"ÁČĎĚÉÍĹŇÓÔŘŠŤÚŮÝŽáčďěéíľňóôřšťúůýž","ACDEEILNOORSTUUYZacdeeilnoorstuuyz");
//------------------------------------------
if(!$ImgSrc1){$ImgSrc1="Odkaz nebyl ke zprávě dodán.";} //Pokud není zadanej odkaz, napíše v mailu že nebyl dodán.
if(!$ImgSrc2){$ImgSrc2="Odkaz nebyl ke zprávě dodán.";}
if(!$ImgSrc3){$ImgSrc3="Odkaz nebyl ke zprávě dodán.";}
if(!$ImgSrc4){$ImgSrc4="Odkaz nebyl ke zprávě dodán.";}
if(!$ImgSrc5){$ImgSrc5="Odkaz nebyl ke zprávě dodán.";}
//==========================================

if($sended)
{

if(!$Name || strlen($Name)<3){$errmsg="Název serveru nebyl zadán nebo je příliš krátký! (min. 3 znaky)<br>";}
if(!$Rate){$errmsg.="Rate nebyl zadán!        ";}
if(!$Email){$errmsg.="E-Mail nebyl zadán!        ";}
if(!$Url){$errmsg.="Webová adresa serveru nebyla zadána!    ";}
if(!$Urldwn){$errmsg.="Webová adresa na download klienta nebyla zadána!        ";}
if(!$Description || strlen($Description)<30){$errmsg.="Popis serveru nebyl zadán nebo je krátký! (min. 30 znaků)<br>";}
if(!$Banner){$errmsg.="Webová adresa na banner nebyla zadána!        ";}
if($Chr=="+"){if(!$Vysledek || $Vysledek!=$A+$B){$errmsg.="Výsledek je špatný!<br>";}}
else{if(!strlen($Vysledek) || $Vysledek!=$A-$B){$errmsg.="Výsledek je špatný!<br>";}}

$explode = explode("@", $Contact);
$exp = explode(".", $explode[1]);
if(strlen($explode[0])<2 || strlen($exp[0])<2 || strlen($exp[1])<2){
if($explode[0]!="" && $exp[0]!="" && $exp[1]!=""){
$errmsg.= "Email ".$explode[0]."@".$exp[0].".".$exp[1]." je neplatný! Zadejte platný!<br>";}
/*else{$errmsg.= "Byl zadán neplatný Email!<br>";}*/}



if($errmsg!=""){$formview=true;echo $errmsg."<hr>";}
}
else
{
$formview=true;
}

if($formview)
{
$_SESSION['a'] = rand(0,9);
$_SESSION['b'] = rand(0,9);
$Op = Array("+","-");$_SESSION['ch'] = $Op[rand(0,1)];

echo'
            <!--Novy radek Name-->
<li id="li_2" >
        <label class="description" for="name">Název serveru <font color="red">*</font></label>
        <div>
            <input id="Name" name="Name" class="element text medium" type="text" maxlength="55"/> 
        </div><p class="guidelines" id="guide_2"><small>Název serveru maximálně o délce 55 znaků.</small></p> 

<td>

</td>
</tr>


        <!--Novy radek Rate-->
</li>   <li id="li_3" >
        <label class="description" for="ratesvr">Rate </label>
        <div>
            
            <input id="Rate" name="Rate" class="element text medium" type="text" maxlength="55"/> 
        </div><p class="guidelines" id="guide_3"><small>Rate serveru exp,yang,drop (např. exp 200%, yang 150%, drop 30%).</small></p> 

<td>

</td>
</tr>


        <!--Novy radek Email-->
</li>   <li id="li_4" >
        <label class="description" for="Email">E-Mail <font color="red">*</font></label>
        <div>
            <input id="Email" name="Email" class="element text medium" type="text" maxlength="255" value=""/> 
        </div><p class="guidelines" id="guide_4"><small>E-mail na který vám odešleme potvrzení o přijetí vašeho serveru a poskytneme další informace.</small></p> 
        
        
        <!--Novy radek Majitel-->
</li>   <li id="li_5" >
        <label class="description" for="Majitel">Nick majitele </label>
        <div>
            <input id="Majitel" name="Majitel" class="element text medium" type="text" maxlength="255" value=""/> 
        </div><p class="guidelines" id="guide_5"><small>Nick majitele, který bude uveden v popisku serveru.</small></p> 
        
</td>
</tr>
        <!--Novy radek Web Stránka-->
</li>   <li id="li_6" >
<label class="description" for="url">Webová stránka serveru <font color="red">*</font></label>
        <div>
            <input id="Url" name="Url" class="element text large" type="text" maxlength="255" value="http://"/> 
        </div><p class="guidelines" id="guide_6"><small>WWW adresa serverových stránek.</small></p> 

</td>
</tr>
        <!--Novy radek Web Odkazu Down-->
</li>        <li id="li_7" >

        <label class="description" for="url">Odkaz ke stažení klienta <font color="red">*</font></label>
        <div>
            <input id="Urldwn" name="Urldwn" class="element text large" type="text" maxlength="255" value="http://"/> 
        </div><p class="guidelines" id="guide_7"><small>WWW adresa ke stažení klienta serveru.</small></p> 

        <!--Novy radek Popis serveru-->
</li>        <li id="li_8" >
        <label class="description" for="description">Popis serveru <font color="red">*</font></label>
        <div>

            <textarea id="Description" name="Description" class="element textarea medium" maxlength="255"></textarea> 
            </div><p class="guidelines" id="guide_8"><small>Popis serveru o maximální délce 255 znaků.</small></p> 
</td>
</tr>

        
        <!--Novy radek Banner-->
</li>   <li id="li_9" >
<label class="description" for="url">Banner (470*60) <font color="red">*</font></label>
        <div>
            <input id="Banner" name="Banner" class="element text large" type="text" maxlength="255" value="http://"/> 
        </div><p class="guidelines" id="guide_9"><small>WWW adresa na banner vašeho serveru. Velikost 470*60.</small></p> 
        
        
    <!--Novy radek FB-->
</li>   <li id="li_10" >
<label class="description" for="url">FaceBook stránka serveru </label>
        <div>
            <input id="Fb" name="Fb" class="element text large" type="text" maxlength="255" value="http://"/> 
        </div><p class="guidelines" id="guide_9"><small>WWW adresa na FaceBookovou stránku serveru.</small></p>    
        
    <tr>
<td><span class="imp">*</span> Kolik je '.ReplaceNum($_SESSION['a']).' '.ReplaceOp($_SESSION['ch']).' '.ReplaceNum($_SESSION['b']).'? (číslo)</td>
<td><input type="text" name="Vysledek" size="35"></td>
</tr>


    
                            
</li>   <li id="li_11" >
<input type="hidden" name="sended" value="true">
<input type="submit" value="Poslat">
        
        <br>
        </div> 
    
            
                    
                    


</form>
        
        
        </div> 
        
        
        
        
        </li>
            
        </li>
            </ul>
        </form>
    </div>

        
        </div>
      <div class="menuFH rounded">
<a href="index.php">Zpět</a> - <a href="pravidla.php"> Pravidla vkládání</a>
      </div>
    </body>
<br>

    
    
</table>


';
}
else
{

$Datum = date("d.M. Y - H:i:s");

cs_mail($To, $Name." se uchází o registraci",
"Název serveru:   
$Name 

IP Odesílatele:    
$Ip

Rate:   
$Rate

E-Mail:    
$Email

Majitel:    
$Majitel

WwW:    
$Url

WwW Download klienta:    
$Urldwn

Banner:   
$Banner

FaceBook:   
$Fb


Popis:

$Description\n
Odesláno: $Datum z webu $Web
","From: $Ip@$Web\nX-web: $Web"
);

echo '<img border="0" src="default/images/Done.png" alt="Úspěšně vyřízeno"title="Úspěšně vyřízeno" width="80" height="80"/></a>';
echo '<b>Váš požadavek o přidání vašeho serveru byl odeslán správci na e-mail. Do 24 hodin obdržíte e-mail od nás. V případě problému se neváhejte obrátit na e-mail, rádi Váš problém zodpovíme.</b>';
echo '<meta http-equiv="Refresh" content="3">';
}


function ReplaceChars($input){
$normal = Array(
'á'=>'a','č'=>'c','ď'=>'d','ě'=>'e','é'=>'e','í'=>'i','ň'=>'n','ó'=>'o','ř'=>'r','š'=>'s','ť'=>'t','ú'=>'u','ů'=>'u','ý'=>'y','ž'=>'z',
'Á'=>'A','Č'=>'C','Ď'=>'D','Ě'=>'E','É'=>'E','Í'=>'I','Ň'=>'N','Ó'=>'O','Ř'=>'R','Š'=>'S','Ť'=>'T','Ú'=>'U','Ů'=>'U','Ý'=>'Y','Ž'=>'Z',' '=>'_');
return StrTr($input,$normal);
}

function ReplaceNum($in){
$words = Array('0'=>'nula','1'=>'jedna','2'=>'dvě','3'=>'tři','4'=>'čtyři','5'=>'pět','6'=>'šest','7'=>'sedm','8'=>'osm','9'=>'devět');
return StrTr($in,$words);
}

function ReplaceOp($in){
$chars = Array('+'=>'plus','-'=>'mínus');
return StrTr($in,$chars);
}
?>

</body>
</html>


Jak tady docílit toho, aby když odešle formulář to nemohl zaspamovat? Klidně aby se ta stránka zavřela, přesměrovala.. aby nemohl prostě dát F5 a spamovat.. + ta captcha aby nemohl vrátit zpět a obejít to..
DasQweras
Profil *
Ještě mě napadlo.. co to zablokovat přes ip? Jako, že dotyčný z této IP může jen 1x denně? Po odeslání až následující den?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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