envoi de données par javascript à une page

d0m
Mammouth du PHP | 1141 Messages

11 janv. 2008, 15:42

Bonjour,

je cherche à améliorer mon application intranet PHP.
Dans certaines pages, j'ai un formulaire avec un bouton submit.
Lorsqu'on clique sur ce bouton, une nouvelle fenêtre est ouverte comportant une page qui traite les données du formulaire.

Pour faire de cette fenêtre un popup, je suis passé par du javascript. Voici le code pour éclairer un peu :
<html>
<head>
<SCRIPT>
  function ouvrir_popup(formulaire){
    //récupération des données du formulaire
    page = fomulaire.action +"&......";
    
    window.open(page,"_blank","menubar=no, status=no, scrollbars=no, menubar=no, width=800, height=600");

    //pour empecher la validation finale du formulaire
    return false
  }
<SCRIPT>
</head>

<body>
  <FORM NAME="..." METHOD="POST" ACTION="page.php" TARGET="_blank" onsubmit="return ouvrir_popup(this)" >
  .....
  </FORM>
</body>  
</html>
Ca permet, bien que c'est pas utile dans mon cas, de permettre l'ouverture de la page même si javascript est désactivé.

Ce qui me chagrine, c'est que toutes les informations sont passé par URL en ouvrant le popup javascript, je prefererais un comportement comme la methode POST de PHP.
Y'a t il moyen de le faire ou d'ouvrir un popup avec du php pure?

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

11 janv. 2008, 16:22

Pas en php non... php = serveur, navigateur et nouvelle fenêtre = client, tout ça... :)

En revanche, tu peux ouvrir une nouvelle fenêtre en javascript avec windows.opent() et lui donner un nom à la place de "_blank" (en deuxieme argument de la fonction open()). Il te suffit ensuite de modifier le target du formulaire (ou de l'avoir prévu au préalable) et de faire un submit() pour que celui-ci soit envoyé vers ta popup comme si l'utilisateur venait de passer par le bouton submit :)

En gros :
<html> 
<head> 
<SCRIPT> 
  function ouvrir_popup(formulaire){ 
    window.open("", "ma_popup", "menubar=no, status=no, scrollbars=no, menubar=no, width=800, height=600"); 
//  formulaire.target = "ma_popup"; // en option, j'ai pré-renseigné dans le formulaire directement
    formulaire.submit();

    //pour empecher la validation finale du formulaire 
    return false 
  } 
<SCRIPT> 
</head> 

<body> 
  <FORM NAME="..." METHOD="POST" ACTION="page.php" TARGET="ma_popup" onsubmit="return ouvrir_popup(this)" > 
  ..... 
  </FORM> 
</body>   
</html>
Nota : l'attribut onSubmit="" d'un formulaire n'est pas déclenché par la fonction javascript submit() de celui-ci, mais seulement par une soumission naturelle (bouton submit ou touche entrée)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

d0m
Mammouth du PHP | 1141 Messages

11 janv. 2008, 16:37

Merci l'idée est très bonne, je n'y avait pas pensé.
Cependant si on change les données dans le formulaire pour ouvrir une nouveau popup, la page sera chargée dans le premier popup.

Dans mon cas, j'utilise cela pour générer des graphiques et il est intéressant d'en avoir plusieurs ouverts.

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

11 janv. 2008, 16:53

Méééeuhhh ? C'est fini de faire qu'à m'embêter ? :)

Bon bah dans ce cas, tu colles un compteur dans le nom de la popup pour qu'il change à chaque fois ? ;)
<script ...>  
var nbPopup = 0;

function ouvrir_popup(formulaire){  
    window.open("", "ma_popup_"+nbPopup, "menubar=no, status=no, scrollbars=no, menubar=no, width=800, height=600");  
    formulaire.target = "ma_popup_"+nbPopup; 
    formulaire.submit(); 
    nbPopup++;

    //pour empecher la validation finale du formulaire  
    return false  
}  
</script>  
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

woodyfrance
Invité n'ayant pas de compte PHPfrance

28 janv. 2008, 17:22

Bonjour à tous,

Je dois être vraiment benet mais je suis incapable de faire marcher ce bout de code. Voici mon javascript et un morceau de mon formulaire :

Code : Tout sélectionner

function ouvrir_popup(formulaire){ window.open(\" \", \"ma_popup\", \"menubar=no, status=no, scrollbars=no, menubar=no, width=800, height=600\"); formulaire.submit(); return false ; } <FORM METHOD=\"post\" target=\"ma_popup\" name=\"FormNewCat\" action=\"ajout_cat.php\" onsubmit=\"return ouvrir_popup(this);\" > ... ... <input type=\"submit\" id=\"bouton_valider\" value=\"Valider\">
J'ai 2 fenêtres qui s'ouvrent (pas des popups), l'une qui contient mon formulaire et l'autre qui correspond bien à la page que je souhaite afficher. Au secours !

Merci de votre aide

d0m
Mammouth du PHP | 1141 Messages

29 janv. 2008, 09:33

merci Ryle!

Sinon pour ton problème woodyfrance, tu as 2 fenêtre en plus qui s'ouvrent au lieu d'une?
Quelles sont les propriétés de ces fenêtres? (nom,...)

woodyfrance
Invité n'ayant pas de compte PHPfrance

29 janv. 2008, 10:27

C'est exactement ça, j'ai 2 fenêtres, le popup puis une fenêtre IE standard. La fenêtre IE qui contient bien les données que je souhaite afficher, celles de mon formulaire et le popup qui est vide....

merci

woodyfrance
Invité n'ayant pas de compte PHPfrance

29 janv. 2008, 11:40

Petite précision, ça fonctionne sans problème sous Firefox...