Envoi de données en passant par un formulaire intermédiaire

Petit nouveau ! | 8 Messages

21 juil. 2011, 17:33

Bonjour à tous :)

C'est une question concernant la récupération des valeurs d'un formulaire, voici le contexte :

Il y a actuellement un formulaire qui récupère des données et qui les renvoie vers un fichier (moulinette.php) qui doit les traiter. Jusqu'ici rien d'extraordinaire :)
Maintenant, je dois faire transiter ces valeurs par un formulaire tiers qui sera entre le 1er formulaire et moulinette.php (par sécurité soit-disant)

Ma question est :
Comment faire pour créer un formulaire intermédiaire qui permette de récupérer des données du premier formulaire et les renvoyer vers moulinette.php ?

J'ai trouvé un article qui explique comment récupérer des données d'un formulaire mais j'avoue que ça ne m'aide pas beaucoup.
Comment dois-je faire svp ?

Voici le code du formulaire :
<form name="form" id="form" action="index.php?menuchoice=moulinette" method="post" onsubmit="return validation()">  
<p><label for="nom">Nom * </label><input type="text" size="27%" name="nom" id="nom"/></p>
<p><label for="email">Email * </label><input type="text" size="27%" name="email" id="email"/></p>
<p><label for="adresse">Adresse * </label><input type="text" size="27%" name="owneraddress" id="owneraddress"/></p>
<p><label for="cp">Code postal * </label><input type="text" size="27%" name="ownerZIP" id="ownerZIP"/></p>
<p><label for="ville">Ville * </label><input type="text" size="27%" name="ownertown" id="ownertown"/></p>
<p><label for="pays">Pays * </label><input type="text" size="27%" name="ownercountry" id="ownercountry"/></p>
<p><label for="tel">Téléphone * </label><input type="text" size="27%" name="ownertelno" id="ownertelno"/></p>
<p>
    <label for="Activite">Activité *</label>
    <select name="ownerActivite" size="1" id="ownerActivite" />
     <option value="-"></option>
     <option value="Agent">Superhéros</option>
     <option value="Carrosserie">méchant</option>      
     <option value="Autre...">Autre</option>
    </select>
</p>
<p><label for="Newsletter">Je souhaite recevoir<br />la Newsletter</label><input type="checkbox" size="27%" name="ownerNewsletter" id="ownerNewsletter" class="IENewsletter" />&nbsp;Oui</p>
<p><label for="cgv">J'ai lu et j'accepte les<br /><a href="cgv_esale.htm" target="popup" onclick="window.open('','popup','width=700,height=800,left=0,top=0,scrollbars=1')">Conditions générales de vente</a></label><input type="checkbox" size="27%" value="OK" name="ownerCGV" id="ownerCGV" class="IECgv" />&nbsp;Oui</p>

<input type="submit" name="submit" value="Valider mon inscription" class="submit" />
</form>
Ce formulaire est automatique, il ne sert que de transition et aussi à ajouter des champs supplémentaires sensibles.
Je précise que ce formulaire intermédiaire n'est pas visible de l'utilisateur.

merci d'avance pour votre aide :)

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

21 juil. 2011, 18:08

Je ne comprends pas bien quand tu dis que le formulaire intermédiaire permet de rajouter des infos mais n'est pas visible l'utilisateur... c'est un formulaire interne qui permet à un administrateur de compléter les données déjà envoyée par l'utilisateur ?

Que doit faire ton script exactement ? Récupérer les données de l'utilisateur et immédiatement les transmettre vers ta moulinette ? ou bien doit-il récupérer les données, les stocker en attendant qu'elles aient été complétées/approuvées, puis une après validation les envoyer mouliner ?

Dans le premier cas, le plus judicieux serait de stocker les données en session, le temps du transit. Dans le second, il faut le faire en deux temps : stocker les données de l'utilisateur en base de données, puis permettre à "l'admin" de les consulter/modifier via son formulaire à lui qu'il soumettra à Mle Moulinette pour traitement :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 8 Messages

22 juil. 2011, 09:50

Salut,

En fait le formulaire intermédiaire permet d'ajouter des balises <input> qui ne doivent pas être visibles de l'utilisateur, même en affichant la source.
C'est pour ça qu'on me demande de faire un formulaire intermédiaire. il n'y a aucune modification/validation des données saisies dans le formulaire précédent.
Que doit faire ton script exactement ? Récupérer les données de l'utilisateur et immédiatement les transmettre vers ta moulinette ?
c'est ça ! :)
Le problème est que je ne vois pas comment "stocker les données en session, le temps du transit". Je ne suis pas développeur, c'est à ce niveau que j'ai besoin d'un petit coup de main... ;)

merci de ta réponse en tout cas !

Petit nouveau ! | 8 Messages

22 juil. 2011, 12:35

Re,

Grâce à tes conseils, voici ce que j'ai pu faire et ça a l'air de fonctionner :
Le formulaire originel (vu et rempli par l'utilisateur)
<form name="form" id="form" action="test.php" method="post" onsubmit="return validation()">
<p><label for="nom">Nom * </label><input type="text" size="27%" name="nom" id="nom"/></p>
<p><label for="prenom">Pr&eacute;nom * </label><input type="text" size="27%" name="prenom" id="prenom"/></p>
<p><label for="email">Email * </label><input type="text" size="27%" name="email" id="email"/></p>
<p><label for="adresse">Adresse * </label><input type="text" size="27%" name="owneraddress" id="owneraddress"/></p>
<p><label for="cp">Code postal * </label><input type="text" size="27%" name="ownerZIP" id="ownerZIP"/></p>
<p><label for="ville">Ville * </label><input type="text" size="27%" name="ownertown" id="ownertown"/></p>
<p><label for="pays">Pays * </label><input type="text" size="27%" name="ownercountry" id="ownercountry"/></p>
<p><label for="tel">T&eacute;l&eacute;phone * </label><input type="text" size="27%" name="ownertelno" id="ownertelno"/></p>
<p><label for="fax">Fax </label><input type="text" size="27%" name="ownerfaxno" id="ownerfaxno"/></p>
<p>
    <label for="Activite">Activit&eacute; *</label>
    <select name="ownerActivite" size="1" id="ownerActivite" />
     <option value="-"></option>
     <option value="aaaaaa">AAAAAA</option>
     <option value="bbbbbb">BBBBBBB</option>
     <option value="cccccc">CCCCCCC</option>       
     <option value="Autre...">Autre</option>
    </select>
</p>
<p><label for="Newsletter">Je souhaite recevoir<br />la Newsletter BCAuto Enchères </label><input type="checkbox" size="27%" name="ownerNewsletter" id="ownerNewsletter" class="IENewsletter" />&nbsp;Oui</p>
<p><label for="cgv">J'ai lu et j'accepte les CGV</label><input type="checkbox" size="27%" value="OK" name="ownerCGV" id="ownerCGV" class="IECgv" />&nbsp;Oui</p>

<div id="boutonValid"><input type="submit" name="submit" value="Valider mon inscription" class="submit" /></div>
</form>
Ensuite, il appelle test.php (invisible pour l'utilisateur et qui contient les valeurs saisies dans le 1er formulaire)
session_start (); 
// on enregistre les paramètres de notre visiteur comme variables de session
$_SESSION['nom'] = $_POST['nom']; 
$_SESSION['prenom'] = $_POST['prenom'];
$_SESSION['email'] = $_POST['email'];
$_SESSION['owneraddress'] = $_POST['owneraddress']; 
$_SESSION['ownerZIP'] = $_POST['ownerZIP'];
$_SESSION['ownertown'] = $_POST['ownertown'];
$_SESSION['ownercountry'] = $_POST['ownercountry']; 
$_SESSION['ownertelno'] = $_POST['ownertelno'];
$_SESSION['ownerfaxno'] = $_POST['ownerfaxno'];
$_SESSION['ownercompanyName'] = $_POST['ownercompanyName'];
$_SESSION['ownerTVAnum'] = $_POST['ownerTVAnum'];
$_SESSION['ownerActivite'] = $_POST['ownerActivite']; 
$_SESSION['ownerNewsletter'] = $_POST['ownerNewsletter'];
$_SESSION['ownerCGV'] = $_POST['ownerCGV'];

echo '
<form name="form" id="form" action="http://www.google.fr" method="post" onsubmit="return validation()">  

<input type=hidden name="oid" value="00DT0000000HJoo">
<input type=hidden name="00N200000029j8Q" value="XXXXXXX">

<p><label for="nom">Nom * </label><input type="text" size="27%" name="nom" id="nom" value="'. $_SESSION['nom'] .'" /></p>
<p><label for="prenom">Pr&eacute;nom * </label><input type="text" size="27%" name="prenom" id="prenom" value="'. $_SESSION['prenom'] .'" /></p>
<p><label for="email">Email * </label><input type="text" size="27%" name="email" id="email" value="'. $_SESSION['email'] .'" /></p>
<p><label for="adresse">Adresse * </label><input type="text" size="27%" name="owneraddress" id="owneraddress" value="'. $_SESSION['owneraddress'] .'" /></p>
<p><label for="cp">Code postal * </label><input type="text" size="27%" name="ownerZIP" id="ownerZIP" value="'. $_SESSION['ownerZIP'] .'" /></p>
<p><label for="ville">Ville * </label><input type="text" size="27%" name="ownertown" id="ownertown" value="'. $_SESSION['ownertown'] .'" /></p>
...
<p><label for="Activite">Activit&eacute; *</label><input type="text" size="27%" name="ownerActivite" id="ownerActivite" value="'. $_SESSION['ownerActivite'] .'" /></p>

<p><label for="Newsletter">Je souhaite recevoir<br />la Newsletter BCAuto Enchères </label><input type="checkbox" size="27%" name="ownerNewsletter" id="ownerNewsletter" class="IENewsletter" value="'. $_SESSION['ownerNewsletter'] .'" />&nbsp;Oui</p>
<p><label for="cgv">lu accepte les<br /></label><input type="checkbox" size="27%" value="OK" name="ownerCGV" id="ownerCGV" class="IECgv" value="'. $_SESSION['ownerCGV'] .'" />&nbsp;Oui</p>

<div id="boutonValid"><input type="submit" name="submit" value="Valider mon inscription" class="submit" /></div>
</form>';
?>
Ce qui affiche un second formulaire avec les valeurs saisies dans le premier formulaire + l'ajout de deux <input hidden>.

Questions
- Il me semble que ça fonctionne pour presque toutes les valeurs sauf pour les cases à cocher qui ne sont pas cochées par défaut... est-ce nécessaire ?
- Vu que c'est un "formulaire fantôme" qui ne sera accessible par quiconque, personne ne pourra valider (submit) ce second formulaire et donc envoyer les données vers Mlle. Moulinette :) Comment faire ?

merci

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

22 juil. 2011, 15:02

franchement je pense que ta méthode de traitement est farfelus.

je m'explique, quel est l'intéret de créer un formulaire qui va être traiter par une page, sans le traiter et qui le renvoyer à une autre page ?

le coté technique est une chose (sais tu envoyer des données en POST à un serveur sans intervention d'un navigateur web ? car le problème se pose dans ton cas !).

est ce que tes deux champs hidden sont toujours le même ?

Pourquoi ne pas les utiliser directement en dure dans la moulinette ?
Pourquoi ne pas les utiliser en session s'il ne faut pas le mettre dans la moulinette (ce que je ne comprend pas).

c'est pas plus sécurisé d'utiliser deux fichiers, la c'est juste plus bordélique. si les valeurs c'est toi qui les fournit il n'y a aucune raison de ne pas les utiliser directement dans la moulinette et ceci toujours sans que l'utilisateur ne le sache ;)

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 8 Messages

22 juil. 2011, 15:23

Je comprends ce que tu veux dire mais :
le coté technique est une chose (sais tu envoyer des données en POST à un serveur sans intervention d'un navigateur web ? car le problème se pose dans ton cas !).
Entre temps j'ai vu qu'il était peut-être possible d'envoyer à travers ceci :

Code : Tout sélectionner

<script type="text/javascript"> window.onload=function(){ document.nomDuFormulaire.onsubmit(); }</script>
Je n'ai pas testé, mais ça pourrait marcher non ?
c'est pas plus sécurisé d'utiliser deux fichiers, la c'est juste plus bordélique. si les valeurs c'est toi qui les fournit il n'y a aucune raison de ne pas les utiliser directement dans la moulinette et ceci toujours sans que l'utilisateur ne le sache ;)
Les valeurs des <input> hidden sont en effet toujours les mêmes, mais la moulinette ne m'appartient pas, je n'ai pas la main dessus et elle traite d'autres valeurs provenant d'autre sites. Donc... ;)

Si tu as des idées, je suis preneur !
merci

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

22 juil. 2011, 19:26

effectivement un peu pas de bol la :)

dans ce cas soumet directement les valeur POST au script cible, cela te permettera d'avoir le résultat, sauf si celui ci doit reprendre la suite.

sache simplement qu'en terme de sécuritée le JS c'est pas la pancée puisse que c'est coté client que si le JS est désactivé, ben il verra ton second formulaire et ce que tu a fait est inutile !

après faut te pencher par, exemple sur la librairie curl qui devrait pouvoir t'aider a soumettre ton formulaire.

sinon avec les sockets ?

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 8 Messages

22 juil. 2011, 19:34

euh, pas compris tes propositions 8-|

- Passer les valeurs Post au script cible .... que veux-tu dire par-là ?
- CURL, excuse mais j'ai un peu regardé et je n vois pas (avec mes très faibles connaissances) en quoi ça pourrait m'aider. A quoi faisais-tu allusion exactement ?

Normalement, l'idéal serait que l'utilisateur soit redirigé vers une page de remerciement pendant que les valeurs sont envoyées au second formulaire. Comme ça pas de risque avec le javacript non ?

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

22 juil. 2011, 21:35

CURL te permet d'envoyer des données en "post" depuis php (comme si elles avaient été envoyée depuis le navigateur de l'utilisateur).

En fait, il faut oublier la notion de formulaire intermédiaire, il s'agit uniquement de réaliser un script qui va te permettre de recevoir les données, les compléter et les faire suivre. Il ne faut donc pas qu'il y ait d'interaction avec l'utilisateur qui pourrait fausser le traitement...

Il faut donc oublier les sessions (je pensais que tu avais la main sur ta moulinette), et te pencher sur curl qui va pouvoir renvoyer tes données modifiées/complétées. En gros, l'idée c'est de constituer une chaine de la forme : clé1=valeur1&clé2=valeur2&... où les couples clé/valeur correspondent aux données envoyées par l'utilisateur, plus celles que tu veux ajouter.

Il te suffira ensuite de les envoyer vers ta moulinette grace à curl, de façon transparente pour l'utilisateur et sécurisée pour toi :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 8 Messages

25 juil. 2011, 11:41

Bonjour !

Je me suis documenté et j'ai réussi à faire un script en m'inspirant de ce que j'ai trouvé sur le web. Puis j'ai installé cURl sur le serveur, malheureusement après soumission du formulaire je n'obtiens aucune réaction.
Comment tester si j'ai fait les choses correctement ?
Voici ce que j'ai fait :
<?php
$postfields = array();
$postfields["action"] = "submit";
$postfields["nom"] = $_POST['nom']; 
$postfields["prenom"] = $_POST['prenom'];
$postfields["email"] = $_POST['email'];
$postfields["owneraddress"] = $_POST['owneraddress']; 
$postfields["ownerZIP"] = $_POST['ownerZIP'];
$postfields["ownertown"] = $_POST['ownertown'];
$postfields["ownercountry"] = $_POST['ownercountry']; 
$postfields["ownertelIndicatif"] = $_POST['ownertelIndicatif'];
$postfields["ownertelno"] = $_POST['ownertelno'];
$postfields["ownerfaxno"] = $_POST['ownerfaxno'];
$postfields["ownercompanyName"] = $_POST['ownercompanyName'];
$postfields["ownerTVAnum"] = $_POST['ownerTVAnum'];
$postfields["ownerActivite"] = $_POST['ownerActivite']; 
$postfields["ownerNewsletter"] = $_POST['ownerNewsletter'];
$postfields["ownerCGV"] = $_POST['ownerCGV'];

//url de la page de soumission
$url = "http://url.com/traitement.php";
$useragent = "Mozilla/5.0";
$referer = $url; 
 
//Initialise une session CURL
$ch = curl_init($url);
//CURL options
curl_setopt($ch, CURLOPT_POST, 1);
//On poste les données du tableau $postfields
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
//On définit un useragent ici Mozilla/5.0
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
//On passe un referrer ici on passe la même page $url
curl_setopt($ch, CURLOPT_REFERER, $referer);
//on récupère le contenu de la page de résultat de la soumission dans une chaine
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// en cas de redirection (facultatif ici)
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//Page de résultats et fermeture de session
$result = curl_exec($ch);
curl_close($ch);
 
//on peut faire un echo du résultat obtenu
echo $result;
?>
Merci