8796 sujets

Développement web côté serveur, CMS

Bonjour,
voila j'ai un formulaire où je verifie si mes champs sont remplis.
Je voudrais rajouter un système anti spam, mais je n'arrive pas récuperer la variable $_SESSION L'erreur est undefinded variable code
le fichier imagesecu.php

<?php
// on démarre une session pour pouvoir mémoriser le code
session_start();

// on définit les caractères utilisés pour le code généré
$liste = "123456789ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz";
// génére le code en piochant dans les caractères de la liste
$code = '';
while(strlen($code) != 6) {
   $code .= $liste[rand(0,36)];
}
// on mémorise le code de 6 caractères généré en session
$_SESSION['code']=$code;

// on créé une image de 70 x 20 pixels (larg x hauteur)
$img = imageCreate(70, 20) or die ("Problème de création GD");
// Choix de la couleur de fond, ici ça donne du Gris ( RVB)
$background_color = imagecolorallocate ($img, 238, 238, 238);
// Choix de la couleur de la police, ici du noir
$ecriture_color = imagecolorallocate ($img, 0, 0, 0);
// le code la police utilisée
$code_police=5;
// on créé une image jpeg en empêchant la mise en cache
header('Expires: Mon, 26 Jul 2999 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header("Content-type: image/jpeg");
// on introduit le code dans l'image
imageString($img, $code_police,(70-imageFontWidth($code_police) * strlen("".$_SESSION["code"].""))/2,0, $_SESSION["code"],$ecriture_color);
// on créé une image avec une qualité médiocre de 30%
// pour éviter qu'un robot puisse la lire
imagejpeg($img,'',30);
// on libère la mémoire
imageDestroy($img);
?>


Le fichier formu


<?php session_start ();
if (isset($_POST["envoyer"])){ // Si le formulaire est soumis
    $etat = "erreur"; // On initialise notre etat à erreur, il sera changé à "ok" si la vérification du formulaire est un succès, sinon il reste à erreur

    // On récupère les champs du formulaire, et on arrange leur mise en forme
    if (isset($_POST["nom"])) $_POST["nom"]=trim(stripslashes($_POST["nom"])); // trim()  enlève les espaces en début et fin de chaine

    if (isset($_POST["prenom"])) $_POST["prenom"]=trim(stripslashes($_POST["prenom"])); // trim()  enlève les espaces en début et fin de chaine

    if (isset($_POST["verif"])) $_POST["verif"]=trim(stripslashes($_POST["verif"])); // trim()  enlève les espaces en début et fin de chaine

    // Après la mise en forme, on vérifie la validité des champs
    if (empty($_POST["nom"])) { // L'utilisateur n'a pas rempli le champ pseudo
        $erreur="Vous n'avez pas entr&eacute; votre nom..."; // On met dans erreur le message qui sera affiché
        }
        elseif(empty($_POST["prenom"])) { // L'utilisateur n'a pas rempli le champ pseudo
        $erreur="Vous n'avez pas entr&eacute; votre prenom..."; // On met dans erreur le message qui sera affiché
        }
		elseif(empty($_POST["verif"])) { // L'utilisateur n'a pas rempli le champ pseudo
        $erreur="Vous n'avez pas entr&eacute; le code..."; // On met dans erreur le message qui sera affiché
        }


        else { // Si tous les champs sont valides, on change l'état à ok
            $etat="ok";
        }
}
	else { // Sinon le formulaire n'a pas été soumis
    $etat="attente"; // On passe donc dans l'état attente
	}

if ($etat!="ok"){ // Le formulaire a été soumis mais il y a des erreurs (etat=erreur) OU le formulaire n'a pas été soumis (etat=attente)
    if ($etat=="erreur"){ // Cas où le formulaire a été soumis mais il y a des erreurs
        echo "<span style=\"color:red\">".$erreur."</span><br /><br />\n"; // On affiche le message correspondant à l'erreur
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>FORMU 0 - sans BDD</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="formu.css" type="text/css">
</head>
<boby>

<!-- Formulaire HTML qu'on affiche dans l'état attente ou erreur -->
<form method="post" action="<?php "index.php?page=contact"; ?>"> <!-- Les données du formulaire seront récupérée avec la méthode POST, et action correspond à la page contenant le formulaire -->
  <p class="titre">Coordonnées :</p>
<fieldset id="coordonnees">
   
  <label>Nom : </label>
     <!-- Intitulé du champ nom -->
  
        <input type="text" size="40" name="nom" id="nom" value="<?php if (!empty($_POST["nom"])) {
        // le pseudo de l'expéditeur a été saisi --> le réafficher
        echo htmlspecialchars($_POST["nom"],ENT_QUOTES); // htmlspecialchars() convertit les caractères spéciaux en leurs code html, exemple : & devient &amp;
        } ?>" /><br />
    
  <label>Prenom : </label>
     <!-- Intitulé du champ prenom -->
  
        <input type="text" size="40" name="prenom" id="prenom" value="<?php if (!empty($_POST["prenom"])) {
        // le pseudo de l'expéditeur a été saisi --> le réafficher
        echo htmlspecialchars($_POST["prenom"],ENT_QUOTES); // htmlspecialchars() convertit les caractères spéciaux en leurs code html, exemple : & devient &amp;
        } ?>" /><br />
  <label for="verif">Recopiez le code de vérification suivant :</label>
  <br />
<img src="imagesecu.php" alt="image de protection" /><br />
<input type="text" name="verif" size="10" maxlength="6" // htmlspecialchars() convertit les caractères spéciaux en leurs code html, exemple : & devient &amp;
    />   <br />
   
 </fieldset>      

<p id="buttons">
        <input type="submit" name="envoyer" value="Envoyer" />
		<input type="reset" value="Effacer" />
    </p>
</form>
<!-- FIN du formulaire HTML -->

<?php
}
else { // Sinon l'état est ok donc on envoie le mail
	$nom = $_POST["nom"]; // On stocke les variables récupérées du formulaire
    $prenom = $_POST["prenom"];
echo 'mon nom :'.$nom.'<br\>';
echo 'mon prenom :'.$prenom.'<br\>';

}
?>
</body>
</html>



j'ai essayer de rajouter un

       elseif(isset($_SESSION["code"]) && ($_POST["verif"] != $_SESSION["code"])) { 
        $erreur="Vous n'avez pas entr&eacute; le bon..."; 
        }

mais dans ce cas la je peux renseigner n'importe quoi et il me valide mon formu en mettant undefined _SESSION

D'avance merci pour votre aide car je galère depuis 2 jours
Modifié par sand (19 Apr 2010 - 18:29)