Form et captcha

Résolu
Bonjour,
de nouveau avec ce problème, j'ai un script qui semble fonctionner 'cahin-caha' sur un site mais pas ailleurs ...
le code du form :
<?php 
define("ST_READY", 0);  // La page a été appellée pour la 1ere fois (aucun bouton n'a donc pu être cliqué)
define("ST_OK", 1);  // La page a été appellée avec le bouton [Envoyer] et l'envoi du mail s'est bien passé
define("ST_PREVIEW", 2);  // La page a été avec le bouton [Prévisualiser]
define("ST_ERROR", 3);  // Une erreur s'est produite lors de la vérification de la page

function remplacements_speciaux($txt)
{
	$txt=preg_replace('#(<|>)#', '-', $txt); 
	$txt=str_replace('"', "'",$txt); 
	$txt=str_replace('&', 'et',$txt);
	return $txt;
}



function mail_valide($mail)
{
	// La variable $verif va nous permettre d'analyser si la sémantique de l'email est bonne 
	$verif='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#'; 
	return preg_match($verif,$mail);
}



$reponse="";
// On regarde si la réponse a été postée par l'utilisateur
if (isset($_POST['reponse'])) $reponse=$_POST['reponse'];

$message="";
$objet="";
$votretelephone="";
$votremail="";

// On suppose qu'il y a une erreur par défaut même si ce n'est pas le cas. 
// Raisonnement par l'absurde en quelque sorte ...
$status=ST_ERROR;  
 
//input button envoi/previsualiser 
$envoi=isset($_POST['envoi']) ? htmlentities($_POST['envoi']) : "";
$previsualiser=isset($_POST['previsualiser']) ? htmlentities($_POST['previsualiser']) : "";

if (isset($_POST['message'])) 
{ 

	//quelques remplacements pour les specialchars 
	$message=remplacements_speciaux($_POST['message']); 
	$objet=isset($_POST['objet']) ? remplacements_speciaux($_POST['objet']) : "";

	// On assigne et/ou protège nos variables 
	$votremail=stripslashes(htmlentities($_POST['votremail'])); 
	$message=stripslashes(htmlspecialchars($message)); 
	$objet=stripslashes(htmlspecialchars($objet)); 

	$votretelephone=isset($_POST['votretelephone']) ? htmlentities($_POST['votretelephone']) : "";


	//on enlève les espaces 
	$votremail=trim($votremail); 
	$message=trim($message); 
	$objet=trim($objet); 

	/*On vérifie si l'e mail et le message sont pleins, et on agit en fonction. 
	(on affiche Apercu du resultat, tel ou tel champ est vide, etc...*/ 
	//Si ca ne vas pas (mal rempli, mail non valide...) 
	if((empty($message)) or (empty($objet)) or (!mail_valide($votremail))) 
	{ 
		
		//les 3 champs sont vides 
		if(empty($votremail) and (empty($message)) and (empty($objet))) 
		{ 
			$msgerr='Tous les champs sont vides.'; 
		} 
		//un des champs est vide 
		else 
		{ 
			if(!mail_valide($votremail)) 
			{
				$msgerr='Votre adresse e-mail n\'est pas valide.'; 
			}
			else 
			{ 
				$msgerr='Il faut remplir tous les champs !'; 
			} 
		} 
	} 
	//Si les deux sont pleins et que l'adresse est valide, on envoie on on prévisualise sans envoi 
	else 
	{ 
		$domaine=preg_replace('#[^@]+@(.+)#','$1',$votremail); 
		$DomaineMailExiste=checkdnsrr($domaine,'MX'); 
		if(!$DomaineMailExiste) 
		{
			$msgerr='Le nom de domaine de l\'adresse e-mail que vous avez donné n\'existe pas.'; 
		}
		elseif(!empty($previsualiser)) 
		{ 
			$status=ST_PREVIEW; 
		} 
		elseif(!empty($envoi)) 
		{ 

			// Test si la réponse au captcha est correcte !
			if (isset($_SESSION['solution']))
			{
				if ($_SESSION['solution'] != $reponse) 
				{
					$msgerr="Mauvaise réponse à la question posée ! Réessayez.";
				}
				else
				{
					$objet='[contact SITE info] : '.$objet; 
					$destinataire='monmail@monfai.info'; 
					$mail=$destinataire;
					
$headers='From:'.$votremail."\r\n".
'Subject:'.$objet."\r\n".
'Content-type: text/plain; charset=ISO-8859-1'."\r\n".
'Sent:'.date('l, F d, Y H:i');  			
		                        $message = $message."\nTéléphone : ".$votretelephone;
					if(mail($destinataire,$objet,$message,$headers)) 
					{ 
						$status=ST_OK;
					} 
					else 
					{
						$msgerr='Un problème est survenu durant l\'envoi du mail.'; 
					}
				}
			}
			else
			{
					$msgerr="Votre session a expirée ! Veuillez répondre de nouveau à la 

question puis valider.";
			}
		} 
		else 
		{
			$msgerr='Une condition innatendue est survenue lors de l\'exécution du script.'; 
		}
	} 
} 
else 
{ 
	$status=ST_READY;
} 



switch ($status) 
{
	case ST_READY :
		echo '<p>Tous les champs doivent être renseignés, merci.</p>'; 
		break;

	case ST_OK :
		echo '<p>Votre message a bien été envoyé. Merci.</p><p><a href="/">Retour à la page 

d\'accueil</a></p>'; 
		break;

	case ST_PREVIEW :
		echo '<p>Votre message et votre adresse e-mail sont valides et prêts à être envoyés. 
	 	<br />Vous n\'avez plus qu\'à cliquer sur le bouton "Envoyer" sans oublier de répondre à la question 

posée.<br />Prévisualisation :</p>'; 
		break;

	case ST_ERROR :
		if (isset($msgerr) && !empty($msgerr))
		{
			echo "<p>".$msgerr."</p>";
		}
		else
		{
			echo "<p>Erreur non prévue !</p>";
		}
		break;	
}

?> 


<form id='contact' method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"" enctype="multipart/form-data"> 
<p id='obj'>Utilisez ce formulaire et je vous réponds au plus vite, merci</p> 
<p> 
	<label for='objet'>Objet de votre message :<br /> 
	<input type='text' name='objet' id='objet' tabindex='10' size='50' value='<?php echo $objet;?>' /> 
	</label> 
</p> 
<p id="adr">
	<label for="mail">Votre Adresse E-mail<br /> 
	<input name="votremail" tabindex="20" size="40" type="text" id="mail" value="<?php echo $votremail; ?>" />
	</label>
</p> 
<p id="tel">
	<label for="telephone">Votre téléphone(facultatif, si vous d&eacute;sirez &ecirc;tre contact&eacute;s)<br /> 
	<input name="votretelephone" tabindex="30" size="30" type="text" id="telephone" value="<?php echo 

$votretelephone ?>" />
	</label>
</p> 
<p id="msg">
	<label for="message">Votre message<br /> 
	<textarea tabindex="40" rows="10" cols="50" name="message" id="message"><?php echo $message; ?></textarea> 
	</label>
</p> 
<?php 
include("captcha.php");
$captcha=new capcha(); // Création d'un nouvel objet (instance) de classe capcha


$bouton_previsualiser='<p class="bt"><input type="submit" name="previsualiser" tabindex="3" value="Prévisualiser" 

/></p>'; 
$bouton_envoi='<p class="bt">'.$captcha->q().'&nbsp;<input type="text" name="reponse" id="reponse" size="4">&nbsp;'.
	'<input name="envoi" tabindex="4" value="Envoyer" type="submit" /></p>'; 

switch ($status) 
{
	case ST_READY :
		echo $bouton_previsualiser.$bouton_envoi; 
		break;

	case ST_PREVIEW :
		echo $bouton_envoi; 
		break;

	case ST_ERROR :
		echo $bouton_previsualiser.$bouton_envoi; 
		break;	
}


if (isset($_SESSION))
{
	session_destroy();
}

session_start(); // Restaure la session précédente ou démarre ou nouvelle session
// Sauvegarde dans la session de la réponse attendue issue du captcha
$_SESSION['solution'] = substr($captcha->word,$captcha->num-1,1);
?> 
</form>  

le code du captcha :
<?php
class capcha{

	var $min;
	var $max;
	var $alphabet;
	var $word;
	var $num;
	var $numletter;

	function capcha(){
		$this->min = 4;
		$this->max = 6;
		$this->alphabet = 'abcdefghijklmnopqrstuvwxyz';
		$this->grain_de_sel = '6tIb90ZAS11';
		$this->word = $this->createWord();
		$this->num = $this->chooseNum();
		$this->numletter = $this->num2letter();
	}
	
	function q(){
		return 'Quelle est la '.$this->numletter.' lettre du mot '.$this->word.' ?';
	}

	function createWord(){

		$len = rand($this->min,$this->max);
		for($i=0;$i<$len;$i++){
			$word[$i] = $this->alphabet[rand(0,strlen($this->alphabet)-1)];
		}
		return implode('',$word);
	}

	function chooseNum(){
		return rand(1,strlen($this->word));
	}

	function num2letter(){
		if($this->num == strlen($this->word)){
			return 'dernière';
		}
		$array = array('1' => 'première','2' => 'deuxième','3' => 'troisième','4' => 'quatrième','5' => 'cinquième','6' => 'sizième','7' => 'septième','8' => 'huitième','9' => 'neuvième','10' => 'dixième');
		if(isset($array[$this->num])){
			return $array[$this->num];
		}else{
			return $this->num.'.ème';
		}	
	}

	function r(){
		return md5($this->grain_de_sel.$this->word[$this->num-1]);
	}
}
?>

erreurs les plus fréquentes :
" Votre session a expirée ! Veuillez répondre de nouveau à la question puis valider. "
" Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by etc ..."
si vous pouvez me dépanner ? super !!!
@+
b g

--

le 'www' est fait aussi pour communiquer, partager et échanger, non ?
Configuration: Windows XP
Firefox 2.0.0.4

19 réponses

  1. Modérateur
    j'ai toujours cru depuis le début qu'il fallait ouvrir cette cession dans le form et non dans la page contact !!!!
    mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et mille et
    ecuses !

    et chapeau pour ta patience et tes compétences !
    viens que je te fasse la bise : ça fonctionne !
    en tous cas je t'en dois une ... si je peux te dépanner un jour, dans mon domaine, n'hésite pas !
    .... je mets le sujet en résolu ....
    @mitiés
    b g
    0
    1. Contributeur
      lol. toi tu crises avec php, moi je crises avec toi ;-)

      <?php session_start(); ?>
      
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
         "http://www.w3.org/TR/html4/loose.dtd">
      <head>
          <link rel="shortcut icon" href="../appart.ico" />
      <title>contact</title>

      [...]
      1
      1. Modérateur
        il faudrait mettre ceci :
        <?php session_start(); ?> // Restaure la session précédente ou démarre ou nouvelle session
        
        <?php
        
        define("ST_READY", 0);  // La page a été appellée pour la 1ere fois (aucun bouton n'a donc pu être cliqué)
        define("ST_OK", 1);  // La page a été appellée avec le bouton [Envoyer] et l'envoi du mail s'est bien passé
        define("ST_PREVIEW", 2);  // La page a été avec le bouton [Prévisualiser]
        define("ST_ERROR", 3);  // Une erreur s'est produite lors de la vérification de la page

        au début ????
        à la place de :
        <?php
        session_start(); // Restaure la session précédente ou démarre ou nouvelle session
        
        define("ST_READY", 0);  // La page a été appellée pour la 1ere fois (aucun bouton n'a donc pu être cliqué)
        define("ST_OK", 1);  // La page a été appellée avec le bouton [Envoyer] et l'envoi du mail s'est bien passé

        je commence à "criser" avec le php ....
        @+
        b g
        0
        1. Modérateur
          l'erreur signalée à la 'ligne 2':
          ligne 1 :<?php
          ligne 2 :session_start(); // Restaure la session précédente ou démarre ou nouvelle session
          

          je n'y comprends plus rien ...
          @+
          b g
          0
          1. Modérateur
            autant pour moi ... les messages partent et arrivent
            mais il y a toujours affiché :
            Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/128/sdb/3/d/refok/standing-appart.com/pages/contact.php:10) in /mnt/128/sdb/3/d/refok/standing-appart.com/form/form2b.php on line 2

            ????
            ce serait à cause de l'include ??? comment corriger alors (car je voudrais que ça fonctionne comme sur mon site principal dans lequel il est appelé aussi par un include, mais sans problèmes ...)
            @+
            b g
            0
            1. Contributeur
              Parce que tu inclues le form dans la page !!!!

              DOnc ca veut dire que tout le reste de la page est envoyé au navigateur AVANT le session_start().
              Cette fonction doit etre LA PREMIERE CHOSE DE TOUT TOUT TOUT TOUT et plus encore...

              Donc, ca peut pas marcher... cf #1 et #3

              → session_start() doit être déclaré dans ton header, avant le doctype.
              0
              1. Modérateur
                re .... j'ai mis ceci :
                <?php
                session_start(); // Restaure la session précédente ou démarre ou nouvelle session
                
                define("ST_READY", 0);  // La page a été appellée pour la 1ere fois (aucun bouton n'a donc pu être cliqué)
                define("ST_OK", 1);  // La page a été appellée avec le bouton [Envoyer] et l'envoi du mail s'est bien passé
                define("ST_PREVIEW", 2);  // La page a été avec le bouton [Prévisualiser]
                define("ST_ERROR", 3);  // Une erreur s'est produite lors de la vérification de la page
                
                function remplacements_speciaux($txt)
                {
                	$txt=preg_replace('#(<|>)#', '-', $txt); 
                	$txt=str_replace('"', "'",$txt); 
                	$txt=str_replace('&', 'et',$txt);
                	return $txt;
                }
                
                
                
                function mail_valide($mail)
                {
                	// La variable $verif va nous permettre d'analyser si la sémantique de l'email est bonne 
                	$verif='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#'; 
                	return preg_match($verif,$mail);
                }
                
                
                
                $reponse="";
                // On regarde si la réponse a été postée par l'utilisateur
                if (isset($_POST['reponse'])) $reponse=$_POST['reponse'];
                
                $message="";
                $objet="";
                $votretelephone="";
                $votremail="";
                
                // On suppose qu'il y a une erreur par défaut même si ce n'est pas le cas. 
                // Raisonnement par l'absurde en quelque sorte ...
                $status=ST_ERROR;  
                 
                //input button envoi/previsualiser 
                $envoi=isset($_POST['envoi']) ? htmlentities($_POST['envoi']) : "";
                $previsualiser=isset($_POST['previsualiser']) ? htmlentities($_POST['previsualiser']) : "";
                
                if (isset($_POST['message'])) 
                { 
                
                	//quelques remplacements pour les specialchars 
                	$message=remplacements_speciaux($_POST['message']); 
                	$objet=isset($_POST['objet']) ? remplacements_speciaux($_POST['objet']) : "";
                
                	// On assigne et/ou protège nos variables 
                	$votremail=stripslashes(htmlentities($_POST['votremail'])); 
                	$message=stripslashes(htmlspecialchars($message)); 
                	$objet=stripslashes(htmlspecialchars($objet)); 
                
                	$votretelephone=isset($_POST['votretelephone']) ? htmlentities($_POST['votretelephone']) : "";
                
                
                	//on enlève les espaces 
                	$votremail=trim($votremail); 
                	$message=trim($message); 
                	$objet=trim($objet); 
                
                	/*On vérifie si l'e mail et le message sont pleins, et on agit en fonction. 
                	(on affiche Apercu du resultat, tel ou tel champ est vide, etc...*/ 
                	//Si ca ne vas pas (mal rempli, mail non valide...) 
                	if((empty($message)) or (empty($objet)) or (!mail_valide($votremail))) 
                	{ 
                		
                		//les 3 champs sont vides 
                		if(empty($votremail) and (empty($message)) and (empty($objet))) 
                		{ 
                			$msgerr='Tous les champs sont vides.'; 
                		} 
                		//un des champs est vide 
                		else 
                		{ 
                			if(!mail_valide($votremail)) 
                			{
                				$msgerr='Votre adresse e-mail n\'est pas valide.'; 
                			}
                			else 
                			{ 
                				$msgerr='Il faut remplir tous les champs !'; 
                			} 
                		} 
                	} 
                	//Si les deux sont pleins et que l'adresse est valide, on envoie on on prévisualise sans envoi 
                	else 
                	{ 
                		$domaine=preg_replace('#[^@]+@(.+)#','$1',$votremail); 
                		$DomaineMailExiste=checkdnsrr($domaine,'MX'); 
                		if(!$DomaineMailExiste) 
                		{
                			$msgerr='Le nom de domaine de l\'adresse e-mail que vous avez donné n\'existe pas.'; 
                		}
                		elseif(!empty($previsualiser)) 
                		{ 
                			$status=ST_PREVIEW; 
                		} 
                		elseif(!empty($envoi)) 
                		{ 
                
                			// Test si la réponse au captcha est correcte !
                			if (isset($_SESSION['solution']))
                			{
                				if ($_SESSION['solution'] != $reponse) 
                				{
                					$msgerr="Mauvaise réponse à la question posée ! Réessayez.";
                				}
                				else
                				{
                					$objet='[contact SITE info] : '.$objet; 
                					$destinataire='monmail@monfai.info'; 
                					$mail=$destinataire;
                					
                $headers='From:'.$votremail."\r\n".
                'Subject:'.$objet."\r\n".
                'Content-type: text/plain; charset=ISO-8859-1'."\r\n".
                'Sent:'.date('l, F d, Y H:i');  			
                		                        $message = $message."\nTéléphone : ".$votretelephone;
                					if(mail($destinataire,$objet,$message,$headers)) 
                					{ 
                						$status=ST_OK;
                					} 
                					else 
                					{
                						$msgerr='Un problème est survenu durant l\'envoi du mail.'; 
                					}
                				}
                			}
                			else
                			{
                					$msgerr="Votre session a expirée ! Veuillez répondre de nouveau à la 
                
                question puis valider.";
                			}
                		} 
                		else 
                		{
                			$msgerr='Une condition innatendue est survenue lors de l\'exécution du script.'; 
                		}
                	} 
                } 
                else 
                { 
                	$status=ST_READY;
                } 
                
                
                
                switch ($status) 
                {
                	case ST_READY :
                		echo '<p>Tous les champs doivent être renseignés, merci.</p>'; 
                		break;
                
                case ST_OK :
                		echo '<p>Votre message a bien été envoyé. Merci.</p><p><a href="/">Retour à la page 
                
                d\'accueil</a></p>'; 
                		session_destroy(); 
                		break;
                
                	case ST_PREVIEW :
                		echo '<p>Votre message et votre adresse e-mail sont valides et prêts à être envoyés. 
                	 	<br />Vous n\'avez plus qu\'à cliquer sur le bouton "Envoyer" sans oublier de répondre à la question 
                
                posée.<br />Prévisualisation :</p>'; 
                		break;
                
                	case ST_ERROR :
                		if (isset($msgerr) && !empty($msgerr))
                		{
                			echo "<p>".$msgerr."</p>";
                		}
                		else
                		{
                			echo "<p>Erreur non prévue !</p>";
                		}
                		break;	
                }
                
                ?> 
                
                
                <form id='contact' method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"" enctype="multipart/form-data"> 
                <p id='obj'>Utilisez ce formulaire et je vous réponds au plus vite, merci</p> 
                <p> 
                	<label for='objet'>Objet de votre message :<br /> 
                	<input type='text' name='objet' id='objet' tabindex='10' size='50' value='<?php echo $objet;?>' /> 
                	</label> 
                </p> 
                <p id="adr">
                	<label for="mail">Votre Adresse E-mail<br /> 
                	<input name="votremail" tabindex="20" size="40" type="text" id="mail" value="<?php echo $votremail; ?>" />
                	</label>
                </p> 
                <p id="tel">
                	<label for="telephone">Votre téléphone(facultatif, si vous d&eacute;sirez &ecirc;tre contact&eacute;s)<br /> 
                	<input name="votretelephone" tabindex="30" size="30" type="text" id="telephone" value="<?php echo 
                
                $votretelephone ?>" />
                	</label>
                </p> 
                <p id="msg">
                	<label for="message">Votre message<br /> 
                	<textarea tabindex="40" rows="10" cols="50" name="message" id="message"><?php echo $message; ?></textarea> 
                	</label>
                </p> 
                <?php 
                include("captcha.php");
                $captcha=new capcha(); // Création d'un nouvel objet (instance) de classe capcha
                
                
                $bouton_previsualiser='<p class="bt"><input type="submit" name="previsualiser" tabindex="3" value="Prévisualiser" 
                
                /></p>'; 
                $bouton_envoi='<p class="bt">'.$captcha->q().'&nbsp;<input type="text" name="reponse" id="reponse" size="4">&nbsp;'.
                	'<input name="envoi" tabindex="4" value="Envoyer" type="submit" /></p>'; 
                
                switch ($status) 
                {
                	case ST_READY :
                		echo $bouton_previsualiser.$bouton_envoi; 
                		break;
                
                	case ST_PREVIEW :
                		echo $bouton_envoi; 
                		break;
                
                	case ST_ERROR :
                		echo $bouton_previsualiser.$bouton_envoi; 
                		break;	
                }
                
                
                
                // Sauvegarde dans la session de la réponse attendue issue du captcha
                $_SESSION['solution'] = substr($captcha->word,$captcha->num-1,1);
                
                
                ?> 
                </form> 

                lien en ligne pour le test : http://refok.free.fr/standing-appart.com/pages/contact.php
                toujours le même genre d'erreurs ..... (j'y ai mis mon adresse mail!) et j'ai fais le test depuis le fichier form appelé dans cette page , c'est la même chose ...
                je dois encore avoir fait une erreur ... non ?
                @+
                b g
                0
                1. Modérateur
                  ok grand grand merci à toi !!!
                  je vois tout cela et je teste ...
                  @+
                  b g
                  0
                  1. Contributeur
                    J'ai oublié de détruire la session après avoir validé le forum. Remplace cette partie

                    	case ST_OK :
                    		echo '<p>Votre message a bien été envoyé. Merci.</p><p><a href="/">Retour à la page 
                    
                    d\'accueil</a></p>'; 
                    		break;

                    par :

                    	case ST_OK :
                    		echo '<p>Votre message a bien été envoyé. Merci.</p><p><a href="/">Retour à la page 
                    
                    d\'accueil</a></p>'; 
                    		session_destroy(); 
                    		break;


                    PS : testé sur free.fr, fonctionnel.
                    0
                    1. Contributeur
                      Tu fais ce que je t'ai dit :

                      1) la creation de session, au tout debut du fichier
                      2) tu supprimes la destruction inutile de session (forcément, si tu détruit la session, tu peux pas enregistrer le contenu du captcha...

                      et ca donne :

                      <?php
                      session_start(); // Restaure la session précédente ou démarre ou nouvelle session
                      
                      define("ST_READY", 0);  // La page a été appellée pour la 1ere fois (aucun bouton n'a donc pu être cliqué)
                      define("ST_OK", 1);  // La page a été appellée avec le bouton [Envoyer] et l'envoi du mail s'est bien passé
                      define("ST_PREVIEW", 2);  // La page a été avec le bouton [Prévisualiser]
                      define("ST_ERROR", 3);  // Une erreur s'est produite lors de la vérification de la page
                      
                      function remplacements_speciaux($txt)
                      {
                      	$txt=preg_replace('#(<|>)#', '-', $txt); 
                      	$txt=str_replace('"', "'",$txt); 
                      	$txt=str_replace('&', 'et',$txt);
                      	return $txt;
                      }
                      
                      
                      
                      function mail_valide($mail)
                      {
                      	// La variable $verif va nous permettre d'analyser si la sémantique de l'email est bonne 
                      	$verif='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#'; 
                      	return preg_match($verif,$mail);
                      }
                      
                      
                      
                      $reponse="";
                      // On regarde si la réponse a été postée par l'utilisateur
                      if (isset($_POST['reponse'])) $reponse=$_POST['reponse'];
                      
                      $message="";
                      $objet="";
                      $votretelephone="";
                      $votremail="";
                      
                      // On suppose qu'il y a une erreur par défaut même si ce n'est pas le cas. 
                      // Raisonnement par l'absurde en quelque sorte ...
                      $status=ST_ERROR;  
                       
                      //input button envoi/previsualiser 
                      $envoi=isset($_POST['envoi']) ? htmlentities($_POST['envoi']) : "";
                      $previsualiser=isset($_POST['previsualiser']) ? htmlentities($_POST['previsualiser']) : "";
                      
                      if (isset($_POST['message'])) 
                      { 
                      
                      	//quelques remplacements pour les specialchars 
                      	$message=remplacements_speciaux($_POST['message']); 
                      	$objet=isset($_POST['objet']) ? remplacements_speciaux($_POST['objet']) : "";
                      
                      	// On assigne et/ou protège nos variables 
                      	$votremail=stripslashes(htmlentities($_POST['votremail'])); 
                      	$message=stripslashes(htmlspecialchars($message)); 
                      	$objet=stripslashes(htmlspecialchars($objet)); 
                      
                      	$votretelephone=isset($_POST['votretelephone']) ? htmlentities($_POST['votretelephone']) : "";
                      
                      
                      	//on enlève les espaces 
                      	$votremail=trim($votremail); 
                      	$message=trim($message); 
                      	$objet=trim($objet); 
                      
                      	/*On vérifie si l'e mail et le message sont pleins, et on agit en fonction. 
                      	(on affiche Apercu du resultat, tel ou tel champ est vide, etc...*/ 
                      	//Si ca ne vas pas (mal rempli, mail non valide...) 
                      	if((empty($message)) or (empty($objet)) or (!mail_valide($votremail))) 
                      	{ 
                      		
                      		//les 3 champs sont vides 
                      		if(empty($votremail) and (empty($message)) and (empty($objet))) 
                      		{ 
                      			$msgerr='Tous les champs sont vides.'; 
                      		} 
                      		//un des champs est vide 
                      		else 
                      		{ 
                      			if(!mail_valide($votremail)) 
                      			{
                      				$msgerr='Votre adresse e-mail n\'est pas valide.'; 
                      			}
                      			else 
                      			{ 
                      				$msgerr='Il faut remplir tous les champs !'; 
                      			} 
                      		} 
                      	} 
                      	//Si les deux sont pleins et que l'adresse est valide, on envoie on on prévisualise sans envoi 
                      	else 
                      	{ 
                      		$domaine=preg_replace('#[^@]+@(.+)#','$1',$votremail); 
                      		$DomaineMailExiste=checkdnsrr($domaine,'MX'); 
                      		if(!$DomaineMailExiste) 
                      		{
                      			$msgerr='Le nom de domaine de l\'adresse e-mail que vous avez donné n\'existe pas.'; 
                      		}
                      		elseif(!empty($previsualiser)) 
                      		{ 
                      			$status=ST_PREVIEW; 
                      		} 
                      		elseif(!empty($envoi)) 
                      		{ 
                      
                      			// Test si la réponse au captcha est correcte !
                      			if (isset($_SESSION['solution']))
                      			{
                      				if ($_SESSION['solution'] != $reponse) 
                      				{
                      					$msgerr="Mauvaise réponse à la question posée ! Réessayez.";
                      				}
                      				else
                      				{
                      					$objet='[contact SITE info] : '.$objet; 
                      					$destinataire='monmail@monfai.info'; 
                      					$mail=$destinataire;
                      					
                      $headers='From:'.$votremail."\r\n".
                      'Subject:'.$objet."\r\n".
                      'Content-type: text/plain; charset=ISO-8859-1'."\r\n".
                      'Sent:'.date('l, F d, Y H:i');  			
                      		                        $message = $message."\nTéléphone : ".$votretelephone;
                      					if(mail($destinataire,$objet,$message,$headers)) 
                      					{ 
                      						$status=ST_OK;
                      					} 
                      					else 
                      					{
                      						$msgerr='Un problème est survenu durant l\'envoi du mail.'; 
                      					}
                      				}
                      			}
                      			else
                      			{
                      					$msgerr="Votre session a expirée ! Veuillez répondre de nouveau à la 
                      
                      question puis valider.";
                      			}
                      		} 
                      		else 
                      		{
                      			$msgerr='Une condition innatendue est survenue lors de l\'exécution du script.'; 
                      		}
                      	} 
                      } 
                      else 
                      { 
                      	$status=ST_READY;
                      } 
                      
                      
                      
                      switch ($status) 
                      {
                      	case ST_READY :
                      		echo '<p>Tous les champs doivent être renseignés, merci.</p>'; 
                      		break;
                      
                      	case ST_OK :
                      		echo '<p>Votre message a bien été envoyé. Merci.</p><p><a href="/">Retour à la page 
                      
                      d\'accueil</a></p>'; 
                      		break;
                      
                      	case ST_PREVIEW :
                      		echo '<p>Votre message et votre adresse e-mail sont valides et prêts à être envoyés. 
                      	 	<br />Vous n\'avez plus qu\'à cliquer sur le bouton "Envoyer" sans oublier de répondre à la question 
                      
                      posée.<br />Prévisualisation :</p>'; 
                      		break;
                      
                      	case ST_ERROR :
                      		if (isset($msgerr) && !empty($msgerr))
                      		{
                      			echo "<p>".$msgerr."</p>";
                      		}
                      		else
                      		{
                      			echo "<p>Erreur non prévue !</p>";
                      		}
                      		break;	
                      }
                      
                      ?> 
                      
                      
                      <form id='contact' method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"" enctype="multipart/form-data"> 
                      <p id='obj'>Utilisez ce formulaire et je vous réponds au plus vite, merci</p> 
                      <p> 
                      	<label for='objet'>Objet de votre message :<br /> 
                      	<input type='text' name='objet' id='objet' tabindex='10' size='50' value='<?php echo $objet;?>' /> 
                      	</label> 
                      </p> 
                      <p id="adr">
                      	<label for="mail">Votre Adresse E-mail<br /> 
                      	<input name="votremail" tabindex="20" size="40" type="text" id="mail" value="<?php echo $votremail; ?>" />
                      	</label>
                      </p> 
                      <p id="tel">
                      	<label for="telephone">Votre téléphone(facultatif, si vous d&eacute;sirez &ecirc;tre contact&eacute;s)<br /> 
                      	<input name="votretelephone" tabindex="30" size="30" type="text" id="telephone" value="<?php echo 
                      
                      $votretelephone ?>" />
                      	</label>
                      </p> 
                      <p id="msg">
                      	<label for="message">Votre message<br /> 
                      	<textarea tabindex="40" rows="10" cols="50" name="message" id="message"><?php echo $message; ?></textarea> 
                      	</label>
                      </p> 
                      <?php 
                      include("captcha.php");
                      $captcha=new capcha(); // Création d'un nouvel objet (instance) de classe capcha
                      
                      
                      $bouton_previsualiser='<p class="bt"><input type="submit" name="previsualiser" tabindex="3" value="Prévisualiser" 
                      
                      /></p>'; 
                      $bouton_envoi='<p class="bt">'.$captcha->q().'&nbsp;<input type="text" name="reponse" id="reponse" size="4">&nbsp;'.
                      	'<input name="envoi" tabindex="4" value="Envoyer" type="submit" /></p>'; 
                      
                      switch ($status) 
                      {
                      	case ST_READY :
                      		echo $bouton_previsualiser.$bouton_envoi; 
                      		break;
                      
                      	case ST_PREVIEW :
                      		echo $bouton_envoi; 
                      		break;
                      
                      	case ST_ERROR :
                      		echo $bouton_previsualiser.$bouton_envoi; 
                      		break;	
                      }
                      
                      
                      
                      // Sauvegarde dans la session de la réponse attendue issue du captcha
                      $_SESSION['solution'] = substr($captcha->word,$captcha->num-1,1);
                      
                      
                      ?> 
                      </form>  


                      et le résultat :

                      Votre message a bien été envoyé. Merci.
                      0
                      1. Modérateur
                        et maintenant ... ?
                        je fais quoi ???
                        @+
                        b g
                        0
                        1. Contributeur
                          session_start(); // Restaure la session précédente ou démarre ou nouvelle session
                          // Sauvegarde dans la session de la réponse attendue issue du captcha
                          $_SESSION['solution'] = substr($captcha->word,$captcha->num-1,1);


                          Tu as mis tout ca en entete ?
                          ton code d'erreur dit que $_SESSION['solution'] n'existe pas.
                          0
                          1. Modérateur
                            là faut me parler en " français "
                            Tu as mis tout ca en entete ? 

                            vois pas trop ce que tu veux dire ..
                            surtout que sur le site principal tout marche nickel avec le code d'origine
                            ...................prends ton temps ......... vois de près ........
                            @mitiés
                            b g
                            0
                        2. Modérateur
                          ok c'est fait
                          je viens d'essayer et :
                          Votre session a expirée ! Veuillez répondre de nouveau à la question puis valider.

                          @+
                          b g
                          0
                          1. Contributeur
                            Enleve ce session_start a la ligne 241.
                            Supprime cette condition de destruction de la session qui n'est pas utile.
                            0
                            1. Modérateur
                              je viens de la rétablir et j'ai toujours
                              Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/128/sdb/3/d/refok/standing-appart.com/form/form2b.php:154) in /mnt/128/sdb/3/d/refok/standing-appart.com/form/form2b.php on line 241

                              le fichier seul : http://refok.free.fr/standing-appart.com/form/form2b.php
                              @+
                              b g
                              0
                              1. Contributeur
                                J'ai pas bcp de temps, qq idées en vrac :

                                1) Pourquoi détruire la session ?
                                if (isset($_SESSION))
                                {
                                session_destroy();
                                }

                                2) le fichier est il inclus dans autre chose ? (j'ai pas tout lu du code...) il y a forcément qqchose qui est renvoyé au navigateur avant la creation de la session, c'est ce que te dit le message d'erreur.

                                http://www.toutestfacile.com/php/errormsgs/standard_header.php
                                1
                                1. Modérateur
                                  merci grizzly, j'ai mis ceci :
                                  <?php session_start(); 
                                  define("ST_READY", 0);  // La page a été appellée pour la 1ere fois (aucun bouton n'a donc pu être cliqué)
                                  define("ST_OK", 1);  // La page a été appellée avec le bouton [Envoyer] et l'envoi du mail s'est bien passé

                                  (en haut de code)
                                  et
                                  if (isset($_SESSION))
                                  {
                                  	session_destroy();
                                  }
                                  
                                  //session_start(); // Restaure la session précédente ou démarre ou nouvelle session
                                  // Sauvegarde dans la session de la réponse attendue issue du captcha
                                  $_SESSION['solution'] = substr($captcha->word,$captcha->num-1,1);
                                  ?> 
                                  </form> 

                                  en bas de code
                                  mais cela ne change pas grand chose ...
                                  il me reste cette avertissement qui coince l'envoi:
                                  Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/128/sdb/3/d/refok/standing-appart.com/pages/contact.php:10) in /mnt/128/sdb/3/d/refok/standing-appart.com/form/form2b.php on line 1

                                  le test est fait sur free (j'ai mis un dossier sessions mais cela ne change rien ....
                                  ??????
                                  @+
                                  b g
                                  0
                                  1. Contributeur
                                    session_start() doit être le premier argument lancé, avant tout envoi d'html... parfois même un espace cause des problèmes.

                                    <?php session_start(); ?>
                                    et tout ce que tu veux après...

                                    dans ta page, session_start() est à la fin... CQFD
                                    1