web-dev-qa-db-fra.com

Comment passer des variables reçues dans une chaîne GET via une redirection d'en-tête php?

Je reçois des valeurs dans une chaîne GET d'Aweber lors de la soumission d'un formulaire par l'utilisateur. Je prends les variables qu'ils envoient et les soumets à une passerelle SMS pour informer une tierce partie de la soumission par SMS.

Voici mon problème. Je dois rediriger la page qui exécute les commandes SMS sortantes dans un en-tête php vers une autre page qui affiche enfin les variables GET envoyées par Aweber.

Je peux récupérer les variables et leurs valeurs dans la première page. Comment puis-je les passer à la deuxième page?

Voici le code que j'utilise sur la première page (sms.php) pour collecter les variables envoyées par Aweber:

   $fname   = $_GET['name'];
   $femail  = $_GET['email'];
   $fphone  = $_GET['telephone'];
   ....etc

   header('Location: confirmed.php');
   exit;
12
user1322707
session_start();
$_SESSION['fname']   = $_GET['name'];
$_SESSION['femail']  = $_GET['email'];
$_SESSION['fphone']  = $_GET['telephone'];
....etc

header('Location: confirmed.php');

et l'obtenir sur la page suivante comme:

session_start();
$fname   = $_SESSION['fname'];
$femail  = $_SESSION['femail'];
$fphone  = $_SESSION['fphone'];

....etc

15
Kalpesh

Commencez par convertir la variable HTTP $_GET en une chaîne de requête à l'aide de

$query = http_build_query($_GET);

Puis ajoutez la variable de chaîne de requête à votre en-tête de redirection

header('location: domain.com'."?".$query);

Terminé.

24
user1464296

Vous n'avez pas besoin de les stocker dans une session, vous pouvez facilement les transmettre avec votre en-tête d'emplacement:

$fname   = $_GET['name'];
$femail  = $_GET['email'];
$fphone  = $_GET['telephone'];
//now a header with these var's:
header("Location: confirmed.php?name=".$fname."&email=".$femail."&telephone=".$fphone);

Dans confirm.php, vous pouvez obtenir ces variables avec la méthode $ _GET.

11
Djerro Neth

Essaye ça. Cela a fonctionné parfaitement pour moi.

if ($_GET)
{
    $query = str_replace("%3D", "=", str_replace("%26", "&", strval(urlencode(http_build_query($_GET)))));

    header('location: https://www.example.com'.'?'.$query);
}
else
{
    header('location: https://www.example.com');
};
2
James Anderson Jr.

S'il vous plaît, si vous lisez ceci à l'avenir, utilisez des sessions pour ce type de transfert de valeur de variable, car si vous comptez principalement ajouter une variable à l'en-tête, si l'utilisateur reste toujours sur ce formulaire et effectue une action qui modifie la valeur de l'en-tête, La valeur de votre propre variable change, car elle dépend de l'en-tête ...... simplement, USE SESSIONS.

2
david.ee

Stockez-les dans la session :

 $_SESSION['fname'] = $_GET['name'];

Utilisez session_start au début de chaque fichier.

2
Yan Berk

Le mieux que vous puissiez faire est de placer toutes vos POST variables dans une session comme celle-ci:

Sur page1.php, mettez:

//Start the session
session_start();
//Dump your POST variables
$_SESSION['post-data'] = $_POST;

Et sur page2.php put: (Si sur page1.php, nous utilisons un formulaire POST normal, soumis avec le formulaire action="page2.php ")

//Start the session
session_start();
//Access your POST variables
foreach ($_POST as $key => $value) {
    ${$key} = $value;
    $_SESSION[$key] = $value;
}
//Unset the useless session variable
unset($_SESSION['post-data']);

Ou sur page2.php put: (Si sur page1.php, nous utilisons une auto-soumission avec le formulaire action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>, puis une header("Location: page2.php"); pour passer à la page2.php et transmettre nos variables POST via une session)

//Start the session
session_start();
//Access your POST variables
$_POST = $_SESSION['post-data'];
foreach ($_POST as $key => $value) {
    ${$key} = $value;
    $_SESSION[$key] = $value;
}
unset($_SESSION['post-data']);

J'ai littéralement passé des heures à comprendre cela parce que tous les forums le disaient faux ou incomplet.

Maintenant, il vous suffit d'appeler les variables que vous avez transmises à partir de page1.php, par exemple: <b>Points: </b><?php echo $points; ?> et c'est tout!

Lorsque vous placez la header('Location: page2.php'); dans une condition if, etc., assurez-vous qu'elle figurera dans le premier script PHP de la page et au-dessus de toute sortie HTML.

1
Jaro

Cela fonctionne utiliser ce sentex 

en-tête ('location: member_dashboard.php? id ='. $ id);

0
Adnan