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 :

Renvoyer des données en POST avec redirection


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut Renvoyer des données en POST avec redirection
    Bonjour,

    J'envois des données en POST de la page X à partir d'un formulaire sur une page Y. Je voudrais renvoyer des données en POST sur la page X avec mes propres valeurs puis faire une redirection vers cette même page :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    require_once('includes/postrequest.class.php') ;
    $pr = new PostRequest('MonUrl');
     
    $pr->setData('identifiant', $id_borrower);
    $pr->setData('borrower', $name_borrower);
     
    $pr->setHeader('Content-Type', 'application/x-www-form-urlencoded');
     
    $pr->send();
    Et la classe qui va avec :
    Code php : 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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    <?php
     
    /**
    * Pateysoft Creation
    * All rights reserved
    * 2007-2008
    * @author Ludovic PATEY
    * @version 1.0
    *
    * This is a class used to communicate with others serveurs trough the PostMethod.
    * I had to developp this class in order to communicate with campus-booster
    */
     
    class PostRequest {
     
    	private $url;
    	private $cookies = array();
    	private $meta = array();
    	private $data = array();
    	private $headers = array();
     
    	public function __construct( $url ) {
    		$this->url = $url;
     
    		$this->setHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    	}
     
    	public function setCookies( $cookies ) {
    		$this->setHeader( 'cookie', $this->buildCookies( $cookies ) );
    		$this->cookies = $cookies;
    	}
     
    	public function setData( $name, $value ) {
    		$this->data[ $name ] = $value;
    	}
     
    	public function getCookies() {
    		return $this->cookies;
    	}
     
    	public function setHeader( $name, $value ) {
    		$this->headers[ $name ] = $value;
    	}
     
     
    	public function send() {
     
    		$headers = '';
    		foreach( $this->headers as $name => $value ) {
    			$headers .= $name . ': ' . $value . "\r\n";
    		}
     
    		$content = http_build_query( $this->data );
     
    		$headers.= 'Content-Length: ' . strlen( $content );
     
    		$context = stream_context_create( 
    			array( 'http' => array( 'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0',
    									'method' => 'POST',
    									'content' => $content,
    									'header' => $headers ) ) );
     
     
     
    		$fh = fopen( $this->url, 'r', false, $context );
     
    		$this->meta = stream_get_meta_data( $fh );
     
    		$cookies = array();
     
    		foreach( $this->meta['wrapper_data'] as $data ) {
    			if( preg_match( '/Set-Cookie: ([^=]+)=([^;]+)/', $data, $cookie ) ) {
    				$cookies[ $cookie[1] ] = $cookie[2];
    			}
     
    		}
     
    		$this->cookies = $cookies;
     
    		$return = '';
     
    		while( !feof( $fh ) ) {
    			$return  .= fread( $fh, 1024 );
    		}
     
    		fclose( $fh );
     
    		return $return;
    	}
     
    	private function buildCookies( $cookies ) {
     
    		$return = '';
    		foreach( $cookies as $name => $value ) {
    			$return .= ' ' . $name . '=' . $value . ';';
    		}
     
    		return trim($return);
    	}
    }
     
    ?>
    Je ne sais pas si le code marche mais je voudrais faire une redirection vers la page X tout en ayant envoyé les données en POST. Mais avec ce code, je n'ai pas de redirection.

    J'ai rajouté un header(Location: ...) mais les données en POST ne sont pas envoyées.

    Pouvais vous m'aider ?


  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 309
    Points : 15 639
    Points
    15 639
    Par défaut
    Si tu veux envoyer une requête POST par le navigateur, tu auras besoin de JavaScript pour envoyer un formulaire.
    Et pour envoyer une requête POST en PHP, tu peux utiliser la fonction http://php.net/fsockopen ou l'extension http://php.net/curl qui fait la même chose mais en plus facile d'accès.

    Maintenant ça dépent de ce que tu veux faire avec le résultat de la requête, avec la 1re méthode le résultat s'affiche dans le navigateur et avec la 2e méthode tu peux récupérer le résultat dans une chaine de caractères PHP (que tu peux ensuite aussi afficher dans le navigateur)

  3. #3
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Alors je voudrais revenir sur la page précédente (celle qui a envoyé les données POST) avec les mêmes variables et 1 en plus !

    Quelle méthode serait la meilleure ? (PS : Je crois que Curl ne marche pas chez mon hébergeur...)

    Exemple :

    J'envois de la page X avec un formulaire $_POST['id'] et $_POST['test'] sur la page Y et je voudrais faire une redirection vers la page X avec les mêmes variables + $_POST['redirection'] par exemple.

    Merci

Discussions similaires

  1. Redirection vers une page avec des données en post
    Par TokTokTok dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 11/03/2013, 16h31
  2. Envoyer des données en POST avec JQuery?
    Par john85 dans le forum ASP.NET MVC
    Réponses: 8
    Dernier message: 09/06/2011, 18h33
  3. Redirection et envoi de données en POST avec applet Java
    Par johnson95 dans le forum Applets
    Réponses: 0
    Dernier message: 10/07/2009, 15h22
  4. [Excel] Lire des données de excel avec php
    Par Eisy dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 09/03/2006, 17h00
  5. renvoyer des données sous forme de XML hiérarchique
    Par DiGueDao dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/01/2005, 18h06

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