[PHP] Générer une requète POST [Fermé]

Signaler
Messages postés
135
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
4 mai 2012
-
 Dos -
Bonjour,
j'ai un problème (c'est souvent un bonne raison pour poser une question), je veux recevoir une requète POST faire du traitement et envoyer un autre requète POST à une autre page.

ex.

page.html (boutton) envoi requète à chkqte.php

chkqte reçoi la requète fait du traitement, construit une nouvelle requète (qui pourrait être la même que la première) et l'envoi automatiquement à page.php

c'est parce que je n'ai pas le controle de la dernière page et que je veux vérifier que les donnée sont correct avant de les soumettre.

je ne trouve pas de façon simple de le faire en PHP

en PERL j'ai trouvé... mais j'hésite à me lancer dans le PERL que je connais que très peu...

merci de votre aide

7 réponses

Messages postés
135
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
4 mai 2012
46
mise à jour...

après beaucoup de recherche j'ai trouvé cURL qui permet de faire une requète post... mais il y a un problème...

<?php
$post_data = "userid=";
$post_data .= $_POST['userid'];

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, "http://ww7.aitsafe.com/cf/addmulti.cfm");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($curl);
curl_close($curl);

print($page);
?>

$page contient le résultat en HTML de la requète post

le problème c'est que je voudrais que cette page soit ouverte pour vrai et pas seulement avoir le code. parce que si j'affiche la $page les liens ne fonctionne pas parce que dans ce code la base n'est pas spécifiée.

est-ce que ce que je veux faire est possible?
12
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci


Non il n'y a pas de solution simple je pense.
La seule que je connais utilise fsockopen()
Je vois deux solutions "simples" à ton problème:
Version je passe tout par le serveur:
<?php
// test des données passées dans ton formulaire
if(ko) {
// c'est pas bon!
header("location: https://www.pagesjaunes.fr/");
}
// On ajoute des paramètres si nécessaire:
$_POST["data1"]=0;

// c'est bon! Il suffit d'inclure la page qui utilise le formulaire!
inclure("page2.php");
?>

Version "pourquoi faire simple quand on peut faire complique?":
<?php
// test des données passées dans ton formulaire
if(ko) {
// c'est pas bon!
header("location: https://www.pagesjaunes.fr/");
}
// on crée une page avec le formulaire tel qu'il est attendu
// avec comme action onLoad="form.sumbmit()"
?>
<html>
<head>
</head>
<body onLoad="document.form.submit();">
<form ...
...
</form>
</body>

PS: j'ai rien pour tester, mais c'est toujours une piste...
Apres quelques tests, ca semble marcher...
Petites précisions: la version 1 ne marche que si ce qui est fait en début de page (les tests) ne génèrent pas d'entête ou autre chose qui soit incompatible avec la page2.php...
la version 2 n'est pas exempte de ce problème mais est peut être plus souple...

Corrections sur la version 2:
onLoad="document.forms.monform.submit();"
Ajouter name="monform" dans le tag <FORM>

Petit problème: si une des entrées du formulaire est un passwd, avec la gestion des mots de passe, il demande deux fois s'il doit s'en souvenir...
Comme ton formulaire va re directement soumis, il ne s'affichera logiquement même pas... Donc ça devrait pas poser de problème de passer ton champ password en text field...

Mais ce genre de methode ne me rassure pas des masses :)
Messages postés
303
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
3 avril 2008
63
Ben, avec ce que tu me dis la, je te dis que PHP le fait très bien ... La façon simple il n'y en a pas sans savoir quel traitement tu veux effectuer ! Quelles sont les données reçues, de quelle requête tu parles ...
Messages postés
135
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
4 mai 2012
46
je commence à penser aussi qu'il n'y a pas de solution façile...

sur: http://www.php.net/manual/en/http.httprequest.php

il utiliese la classe httprequest et ça semble être ce que je veux, mais je ne suis pas certain. je n'ai pas trouver d'exemples complet...

merci de vous pencher sur mon problème

je vien de regarder fsockopen() et on dirait aussi que ça pourrait fonctionner..

je vais chercher encore

en perl c'est simple

POST 'http://www.perl.org/survey.cgi',
[ name => 'Gisle Aas',
email => 'gisle@aas.no',
gender => 'M',
born => '1964',
perc => '3%',
];

mais lire les données reçu, c'est moins simple...?
Messages postés
303
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
3 avril 2008
63
Si les liens sont en relatifs (dossier/page.php) et non pas en absolu (www.site.com/dossier/page.php) tu ne peux rien y faire ... Le seul moyen est de remplacer, dans $page, chaque occurence de <A HREF="xx"...> par <A HREF="www.site.com/xx"...>. Essaie avec preg_match_all() ça peut marcher, mais dans ce cas la si il y a des liens externes (relatifs ou absolus), ça ne marchera pas ...
Messages postés
135
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
4 mai 2012
46
merci Darshu,
mais j'ai trouvé mieux (ou au moins, plus facile...) j'ai rajouté ces ligne à mon code

$fin = stristr($page, "<title>");

print("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n");
print("<HTML>\n<HEAD>\n");
print("<base href=\"http://ww7.aitsafe.com/cf/\"></base>");
print($fin);

et ça fonctionne très bien...

mais ce n'est pas ce que je voulais à la base.

je voulais juste une page de transition...

qui fait du traitement et ensuite un genre de...:

header("location: http://www.blablabla.com/x.cgi");

mais qui fait un post

en tous cas je vais le laisser comme ça pour l'instant, mais je trouve ça bizzare que ce n'est pas possible en php

je l'ai vu fait en asp, en perl et même en javascript...

mais je n'aime pas le javascript (parce qu'il peut être désactivé par l'usager)
T'as déjà vu une solution équivalente en ASP ???

Elle m'intéresse : peux-tu me la décrire ? Merci.