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 :

popup + formulaire + tableau


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut popup + formulaire + tableau
    bonjour,

    j'espère ne pas me tromper de forum, si c'est le cas, d'avance mes excuses.

    depuis hier je sèche sur le passage de parametres entre une popup et une page appelante. ce n'est pourtant pas les discussions qui manquent ! mais la je jette l'éponge et je vous expose mon problème :

    sur une page : new.php il y a un formulaire : origine qui appelle une popup qui possède elle aussi un formulaire addUnite.

    le formulaire AddUnite me permet de stocker dans un tableau une liste d'unite et leur responsable .

    ce que je n'arrive pas a faire : passer mon tableau $respP à ma page appelante : new.php.

    appel de la popup :
    <a href="#" onClick="window.open('AddUnit.php','Ajout des unités','toolbar=no,status=no,width=500 ,height=280,scrollbars=yes,location=no,resize=yes,menubar=no')">Ajouter les unités</a><br>

    2 questions :
    comment transmettre mon tableau et fermer la popup en meme temps ?
    comment affecter le tableau au formulaire de la page appelante qui n'a pas encore ete envoyé ? est ce faisable ?

    merci d'avance,

    naïma

  2. #2
    Invité
    Invité(e)
    Par défaut
    en javascript tu peut appeler des fonction ou aller chercher des variables de la page ouvrante.

    A tu essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script>alert(parent.tab_valeur)</script>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script>alert(opener.tab_valeur)</script>
    sinon en php envoi en parametre dans l'url ton tableau (si il est en 1 dimension) avec les valeur collée par des ";" le tout encodé en base 64, que tu décode dans AddUnit.php J'ai pas le temp de faire le code pour ça, si tu veut je te le pond demain.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    bonsoir,

    merci de la réponse,
    pourquoi faut il que le tableau soit a 1 dimension ?
    J'ai effectivement remarqué que quand je rajoute mon tableau en paramètre, rien ne se passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<a href=\"javascript:window.opener.location.replace('new.php?pop=OK&resp=$resP'); window.close()\">Fermer la fenêtre</a>";
    $resP etant mon tableau que je remplis de la manière suivante :
    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
    ....
    		  <?
    			if ($_POST['uniteP']){
    				//echo "<table border='0' class='table'><form name='list' action='new.php?pop=OK' onsubmit=\" Reporter(this); \">";
    				echo "<table border='0' class='table'><form action='AddUnit.php' method='post'>";
    				$tab = $_POST['uniteP'];
    				foreach ($tab as $unite) {
    					echo "<TR><td>Choix du scientifique de l'unite $unite<br>";
    					echo "<SELECT NAME='respP[$unite]'>";
    					$query = "SELECT t1.idResponsable, t1.nomResponsable, t1.prenomResponsable FROM responsable t1, unite t2 where t1.idUnite=t2.idunite and t1.idUnite=$unite";
     
    					$result = mysql_query($query);
    					if (mysql_num_rows($result) > 0) {
    						// Recuperation des resultats
    						while($row = mysql_fetch_object($result)){
    							echo "<OPTION NAME='respP' value='".$row->idResponsable."'>".$row->nomResponsable .' '. $row->prenomResponsable ."</OPTION>";	
    						}
    						mysql_free_result($result);
    					} 		
    					echo "</TD></TR>";
    				}
    				echo "</TABLE>";
    			}
    		  ?>
     
    ....
     
    <?
    if ($_POST['enregistrer']) {
        $resP = $_POST['respP'];
    					foreach ($resP as $key=>$responsable) {
    						echo "idUnit = ".$key . "idResp = ".$responsable."<br>";
    					}
    					//$resP = serialize($resP);
    					//echo "<A HREF=\"javascript:self.close()\" onClick=\"window.opener.location.href='new.php?pop=OK&resp=$resP'; windows.close(); return(true);\">Fermer</A>";
    					echo "<a href=\"javascript:window.opener.location.replace('new.php?pop=OK&resp=$resP'); window.close()\">Fermer la fenêtre</a>";
    				}
     
    			?>
    a+
    nina

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    bonsoir,

    le probleme du passage de tableau est resolu!
    il fallait, en plus de serialiser, encoder en base 64....

    ensuite je n'ai plus qu'a mettre dans le formulaire de la fenetre appelante mon tableau transmis par get dans un champs cache :
    <TR><td><input type='hidden' name='listUnitP' value='<?echo $_GET['resp'];?>'></td></TR>

    Ainsi lorsque je soumet le formulaire de la page appelante je recupere bien mes valeurs stockees dans le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?
    				if ($_POST['enregistrer']) {
    					$resP = $_POST['listUnitP'];
    					$tab = unserialize(base64_decode($resP));
    					foreach ($tab as $key=>$responsable) {
    						echo "idUnit = ".$key . "idResp = ".$responsable."<br>";
    					}					
     
    				}
    			?>
    voila si ca peux aider ...

    par contre je ne sais toujours pas comment fermer la popup via le bouton submit du formulaire, sans passer par le lien "fermer la fenetre" qui oblige a cliquer 2 fois...

    si qqu'un peut m'aider sur ce point (je ne connais pas trop le js)
    merci,

    n

  5. #5
    Invité
    Invité(e)
    Par défaut
    2 solution :
    1/ sur le formulaire tu a l'évènement onsubmit
    2/ sur le submit tu a l'évènement onclick

    sur un de ces évènement tu fait windows.close();
    PS : pense a mettre "resolu"

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    merci,

    la solution 1 marche avec l'ecriture onsubmit="window.close"

    pour la solution 2, les 3 ecritures ne marchent pas :
    onsubmit="window.close"
    onsubmit="windows.close"
    onsubmit="self.close"

    j'ai retenu l'evenement on submit dans le formulaire, mais...

    je ne recupere plus mon tableau depuis la page appelante, ainsi si je fais :

    if ($_POST['respP']){
    echo "tableau recu";
    }

    et je n'ai rien...

    comment serialiser/encoder juste avant l'envoi du formulaire et la fermeture de la popup ? est ce possible ?

    merci d'avance,
    n

  7. #7
    Invité
    Invité(e)
    Par défaut
    Pour le bouton c'est sur le "onclick" et non "onsubmit", pour fermer au retour de ton formulaire, en php tu fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<script>window.close();</script>"
    pour faire plus classe tu peut mettre un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Votre requète a reussi La page va se fermer dans 3 secondes.<script>setTimeout('window.close();',3000);</script>"
    Apres avoir analysé / traité le post.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    autant pour moi !

    malheureusement ca ne change rien : le formulaire est envoyé et la popup fermée. OK. mais le tableau ne passe pas... Est ce faisable ?

    ou alors je laisse ma solution actuelle : le formulaire est envoyé à la popup et je met un lien "fermez la fenêtre" qui me permet de sérialiser/encoder le tableau.

    solution que je trouve hasardeuse car si l'utilisateur ne click pas sur le lien le tableau ne sera pas transmis !

    mais s'il n'y a pas de solution, tant pis.

    merci,

    n

  9. #9
    Invité
    Invité(e)
    Par défaut
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<script>window.close();</script>"
    tu peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<script>window.opener.location.replace('new.php?pop=OK&resp=$resP);window.close();</script>"
    non ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    oui ça devrait marcher. je devrais pouvoir recuperer la variable $_GET['pop']
    mais pas $_GET['resp']

    car le formulaire étant soumis et la popup fermée en même temps :
    je n'ai pas le temps de récupérer ma variable $_POST['respP'] de la sérialiser et de la passer comme tu me le dis :
    window.opener.location.replace('new.php?pop=OK&resp=$resP);window.close();

    non ?

    a+
    n

  11. #11
    Invité
    Invité(e)
    Par défaut
    ben si vu que le code php qui affiche window.location machin tu l'appelle apres avoir validé ton formulaire et fait tes calculs.

    Dans l'idée, au lieu d'afficher un lien, avec otn tableau serializé, tu affiche un code javascript qui va faire comme si l'utilisateur cliquai sur le lien

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    (?)
    voila le formulaire de la popup AddUnit.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
      <?
    ....
    			if ($_POST['uniteP']){				
    				echo "<table border='0' class='table'><form  method='post' onclick=\"window.opener.location.replace('new.php?pop=OK&resp=$resP');window.close();\" >";
     
    				$tab = $_POST['uniteP'];
    				foreach ($tab as $unite) {
    					echo "<TR><td>Choix du scientifique de l'unite $unite<br>";
    					echo "<SELECT NAME='respP[$unite]'>";
    					$query = "SELECT t1.idResponsable, t1.nomResponsable, t1.prenomResponsable FROM responsable t1, unite t2 where t1.idUnite=t2.idunite and t1.idUnite=$unite";
     
    					$result = mysql_query($query);
    					if (mysql_num_rows($result) > 0) {
    						// Recuperation des resultats
    						while($row = mysql_fetch_object($result)){
    							echo "<OPTION NAME='respP' value='".$row->idResponsable."'>".$row->nomResponsable .' '. $row->prenomResponsable ."</OPTION>";	
    						}
    						mysql_free_result($result);
    					} 		
    					echo "</TD></TR>";
    				}
    				echo "</TABLE>";
    			}
    		  ?>
    		    </TD>
     
    			</TR><TR><TD colspan='3' align='center'><INPUT TYPE='submit' name='enregistrer' value='Enregistrer'></form></TD></TR></TABLE>
    ...

    on est d'accord pour dire que quand je ferais "enregistrer" la popup va se fermer et je serais sur la page appelante new.php avec 2 variables GET dont le tableau non serialisé et donc non exploitable ?

    oui ?,non ?

    ta seconde idee me parait bonne mais je ne sais vraiment pas assez le js pour ca.

    a+
    n

  13. #13
    Invité
    Invité(e)
    Par défaut
    montre moi la ligne (ou les quelques lignes) ou tu affiche "fermer la fenetere" stp

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    c la que le bas blesse : jusqu'a present ma solution (hasardeuse) c'est de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ($_POST['enregistrer']) {
    					$resP = $_POST['respP'];
     
    					foreach ($resP as $key=>$responsable) {
    						echo "Pour l'unité = ".$key . " --> Choix du scientifique = ".$responsable."<br>";
    					}
    					//$resP = urlencode(serialize($resP));
    					$resP = base64_encode(serialize($resP));
    					//echo "<A HREF=\"javascript:self.close()\" onClick=\"window.opener.location.href='new.php?pop=OK&resp=$resP'; windows.close(); return(true);\">Fermer</A>";
    					echo "<a href=\"javascript:window.opener.location.replace('new.php?pop=OK&resp=$resP'); window.close()\">Fermer la fenêtre</a>";
    				}
    --> j'envoie le formulaire (on reste dans la popup), puis j'affiche le lien "fermer la fenetre" avec mon tableau serialise.

    mais ca ne me plait qu'a moitie pour les raisons que je t'ai dis.

    j'ai essayé de faire ce que tu m'as dis :
    --> 1/ j'ai supprimer le traitement du formulaire
    2/ dans le onsubmit du formualire j'essaie de passer l'url 'new.php?....' avec les parametres mais le tableau ne passe pas car je n'ai pas le temps de le serialiser.

    3/ j'ai vraiment rien compris et alors je veux bien que tu m'expliques

    a+
    n

  15. #15
    Invité
    Invité(e)
    Par défaut
    remplace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ($_POST['enregistrer']) {
    [...]
    echo "<a href=\"javascript:window.opener.location.replace('new.php?pop=OK&resp=$resP'); window.close()\">Fermer la fenêtre</a>";
    }
    par


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ($_POST['enregistrer']) {
    [...]
    echo "<script>window.opener.location.replace('new.php?pop=OK&resp=$resP);window.close();</script>";
    }
    Il faut que tu comprenne que tant que tu fait ta requète, le serveur la fait en entier, c'est comme un esclave a qui tu dit "et toi la ! fait moi ça" au moment ou tu fait la requète, et lui ce quil te renvoi c'est du html, en une seule fois, quand il a tout fini.

    Donc l'escale va toujour pouvoir te lacher ton tableau serializé apres ton post , il suffit qu'il l'affiche au bon moment

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    yes! j'ai enfin compris... et effectivement ca marche bien ...enfin je pense car ma popup se ferme, donc elle est passé par le traitement formulaire.

    sur la page appelant j'ai :
    <?
    if ($_GET['pop']=="OK") {
    $resP = $_GET['resp'];
    print_r($resP);
    $tab = unserialize(base64_decode($resP ));
    foreach ($tab as $key=>$responsable) {
    echo "idUnit = ".$key . "idResp = ".$responsable."<br>";
    }
    }
    ?>

    et voila ce que ca affiche :

    $resP
    Warning: Invalid argument supplied for foreach() in e:\easyphp1-7\www\contrat\new.php on line 419

    --> pour lui ce n'est pas un tableau....

    je desespere, car la vraiment ca devrait fonctionner !!

    vois tu une explication ? et encore merci...

    n

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    stop ! erreur de ma part, j'avais un bout de js dans le onclick du formulaire qui trainait...

    donc resultat de la modif : la popup ne se ferme toujours pas...

    a+
    n

  18. #18
    Invité
    Invité(e)
    Par défaut
    - est ce que ton php affiche bien le javascript ? (pour verifier dans le echo qui est censé l'afficher, enlève les balise "<script>")
    - est ce que 'ya une erreur javascript ? console javascript de firefox ..

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    bonjour,

    bingo tu as raison il y a bien une erreur dans la console d'erreur:
    Erreur : unterminated string literal
    Ligne : 60, Colonne : 31
    Code source :
    window.opener.location.replace('new.php?pop=OK&resp=YToxOntpOjEzO3M6MToiNCI7fQ==);window.close();

    il me manquait une apostrophe...

    ca marche tres bien maintenant, comment te remercier ? je n'y serais pas arriver seule. je ne connaissais pas cette console.

    un grand merci a toi vraiment

    n

  20. #20
    Invité
    Invité(e)
    Par défaut
    avec plaisir, pense a cocher "resolu"

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

Discussions similaires

  1. recuperation de données popup-formulaire
    Par bricocoman dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/07/2006, 12h04
  2. Popup et tableau
    Par Invité dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 31/03/2006, 11h28
  3. [FORMULAIRE] Tableau à deux entrées...
    Par ip203 dans le forum IHM
    Réponses: 2
    Dernier message: 09/03/2006, 12h48
  4. Réponses: 5
    Dernier message: 03/03/2006, 11h00
  5. Réponses: 7
    Dernier message: 15/12/2005, 15h24

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