8795 sujets

Développement web côté serveur, CMS

Salut, je suis un noob... j'ai tout de meme essayé de sécuriser mon formulaire mais il a un un probleme, aidez moi s'il vous plait !!

Alors je souhaite empecher les utilisateur d'envoyer plein de fois le formulaire, jai donc utiliser SESSION et COOKIE.

Quand le message est envoyé, j'ajoute 1 à la variable "contact" et au bout de 3 fois, le cookie "stop" est créé et s'il existe, il redirige vers la page d'erreur.

Mon problème actuel est que :
au debut tout va bien, ca affiche "3" mais de suite apres, quand je passe à 2 envois restant et bien ca reste à 2 (quand je continue a en envoyer)...
je comprends pas dutout ce qui se passe...

merci bien

Voici mon code :
<?php
session_start();
if(isset($_COOKIE["reste"]))
{
if($_COOKIE["reste"]==0||$_COOKIE["reste"]<0)
{
setcookie("stop", 1, time()+300);
if(isset($_COOKIE["stop"])){
echo 'cookie OK';
exit('Quota atteint!');
}else{
echo 'erreur cookie';
}
setcookie("reste", 3, time()+300);
}
}
else
{
setcookie("reste", 3, time()+300);
}

    $ip = $_SERVER["REMOTE_ADDR"];
    $name = htmlentities($_POST['name']);
    $email = htmlentities($_POST['email']);
    $message = htmlentities($_POST['message']);
    $to = 'mecraft.site@gmail.com';
    $subject = 'MECRAFT';
    $human = htmlentities($_POST['human']);     
    $body = "Pseudo: $name\nEmail: $email\n\nMessage:\n $message\n\nip: $ip";
?>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="contact.css" />
<script src="/Ress/styles/script.js"></script>
<section>
<?php           
    if ($_POST['envoyer']) {
        sleep(1);
    if ($name != '' && $email != '') {
        if ($human == 'VERT') {                          
            if (mail ($to, $subject, $body)) {
?>

<p style="color:#00CC00;">
<?php
                echo 'Ton message &agrave; &eacute;t&eacute; envoy&eacute;!';
                        $_COOKIE["reste"] = $_COOKIE["reste"] - 1;
?>
</p>
<?php
            } else { 
?>
<p style="color:#CC0000;">
<?php
                echo 'Y\'a eu un probl&egrave;me! Ajoute le skype : staffto175'; 
?>
</p>
<?php
            } 
        } else if ($_POST['envoyer'] && $human != 'VERT') {
?>
<p style="color:#CC0000;">
<?php
            echo 'Tu as mal r&eacute;pondu &agrave; la question anti-spam!';
?>
</p>
<?php
        }
    } else {
?>
<p style="color:#CC0000;">
<?php
        echo 'Tu dois remplir tous les champs!!';
?>
</p>
<?php
    }
}
?>
<br>
Ton ip : <? echo $_SERVER["REMOTE_ADDR"]; ?><br>
Il te reste <? echo $_COOKIE["reste"]; ?> envois.<br>
<br>

<form method="post" action="contact.php" style="border-right:1px;">

    <label>Pseudo</label>
    <input name="name" placeholder="SwiftFallow">

    <label>Email</label>
    <input name="email" type="email" placeholder="exemple@mail.com">

    <label>Message</label>
    <textarea name="message" placeholder="Message"  maxlength="500"></textarea>
    
        <label>Quelle couleur est issue du jaune m&eacute;lang&eacute; au bleu? (Anti-spam)</label>
    <input name="human" placeholder="&eacute;CRIVEZ EN MAJ" maxlength="4">
        
    <center><input type="image" name="envoyer" src="/Ress/imgs/boutons/valide.png" value="1" style="height:50;width:50;boder:none;"><center>

</form>

    </section>

Modifié par to175 (08 Aug 2013 - 00:44)
Bonjour,
Je pense que ton erreur vient de la mise à jour de ton cookie:
<?php
                echo 'Ton message &agrave; &eacute;t&eacute; envoy&eacute;!';
                        $_COOKIE["reste"] = $_COOKIE["reste"] - 1;
?>

Normalement, on affecte une valeur à un cookie avec setcookie. Là, quand tu fais $_COOKIE["machin"] = $_COOKIE["machin"] - 1, je pense que ça te modifie bien la valeur de la variable $_COOKIE["machin"], mais uniquement sur ta page (c'est pour ça que ton echo $_COOKIE affiche "2"). Par contre, la valeur du cookie n'est pas modifiée, et donc quand tu rechargera la page, il vaudra toujours 3, et donc il t'affichera 3-1 = 2.
Essaies en faisant:
<?php
                echo 'Ton message &agrave; &eacute;t&eacute; envoy&eacute;!';
                        $nouvelle_valeur = $_COOKIE["reste"] - 1;
                        setcookie("reste", $nouvelle_valeur, time()+300);
?>