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 :

[PHP-JS] Traitement des données dans une autre page...


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 73
    Points
    73
    Par défaut [PHP-JS] Traitement des données dans une autre page...
    Bonjour à tous,

    J'ai une page PHP dans laquelle il y a un formulaire. J'aimerais que ce formulaire ouvre une page dans une autre fenêtre et que cette page fasse le traitement des données. Ensuite, une fois le traitement terminé, elle "refresh" la fenêtre parent et se ferme elle-même (ce côté est fait en Javascript...)

    Mon problème est que je dois programmer avec un Doctype strict. Normalement, j'utiliserais "target='_blank'" mais ça n'existe plus dans le html 4.01 avec un Doctype Strict. Je dois donc trouver un moyen d'ouvrir une autre fenêtre pour y envoyer les données en POST.

    J'ai essayé différentes alternatives, mais toutes sans succès. Les données du formulaire ne sont jamais envoyé dans la nouvelle page créée.

    Le but d'ouvrir une autre fenêtre est que je veux empêcher de garder les données du formulaire dans la navigation principale de sorte que l'utilisateur puisse faire des "back" et des "next" à volonté sans jamais réenvoyer les données - à moins de recliquer sur le bouton, alors là ça ne sera pas mon problème.

    Est-ce que quelqu'un aurait une suggestion?
    Merci beaucoup.

    Sébastien

  2. #2
    Membre actif Avatar de bigsister
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2002
    Messages : 314
    Points : 265
    Points
    265
    Par défaut
    et si tu mets tes fomulaires dans un iframe c'est pas plus simple ?

  3. #3
    Membre éprouvé Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Points : 1 009
    Points
    1 009
    Par défaut
    Changes d'algorythme.
    Tu peux le faire sans target="_blank", sans refresh et autre.
    Consultant idéaliste.

  4. #4
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    tiens je me suis amusé a faire un petit test sans iframe ni popup ni nouvelle fenêtre...
    bon, il y a peut-être des améliorations à faire, mais c'est fait rapidou et si ça peut donner des idées

    donc la page test.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
     
    <?php
    session_start();
     
    $msg=(!isset($_SESSION['result']))?('aucune encore...'):($_SESSION['result']);
     
    ?>
     
    <html>
    <head><title>test.php</title></head>
    <body>
    <a href="test2.php">faire le test</a>
    <br />
    <span style="font-weight: bolder;">Dernière configuration connue : <?php echo $msg; ?></span>
    <span
    </body>
    </html>
    puis la page test2.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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    <?php
    session_start();
     
    $msg = '';
     
     
    // si le formulaire a ete envoye
    if( isset($_POST['sub']) ) {
     
       // si 'nom' est vide
       if( !empty($_POST['nom']) ) {
     
          // je traite les donnees
          // ici
          // ensuite j'enregistre la variable en session
          $_SESSION['nom']=$_POST['nom'];
     
          // redirection vers la page suivante
          header ("Location: test3.php");
          exit();
     
     
       }else {
     
          // le champs est vide
          // je marque le message d'erreur et
          // je laisse continuer le script
          $msg = "<hr/><b>Le champs est vide !!</b><hr/>";
     
       }
    }
     
    $nom=(!isset($_SESSION['nom']))?(''):($_SESSION['nom']);
    ?>
    <html>
    <head><title>test2.php"</title></head>
    <body>
     
    <span style="color: #FF0000;font-weight:bolder;"><?php echo $msg; ?></span>
     
    <form method="post" action="test2.php">
       <label>Nom : </label><input type="text" name="nom" value="<?php echo $nom; ?>" /><br />
       <input type="button" name="ret" value="Précédente" onclick="window.location.replace('test.php');" />
       <input type="submit" name="sub" value="Suivante" />
    </form>
     
    </body>
    </html>

    et enfin le test3.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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    <?php
    session_start();
     
    // declarations
    $msg = '';
     
     
    // si on arrive sans avoir fait la precedente (test2)
    // on retourne a celle-ci
    if(!isset($_SESSION['nom'])) {
       header("Location: test2.php");
       exit();
    }
     
    // si le formulaire a ete envoye
    if( isset($_POST['sub']) ) {
     
       // si 'nom' est vide
       if( !empty($_POST['prenom']) ) {
     
          // je traite les donnees
          // ici
          $_SESSION['result']=$_SESSION['nom']." ".$_POST['prenom'];
     
          // ensuite je tue la variable de session
          unset ($_SESSION['nom']);
     
          // et je redirige
          header("Location: test.php");
          exit();
     
     
       }else {
     
          // le champs est vide
          // je marque le message d'erreur et
          // je laisse continuer le script
          $msg = "<hr/><b>Le champs est vide !!</b><hr/>";
     
       }
    }
    ?>
    <html>
    <head><title>test3.php"</title></head>
    <body>
     
    <span style="color: #FF0000;font-weight:bolder;"><?php echo $msg; ?></span>
     
    <form method="post" action="test3.php">
       <label>Prénom : </label><input type="text" name="prenom" value="" /><br/>
       <input type="button" name="ret" value="Précédente" onclick="window.location.replace('test2.php');" />
       <input type="submit" name="sub" value="Valider" />
    </form>
     
    </body>
    </html>

  5. #5
    Membre éprouvé Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Points : 1 009
    Points
    1 009
    Par défaut
    Un truc classique quoi... On pourrait même pousser le vice en collant tout le code dans une page unique mais on perdrait en visibilité.
    Consultant idéaliste.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par ska_root
    tiens je me suis amusé a faire un petit test sans iframe ni popup ni nouvelle fenêtre[...]
    J'ai essayé ta technique, mais lorsque je traite les données pour les envoyer à la base de données, il l'ajoute à chaque fois.... En tout cas, peut-importe, j'ai trouvé exactement ce que je voulais et je vais le partager avec vous !

    Voici le Form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form id="reponse" action="test1.php" method="post">
    <p>
    Prenom : <input type="text" name="prenom" value="" /><br />
    Nom: <input type="nom" /><br />
    <input type="button" onclick="validation( reponse );" value="Envoyer" /></p>
    </form>
    Maintenant, voici le Javascript appelé par le Form:
    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
    <script language="javascript" type="text/javascript">
    function validation( leForm )
    {
    	/* VALIDATION DES CHAMPS BLA BLA BLA */
     
    	sendForm( leForm );
    }
     
    function sendForm( leForm )
    {
       window.open("test1.php", "popup", "height=440,width=640,menubar='no',toolbar='no',location='no',status='no',scrollbars='no'");
       leForm.target = "popup";
       leForm.submit();
    }
    </script>
    J'ouvre la nouvelle fenêtre. J'exécute le formulaire et je fais le traitement approprié. Bien sûr, je valide les champs en Javascript avant toutes exécutions.

    Maintenant, en détail, la page test1.php. La fonction window.open() ouvre la nouvelle fenêtre avec test1.php à l'intérieur sans Form. La page test1.php vérifie s'il y a les variables en POST. Les variables ne sont pas encore déclarées étant donnée qu'il n'y a pas encore de Form. Donc, la page ne fait rien.

    Ensuite, la fonction leForm.target fait pointé l'exécution du Form vers la nouvelle fenêtre ouverte.

    Finalement, la fonction submit exécute le Form (action="test1.php"). La page se rappelle. Vérifie les données en POST et fait le traitement dont j'ai besoin.

    À la fin du traitement des données dans test1.php, j'exécute le code Javascript suivant pour rediriger le parent et fermer l'enfant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    if ( ( isset( $_POST['prenom'] ) ) && ( isset( $_POST['nom'] ) ) )
    {
    	/* TRAITEMENT DES DONNÉES */
    }
    ?>
    <script language="javascript">
    	window.opener.location = "/index.php";
    	self.close();
    </script>
    Je crois vraiment que ce code est complet. La navigation est vraiment séparée du traitement des données.

    Merci ska_root, tu m'as mis sur une très bonne piste et je remercie tout ceux qui se sont donné la peine de lire et surtout de répondre à mon interrogation. Merci merci merci.

    Sébastien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Remplacer des données dans une autre feuille
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/04/2009, 19h44
  2. Réponses: 26
    Dernier message: 01/07/2006, 13h14
  3. [Formulaires] Traitement des données dans une autre page...
    Par sekiryou dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/03/2006, 09h08
  4. passer des données a une autre page php
    Par questionneuse dans le forum Langage
    Réponses: 10
    Dernier message: 25/01/2006, 00h56
  5. Réponses: 4
    Dernier message: 19/09/2005, 15h59

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