Résolu Problème formulaire ! [RESOLU]

Solutions (2)
Tags :
  • Define
  • Programmation
|
bonjour,
petit formulaire sympa, mais qui me met sans cesse " Votre session a expirée ! Veuillez répondre de nouveau à la question puis valider. " :cry: 
le code :
Citation :
<?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] : '.$objet;
$destinataire='monmail@mondomaine.ici';
$mail=$destinataire;

$headers='From:'.$votremail."\r\n".
'Subject:'.$objet."\r\n".
'Content-type: text/plain; charset=utf-8'."\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>( <u>Tous les champs doivent être renseignés, merci.</u> )</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'><strong>Utilisez ce formulaire et nous vous répondons au plus vite, merci</strong></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(si vous désirez être contacté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().' <input type="text" name="reponse" id="reponse" size="4"> '.
'<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 captcha:
Citation :
<?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]);
}
}
?>

le premier est appelé dans une autre page avec ceci : " <?php include "form1.php"; ?> "
et le pire est qu'il fonctionne ailleurs ....
:heink: 
Contenus similaires
Meilleure solution
partage
|
bon laissez tomber !!!
encore oublié de mettre ceci :
Citation :
<?php
if (!isset($_SESSION))
{
session_start(); // Restaure la session précédente ou démarre ou nouvelle session
}
?>

dans la page de contact !
  • Commenter cette solution |
Score
0
òh
òi
, IDNaute |
Meilleure réponse sélectionnée par Dafen@IDN.
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS