Passer la variable PHP à la page suivante


196

Cela semble assez simple mais je ne trouve pas de bon moyen de le faire.

Dis dans la première page que je crée une variable

$myVariable = "Some text";

Et l'action du formulaire pour cette page est "Page2.php". Donc, dans Page2.php, comment puis-je avoir accès à cette variable? Je sais que je peux le faire avec des sessions mais je pense que c'est trop pour une simple chaîne, et je n'ai besoin que de passer une simple chaîne (un nom de fichier).

Comment puis-je atteindre cet objectif?

Merci!


La meilleure chose et la plus simple pour passer des variables est la façon dont je l'ai expliqué ici: stackoverflow.com/questions/14465464/…
Jaro

Réponses:


450

HTML / HTTP est sans état, en d'autres termes, ce que vous avez fait / vu sur la page précédente, est complètement déconnecté de la page actuelle. Sauf si vous utilisez quelque chose comme des sessions, des cookies ou des variables GET / POST. Les sessions et les cookies sont assez faciles à utiliser, la session étant de loin plus sécurisée que les cookies. Plus sûr, mais pas complètement sécurisé.

Session:

//On page 1
$_SESSION['varname'] = $var_value;

//On page 2
$var_value = $_SESSION['varname'];

N'oubliez pas d'exécuter l' session_start();instruction sur ces deux pages avant d'essayer d'accéder au $_SESSIONtableau et également avant d'envoyer une sortie au navigateur.

Biscuit:

//One page 1
$_COOKIE['varname'] = $var_value;

//On page 2
$var_value = $_COOKIE['varname'];

La grande différence entre les sessions et les cookies est que la valeur de la variable sera stockée sur le serveur si vous utilisez des sessions et sur le client si vous utilisez des cookies. Je ne vois aucune bonne raison d'utiliser des cookies au lieu de sessions, sauf si vous voulez que les données persistent entre les sessions, mais même alors, il est peut-être préférable de les stocker dans une base de données et de les récupérer en fonction d'un nom d'utilisateur ou d'un identifiant.

GET et POST

Vous pouvez ajouter la variable dans le lien vers la page suivante:

<a href="page2.php?varname=<?php echo $var_value ?>">Page2</a>

Cela va créer une variable GET.

Une autre façon consiste à inclure un champ masqué dans un formulaire qui se soumet à la page deux:

<form method="get" action="page2.php">
    <input type="hidden" name="varname" value="var_value">
    <input type="submit">
</form>

Et puis à la page deux:

//Using GET
$var_value = $_GET['varname'];

//Using POST
$var_value = $_POST['varname'];

//Using GET, POST or COOKIE.
$var_value = $_REQUEST['varname'];

Modifiez simplement la méthode du formulaire postsi vous souhaitez le faire par courrier. Les deux sont également peu sûrs, bien que GET soit plus facile à pirater.

Le fait que chaque nouvelle requête soit, à l'exception des données de session, une toute nouvelle instance du script m'a surpris lorsque j'ai commencé à coder en PHP. Une fois que vous vous y êtes habitué, c'est assez simple.


2
Merci pour cette aide, le problème était que j'avais un tas de variables dans la première page, donc ce que j'ai fait a été de créer un tableau avec toutes ces variables et de l'envoyer à la page suivante en utilisant des sessions.
Carlo

Schweet :) Content d'avoir pu aider.
Jrgns

4
Nitpick: les sessions en PHP sont généralement gérées par les cookies également. Le cookie de session n'est pas un cookie persistant et ne contient généralement que l'ID de session. Mais c'est toujours un cookie.
Decent Dabbler

Pour développer mon propre commentaire. La raison en est que, comme vous l'avez dit, HTTP est sans état. Pour cela, PHP a toujours besoin d'un moyen d'identifier la session. Cela se fait en stockant un cookie sur le client avec un identifiant de session. Si les cookies sont désactivés côté client, PHP utilise parfois $ _GET vars pour ajouter l'ID de session aux liens entre les pages. Mais ceci est généralement considéré comme non sécurisé, et est donc généralement désactivé de la plupart des serveurs Web (php.ini).
Decent Dabbler

Les sessions PHP @fireeyedboy peuvent également être propagées à l'aide des variables GET et POST. À la fin de la journée, la session simplifie le passage des variables d'une page à la suivante en n'ayant qu'une seule donnée à transférer: l'identifiant de session. Cet identifiant de session est ensuite utilisé pour récupérer les données précédemment enregistrées.
Jrgns

30

Merci pour les réponses ci-dessus. Voici comment je l'ai fait, j'espère que cela aide ceux qui suivent. Je cherche à passer un numéro d'enregistrement d'une page à l'autre, d'où regName et regValue :

Créez votre première page, appelez-la set_reg.php :

<?php

session_start();

$_SESSION['regName'] = $regValue;

?>

<form method="get" action="get_reg.php">
    <input type="text" name="regName" value="">
    <input type="submit">
</form>

Créez votre deuxième page, appelez-la get_reg.php :

<?php

session_start();

$regValue = $_GET['regName'];

echo "Your registration is: ".$regValue.".";

?>

<p><a href="set_reg.php">Back to set_reg.php</a>

Bien qu'elle ne soit pas aussi complète que la réponse ci-dessus, elle illustre à mes fins de manière simple la relation entre les divers éléments.


13
Votre exemple fonctionne également sans sessions et n'obtient en fait pas les données via le mécanisme sessions (dans get_reg.php). Vous envoyez regName via un formulaire avec la méthode get comme expliqué par Jrgns. La variable est ainsi accessible sur la page get_reg.php via le tableau $ _GET.
metatron

16

Transmission de données dans la demande

Vous pouvez soit l'intégrer en tant que champ masqué dans votre formulaire, soit l'ajouter à l'URL de votre action sur les formulaires

 echo '<input type="hidden" name="myVariable" value="'.
     htmlentities($myVariable).'">';

ou

echo '<form method="POST" action="Page2.php?myVariable='.
    urlencode($myVariable).'">";

Notez que cela illustre également l'utilisation de htmlentities et urlencode lors du passage de données.

Transmission de données dans la session

Si les données n'ont pas besoin d'être transmises au côté client, les sessions peuvent être plus appropriées. Appelez simplement session_start () au début de chaque page, et vous pouvez obtenir et définir des données dans le tableau $ _SESSION.

Sécurité

Puisque vous déclarez que votre valeur est en fait un nom de fichier, vous devez être conscient des ramifications de sécurité. Si le nom de fichier est arrivé du côté client, supposez que l'utilisateur a falsifié la valeur. Vérifiez sa validité! Que se passe-t-il lorsque l'utilisateur transmet le chemin d'accès à un fichier système important ou à un fichier sous son contrôle? Votre script peut-il être utilisé pour «sonder» le serveur pour les fichiers qui existent ou n'existent pas?

Comme vous commencez clairement ici, il vaut la peine de rappeler que cela vaut pour toutes les données qui arrivent dans $ _GET, $ _POST ou $ _COOKIE - supposez que votre pire ennemi a conçu le contenu de ces tableaux et codez en conséquence!


9

Il existe trois méthodes pour transmettre la valeur en php.

  • Par la poste
  • Par get
  • En rendant la session variable

Ces trois méthodes sont utilisées à des fins différentes.Par exemple, si nous voulons recevoir notre valeur à la page suivante, nous pouvons utiliser la méthode 'post' ($ _POST) comme: -

$a=$_POST['field-name'];

Si nous avons besoin de la valeur de variable sur plus d'une page, nous pouvons utiliser la variable de session comme: -

$a=$_SESSION['field-name];

Avant d'utiliser cette syntaxe pour créer une variable SESSION, nous devons d'abord ajouter cette balise au tout début de notre page php

session_start(); 

La méthode GET est généralement utilisée pour imprimer des données sur la même page qui avait l'habitude de prendre la saisie de l'utilisateur. Sa syntaxe est la suivante:

$a=$_GET['field-name'];

La méthode POST consomme généralement plus de sécurité que GET car lorsque nous utilisons la méthode Get, elle peut afficher les données dans la barre d'URL.Si les données sont des données plus sensibles comme le mot de passe, elles peuvent être inggeris.


7

Les sessions seraient le seul bon moyen, vous pouvez également utiliser GET / POST mais ce serait potentiellement dangereux.


6

essayez ce code

en utilisant un champ caché, nous pouvons passer php varibale à une autre page

page1.php

<?php $myVariable = "Some text";?>
<form method="post" action="page2.php">
 <input type="hidden" name="text" value="<?php echo $myVariable; ?>">
 <button type="submit">Submit</button>
</form>

passer la variable php à la valeur du champ caché afin que vous puissiez accéder à cette variable dans une autre page

page2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>

1
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

page 2

if(isset($_POST['x'])) {
    $new_value=$_GET['variable_name'];
}

1

Les sessions seraient le seul bon moyen, vous pouvez également utiliser GET / POST mais ce serait potentiellement dangereux.

Transmission de données dans la session Si les données n'ont pas besoin d'être transmises au côté client, les sessions peuvent être plus appropriées. Appelez simplement session_start () au début de chaque page, et vous pouvez obtenir et définir des données dans le tableau $ _SESSION.

Sécurité Puisque vous déclarez que votre valeur est en fait un nom de fichier, vous devez être conscient des ramifications de sécurité. Si le nom de fichier est arrivé du côté client, supposez que l'utilisateur a falsifié la valeur. Vérifiez sa validité! Que se passe-t-il lorsque l'utilisateur passe le chemin vers un fichier système important ou un fichier sous son contrôle? Votre script peut-il être utilisé pour «sonder» le serveur pour les fichiers qui existent ou n'existent pas?

Comme vous ne faites que commencer ici, il convient de rappeler que cela vaut pour toutes les données qui arrivent dans $ _GET, $ _POST ou $ _COOKIE - supposez que votre pire ennemi a conçu le contenu de ces tableaux et codez en conséquence!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.