Form et captcha

Résolu
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   -  
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   -
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

19 réponses

gryzzly Messages postés 4608 Date d'inscription   Statut Contributeur Dernière intervention   1 335
 
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
gryzzly Messages postés 4608 Date d'inscription   Statut Contributeur Dernière intervention   1 335
 
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
gryzzly Messages postés 4608 Date d'inscription   Statut Contributeur Dernière intervention   1 335
 
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
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   2 409
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   2 409
 
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
gryzzly Messages postés 4608 Date d'inscription   Statut Contributeur Dernière intervention   1 335
 
Enleve ce session_start a la ligne 241.
Supprime cette condition de destruction de la session qui n'est pas utile.
0
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   2 409
 
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
gryzzly Messages postés 4608 Date d'inscription   Statut Contributeur Dernière intervention   1 335
 
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
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   2 409
 
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
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   2 409
 
et maintenant ... ?
je fais quoi ???
@+
b g
0
gryzzly Messages postés 4608 Date d'inscription   Statut Contributeur Dernière intervention   1 335
 
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
gryzzly Messages postés 4608 Date d'inscription   Statut Contributeur Dernière intervention   1 335
 
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
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   2 409
 
ok grand grand merci à toi !!!
je vois tout cela et je teste ...
@+
b g
0
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   2 409
 
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
gryzzly Messages postés 4608 Date d'inscription   Statut Contributeur Dernière intervention   1 335
 
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
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   2 409
 
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
gryzzly Messages postés 4608 Date d'inscription   Statut Contributeur Dernière intervention   1 335
 
0
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   2 409
 
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
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   2 409
 
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
bg62 Messages postés 23731 Date d'inscription   Statut Modérateur Dernière intervention   2 409
 
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