Cookie session

Cry13
Invité n'ayant pas de compte PHPfrance

28 oct. 2010, 21:17

Bonjour à tous,

Alors voilà je suis sur un formulaire avec une session et un capchta.

Il fonctionne très bien, mais je voudrais faire une petite modif, le client qui arrive d'une page précédente aura préalablement cliqué sur un lien qui donne :

href="http://www.monsite/contact.php?destinat ... 3nixhunt3r"

Pour arriver sur ma page de contact composé comme suit :
<?php
	ini_set('url_rewriter.tags','a=href,area=href,frame=src,iframe=src,input=src');
	session_start();
	
	if(isset($_POST['f_1'])) { $_SESSION['f_1'] = $_POST['f_1']; }
	if(isset($_POST['f_2'])) { $_SESSION['f_2'] = $_POST['f_2']; }
	if(isset($_POST['f_3'])) { $_SESSION['f_3'] = $_POST['f_3']; }
	if(isset($_POST['f_4'])) { $_SESSION['f_4'] = $_POST['f_4']; }
	if(isset($_POST['f_5'])) { $_SESSION['f_5'] = $_POST['f_5']; }
	if(isset($_POST['f_6'])) { $_SESSION['f_6'] = $_POST['f_6']; }
	if(isset($_POST['f_7'])) { $_SESSION['f_7'] = $_POST['f_7']; }
	if(isset($_POST['f_8'])) { $_SESSION['f_8'] = $_POST['f_8']; }
	if(isset($_POST['f_9'])) { $_SESSION['f_9'] = $_POST['f_9']; }
	if(isset($_POST['f_10'])) { $_SESSION['f_10'] = $_POST['f_10']; }
	if(isset($_POST['f_11'])) { $_SESSION['f_11'] = $_POST['f_11']; }
	if(isset($_POST['destinataire'])) { $_SESSION['destinataire'] = $_POST['destinataire']; }
	if($f_1==''){$f_1='Selectionnez';}
	if($f_10==''){$f_10='Selectionnez';}
	if($destinataire==''){$destinataire='..........';}
	
	require('modules/head.php');
	
	require('modules/header.php');
?>


  <div id="contenu">
  	<div id="centre">
    
    	<h2>Contact <?php echo $destinataire; ?></h2>      
    
	<?php
		$number = mb_strtoupper($_POST['imagever']);
        $ip = $_SERVER['REMOTE_ADDR'];
        if(isset($_POST['submit'])){
        $erreur='';

        while(list($var,$val)=each($_POST)){
            if(!is_array($val)){
                $$var=strip_tags($val);}
            else{
                while(list($arvar,$arval)=each($val)){
                    $$var[$arvar]=strip_tags($arval);}}}

        $f_1=trim(ucwords(eregi_replace('[^a-zA-Z0-9&eacute;èàäö\ -]', '', $f_1)));
        $f_2=strip_tags(trim($f_2));
        $f_3=strip_tags(trim($f_3));			

        if(strlen($f_2)<4){
        $erreur.='<p class="texte_erreur">Le champ &laquo; Nom &raquo; est vide ou incomplet.</p>';
        $errf_2=1;
        }
        if(strlen($f_9)<5){
        $erreur.='<p class="texte_erreur">Le champ &laquo; E-mail &raquo; est vide ou incomplet.</p>';
        $errf_9=1;
        }else{
        if(!ereg('^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+'.
        '@'.
        '[-!#$%&\'*+\/0-9=?A-Z^_`a-z{|}~]+\.'.
        '[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+$',
        $f_9)){
        $erreur.='<p class="texte_erreur">La syntaxe de votre adresse e-mail n&rsquo;est pas correcte.</p>';
        $errf_9=1;
        }elseif (md5($number) != $_SESSION['image_random_value']) { 
        $erreur2.=  '<span class="texte_erreur">Erreur dans le code de s&eacute;curit&eacute;.</span>';
        }	
        }
        
        if(strlen($f_11)<2){
        $erreur.='<p class="texte_erreur">Le champ &laquo; Message &raquo; est vide ou incomplet.</p>';
        $errf_11=1;
        }
        if(md5($number) != $_SESSION['image_random_value'])
        {
        $erreur.='<p class="texte_erreur">Erreur dans le code de s&eacute;curit&eacute;.</p>';
        $errnumber=1;
        }
        if($erreur==''){
          
		            
        $titre="Contact pour ".$destinataire."\r\n";
        $tete="From: ".$f_9."" . "\r\n";
	$tete="Bcc:......................fr\r\n";
        $tete .='Content-Transfer-Encoding: 8bit' . "\r\n";
        $tete .='Content-type: text/plain; charset=UTF-8' . "\r\n";
        
        $corps.="Civilite : ".$f_1."\n";
        $corps.="Nom : ".$f_2."\n\n";			
        $corps.="Societe : ".$f_3."\n\n";			
        $corps.="Rue : ".$f_4."\n";
        $corps.="Code Postal : ".$f_5."\n";
        $corps.="Ville : ".$f_6."\n\n";			
        $corps.="Telephone : ".$f_7."\n";
        $corps.="Telephone Mobile : ".$f_8."\n\n";
        $corps.="Adresse e-mail : ".$f_9."\n\n";			
        $corps.="Sujet du message : ".$f_10."\n";
        $corps.="Message : ".$f_11."\n";
        
        if(mail("".$destinataire."@gmail.com", $titre, stripslashes($corps), $tete)){
        $ok_mail='true';
		session_destroy();  
        }else{
        $erreur.='<p class="texte_erreur">Une erreur est survenue lors de l&rsquo;envoi du message, veuillez refaire une tentative.</p>';
        }
        }
        }
    ?>
        
	<?php if($ok_mail=='true'){ ?>    
    <div id="contact_ok">
        <p class="or_contact">Le message ci-dessous nous a bien &eacute;t&eacute; transmis,<br/>et nous vous en remercions.</p>
        <p class="or_contact"><?php echo nl2br(stripslashes($corps)); ?></p>
        <p class="or_contact">Nous allons y donner suite dans les meilleurs d&eacute;lais.<br/>A bient&ocirc;t.</p>
    </div>
    
    <?php }else{ ?>            
        <?php if($erreur){ ?>
        <div id="contact_erreur">
        	<p id="titre_erreur">Votre message n&rsquo;a pas &eacute;t&eacute; transmis :</p>
        </div>
        <?php echo $erreur ?>         
        <?php } ?>
le problème c'est que lorsque je valide le formulaire et qu'il soit valide ou non ma variable destinataire se vide. une idée ?
Si quelqu'un vois mon erreur, merci par avance pour votre aide.

Cry13

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 oct. 2010, 21:43

Salut,

Tu passe de $_POST['destinataire'] a $destinataire y a comme un soucis (sauf extract ou auto declaration des super globale maisn c'est bof )

Tu n'aurais pas mi un espace dans les test ?
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 14 Messages

28 oct. 2010, 22:06

merci pour ta réponse,

Pour ce qui est des espaces, non j'en ais mis nul part, ce que je ne comprend pas c'est que lorsque j'arrive de la page précédente ma variable est bien déclaré, que je la stock dans la session comme toute les autres et que lorsque je valide mon formulaire paf ! plus de variable.

J'ai l'impression que tant qu'elle est dans la barre d'adresse tout va bien mais qu'elle ne se stock pas vraiment en session.

PS : Merci à l'Admin pour son efficacité !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 oct. 2010, 22:23

Si la valeur est dans ta barre d'adresse, c'est qu'elle est transmise en GET et non en POST lorsque tu arrives sur ta page ... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 14 Messages

28 oct. 2010, 22:32

Pouwa !

Merci monsieur !
if(isset($_POST['destinataire'])) { $_SESSION['destinataire'] = $_POST['destinataire']; }
remplacer par :
if(isset($_GET['destinataire'])) { $_SESSION['destinataire'] = $_GET['destinataire']; }
Et juste quand la bouffe est prête.

P.S. : Je le savais pour le $_GET mais je penser qu'il passerais en post suite à la 1ere ligne mais vu que je récupéré une valeur en post qui n'existait pas ;-)

Encore merci à tous !