IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Conserver les données passées en POST


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut Conserver les données passées en POST
    Salut,
    j'ai ce formulaire de contact :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <FORM action="includes/fr/mailcontact.php" method="POST">
     
    <INPUT type="hidden" name="Subject" value="Contact">
     
     
    <?php echo $contact_email; ?><INPUT name="Mail" size="30" class="inputboxweb" ><br>
    <?php echo $contact_objet; ?> <INPUT name="Objet " size="30" class="inputboxnews"><br>
     
    <?php echo $contact_mess; ?> <br>
    <TEXTAREA cols="40" name="Message" rows="6" class="inputboximages"></TEXTAREA><br><br>
    <CENTER><INPUT type="submit" value="<?php echo $contact_envoyer; ?>" class="inputboxaudio"> <INPUT type="reset" value="<?php echo $contact_annuler; ?>" class="inputboxvideo"></CENTER>
     
    </FORM>
    Ce code est donc envoyé avec mailcontact.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
     
    $TO = "contact@****.com";
     
     
     
    $DEFAULT_EXIT_PAGE = "../../contact.php?message=Message bien envoyé!";
     
     
    $headers  = "From: Anonymous on $SERVER_NAME 
    <$mail>\n";
    $headers .= "Message de Reedle";
     
    $message = "";
     
    while (list($key, $val) = each($HTTP_POST_VARS)) { 
    	$message .= "$key : $val\n"; 
    } 
     
    $message .= "\nSent by ".gethostbyaddr($REMOTE_ADDR). " ($REMOTE_ADDR)\n";
     
    mail($TO, $subject, $message, $headers); 
    	// En : Send mail
    	// Fr : Envoi du mail 
     
    if(! $exit_page)
    	$exit_page = $DEFAULT_EXIT_PAGE;
     
    Header("Location: ".$exit_page);
     
    // Exit -> $exit_page
     
    ?>
    Mais entre les 2 je voudrais mettre un autre page (verifier.php) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    session_start();
    if ($_SESSION['cryptcode'] == md5($_POST['code']) and (!$_SESSION['cryptreload']))
       { 
      header('Location: mailcontact.php');
    }
       unset($_SESSION['cryptreload']);
       } 
      else {
           header('Location: ../../contact.php?message=Code incorrect!');
           $_SESSION['cryptreload']= true;
           }
    ?>
    Qui donc va vérifier si un code est correct ou non. Tout marche sauf un petit (énorme) problème, toutes les données du formulaire sont perdus en chemin ( faut croire que le chemin est long^^).
    Enfin, plus sérieusement, comment faire pour que les données ne soit pas perdus?

    Merci de votre aide.

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Il faut créer la session sur la page intermédiaire et après la récupérer sur la dernière page

    Tu n'as qu'à faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['post'] = $_POST
    Ca gardera tout le contenu de post dans une seul variable de sessions

  3. #3
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    Il faut mettre sa dans verifier.php ? si oui je ne vois pas comment , car j'ai essayé et j'ai des FATAL ERROR

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    dans le fichier intermédiaire oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    session_start();
    $_SESSION['post'] = $_POST;
    print_r($_SESSION['post']);
    print_r($_POST);
    Les print_r c'est juste pour vérifier qu'il y a bien quelque chose

  5. #5
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    J'ai mit sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    session_start();
    $_SESSION['post'] = $_POST;
    print_r($_SESSION['post']);
    print_r($_POST);
    session_start();
     
    if ($_SESSION['cryptcode'] == md5($_POST['code']) and (!$_SESSION['cryptreload']))
       { 
      header('Location: mailcontact.php');
    }
       unset($_SESSION['cryptreload']);
       } 
      else {
           header('Location: ../../contact.php?message=Code incorrect!');
           $_SESSION['cryptreload']= true;
           }
     
    ?>
    Et j'ai ca :
    Parse error: syntax error, unexpected '}' in /home/recherche/www/includes/fr/verifier.php on line 13

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Problème très complexe
    N'aurais-tu pas par hasard un } en trop ou mal placé vers la ligne... 13 (traduction du message d'erreur) ?

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Au passage : ne mets pas d'espaces dans un champ GET.
    => n'écris pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Location: ../../contact.php?message=Code incorrect!');
    mais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Location: ../../contact.php?message='.urlencode('Code incorrect!'));
    Autre chose : il est conseillé de mettre un exit() ou un die() juste après une redirection, sinon tu vas droit à l'erreur "headers already sent"...

  8. #8
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    j'ai mit ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
    session_start();
    $_SESSION['post'] = $_POST;
    print_r($_SESSION['post']);
    print_r($_POST);
     
    session_start();
     
    if ($_SESSION['cryptcode'] == md5($_POST['code']) and (!$_SESSION['cryptreload']))
       { 
      header('Location: mailcontact.php');
    exit()
     
       unset($_SESSION['cryptreload']);
    }
      else {
           header('Location: ../../contact.php?message=Code incorrect!');
           $_SESSION['cryptreload']= true;
           }
     
    ?>
    Et le résultat :
    Parse error: syntax error, unexpected T_UNSET in /home/recherche/www/includes/fr/verifier.php on line 14

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Et le ';' après exit() ?
    Au passage :
    1) exit() termine le script. Donc ton unset ne sera jamais réalisé.
    2) Pourquoi mets-tu 2 session_start() ?

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    je mettrais un ; derrière l'instruction exit()
    et je ne mettrais qu'un seul session_start

    edit : oups grillé par vg33

  11. #11
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    J'ai mi ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    session_start();
    $_SESSION['post'] = $_POST;
    print_r($_SESSION['post']);
    print_r($_POST);
     
     
    if ($_SESSION['cryptcode'] == md5($_POST['code']) and (!$_SESSION['cryptreload']))
       { 
      header('Location: mailcontact.php');
     
       unset($_SESSION['cryptreload']);
    exit();
    }
      else {
           header('Location: ../../contact.php?message=Code incorrect!');
           $_SESSION['cryptreload']= true;
    exit();
           }
     
     
    ?>
    Et j'ai ca:
    Array ( [Subject] => Contact [Mail] => contact@*.com [Objet_] => llfdekf [Message] => jklds [code] => 5KDCR ) Array ( [Subject] => Contact [Mail] => contact@*.com [Objet_] => llfdekf [Message] => jklds [code] => 5KDCR )
    Warning: Cannot modify header information - headers already sent by (output started at /home/recherche/www/includes/fr/verifier.php:4) in /home/recherche/www/includes/fr/verifier.php on line 10

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    kevinf, je vais encore être désagréable... 490 messages, et tu ne sais pas encore que tu ne dois rien envoyer au navigateur avant les headers, sinon tu as une erreur ?
    L'erreur, c'est tes 2 print_r() qui affichent le contenu de tes tableaux. Les headers sont donc envoyés automatiquement par php, il est donc impossible de les modifier ensuite.
    => supprime tes print_r(), et laisse la magie opérer

  13. #13
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    Le message part mais sans les données POST...

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Quel est ton script de départ modifié ? Et ton script d'arrivée ?

  15. #15
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    J'ai ce formulaire de contact :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <FORM action="includes/fr/verifier.php" method="POST">
     
    <INPUT type="hidden" name="Subject" value="Contact">
     
     
    <?php echo $contact_email; ?><INPUT name="Mail" size="30" class="inputboxweb" ><br>
    <?php echo $contact_objet; ?> <INPUT name="Objet " size="30" class="inputboxnews"><br>
     
    <?php echo $contact_mess; ?> <br>
    <TEXTAREA cols="40" name="Message" rows="6" class="inputboximages"></TEXTAREA><br><br>
      <img src="crypt/cryptographp.php"><br>
      Recopier le code:<br><input type="text" name="code"><br>
    <CENTER><INPUT type="submit" value="<?php echo $contact_envoyer; ?>" class="inputboxaudio"> <INPUT type="reset" value="<?php echo $contact_annuler; ?>" class="inputboxvideo"></CENTER>
     
    </FORM>
    Ensuite la page verifier.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
    session_start();
    $_SESSION['post'] = $_POST;
     
     
     
    if ($_SESSION['cryptcode'] == md5($_POST['code']) and (!$_SESSION['cryptreload']))
       { 
      header('Location: mailcontact.php');
     
       unset($_SESSION['cryptreload']);
    exit();
    }
      else {
           header('Location: ../../contact.php?message=Code incorrect!&lang=fr');
           $_SESSION['cryptreload']= true;
    exit();
           }
     
     
    ?>
    Et enfin mailcontact.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
     
    $TO = "contact@*.com";
     
     
     
    $DEFAULT_EXIT_PAGE = "../../contact.php?message=Message bien envoyé!&lang=fr";
     
     
    $headers  = "From: Anonymous on $SERVER_NAME 
    <$mail>\n";
    $headers .= "Message de Reedle";
     
    $message = "";
     
    while (list($key, $val) = each($HTTP_POST_VARS)) { 
    	$message .= "$key : $val\n"; 
    } 
     
    $message .= "\nSent by ".gethostbyaddr($REMOTE_ADDR). " ($REMOTE_ADDR)\n";
     
    mail($TO, $subject, $message, $headers); 
    	// En : Send mail
    	// Fr : Envoi du mail 
     
    if(! $exit_page)
    	$exit_page = $DEFAULT_EXIT_PAGE;
     
    Header("Location: ".$exit_page);
     
    // Exit -> $exit_page
     
    ?>
    Tout ces codes m'envoi bien le mail mais sans auccun champ du formulaire de contact.php.

    Avant je n'avait pas le fichier verifier.php et tout marchait bien.

  16. #16
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Point positif : Tes post sont en sessions
    Tu retires les print_r et sur la dernière page tu les récupères avec par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['post']['message']

  17. #17
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    1) $HTTP_POST_VARS est déprécié. Tu dois utiliser $_POST.
    2) Tes données ne sont plus en POST (elles ne sont transmises ainsi qu'au script de traitement indiqué dans le action de ton form).
    C'est pour cela que kerod te demandait de mettre tes données en session.
    Il suffit donc de remplacer dans ta page mailcontact.php tous tes $HTTP_POST_VARS par $_SESSION['post'].

  18. #18
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    Donc j'ai mis ca , j'ai pas tout compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
     
    $TO = "contact@*.com";	
    $DEFAULT_EXIT_PAGE = "../../contact.php?message=Message bien envoyé!&lang=fr";
     
     
    $headers  = "From: Anonymous on $SERVER_NAME 
    <$mail>\n";
    $headers .= "Message de Reedle";
     
    $message = "";
     
    while (list($key, $val) = each($_SESSION['post'])) { 
    	$message .= "$key : $val\n"; 
    } 
     
    $message .= "\nSent by ".gethostbyaddr($REMOTE_ADDR). " ($REMOTE_ADDR)\n";
     
    mail($TO, $subject, $message, $headers); 
    	// En : Send mail
    	// Fr : Envoi du mail 
     
    if(! $exit_page)
    	$exit_page = $DEFAULT_EXIT_PAGE;
     
    Header("Location: ".$exit_page);
     
    // Exit -> $exit_page
     
    ?>
    Et:
    Warning: Variable passed to each() is not an array or object in /home/recherche/www/includes/fr/mailcontact.php on line 13

    Warning: Cannot modify header information - headers already sent by (output started at /home/recherche/www/includes/fr/mailcontact.php:13) in /home/recherche/www/includes/fr/mailcontact.php on line 26

  19. #19
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    ARGHH !
    Et le session_start() ?

  20. #20
    Membre actif Avatar de kevinf
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    863
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 863
    Points : 225
    Points
    225
    Par défaut
    Je l'avais mis et ca marchait pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
    session_start() 
    $TO = "contact@*.com";	
    $DEFAULT_EXIT_PAGE = "../../contact.php?message=Message bien envoyé!&lang=fr";
     
     
    $headers  = "From: Anonymous on $SERVER_NAME 
    <$mail>\n";
    $headers .= "Message de Reedle";
     
    $message = "";
     
    while (list($key, $val) = each($_SESSION['post'])) { 
    	$message .= "$key : $val\n"; 
    } 
     
    $message .= "\nSent by ".gethostbyaddr($REMOTE_ADDR). " ($REMOTE_ADDR)\n";
     
    mail($TO, $subject, $message, $headers); 
    	// En : Send mail
    	// Fr : Envoi du mail 
     
    if(! $exit_page)
    	$exit_page = $DEFAULT_EXIT_PAGE;
     
    Header("Location: ".$exit_page);
     
    // Exit -> $exit_page
     
    ?>
    Et:
    Parse error: syntax error, unexpected T_VARIABLE in /home/recherche/www/includes/fr/mailcontact.php on line 3

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] Comment mettre à jour en conservant les données actuelles d'un champs
    Par MisterMacPhisto dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 17/04/2007, 15h49
  2. réaffichage d'une page en conservant les données
    Par tetedeturcq dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/04/2007, 16h48
  3. Réponses: 12
    Dernier message: 28/04/2006, 11h38
  4. [MySQL] Taille limite des données passées par POST
    Par FoxLeRenard dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/03/2006, 17h46
  5. Réponses: 8
    Dernier message: 19/05/2005, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo