PHP Passar variável para a próxima página

196

Parece bem simples, mas não consigo encontrar uma boa maneira de fazê-lo.

Digamos que na primeira página eu criei uma variável

$myVariable = "Some text";

E a ação do formulário para essa página é "Page2.php". Então, no Page2.php, como posso ter acesso a essa variável? Sei que posso fazê-lo com sessões, mas acho que é demais para uma sequência simples e só preciso passar uma sequência simples (um nome de arquivo).

Como posso conseguir isso?

Obrigado!

Carlo
fonte
A melhor e mais fácil passagem de variáveis ​​é como eu a expliquei aqui: stackoverflow.com/questions/14465464/…
Jaro

Respostas:

450

HTML / HTTP é sem estado, em outras palavras, o que você viu / viu na página anterior, está completamente desconectado da página atual. Exceto se você usar algo como sessões, cookies ou variáveis ​​GET / POST. Sessões e cookies são bastante fáceis de usar, sendo a sessão muito mais segura do que os cookies. Mais seguro, mas não completamente seguro.

Sessão:

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

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

Lembre-se de executar a session_start();instrução nessas duas páginas antes de tentar acessar a $_SESSIONmatriz e também antes de qualquer saída ser enviada ao navegador.

Biscoito:

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

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

A grande diferença entre sessões e cookies é que o valor da variável será armazenado no servidor se você estiver usando sessões e no cliente se estiver usando cookies. Não consigo pensar em nenhum bom motivo para usar cookies em vez de sessões, exceto se você deseja que os dados persistam entre as sessões, mas mesmo assim talvez seja melhor armazená-los em um banco de dados e recuperá-los com base em um nome de usuário ou ID.

GET e POST

Você pode adicionar a variável no link à próxima página:

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

Isso criará uma variável GET.

Outra maneira é incluir um campo oculto em um formulário que é enviado para a página dois:

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

E então na página dois:

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

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

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

Basta alterar o método para o formulário para postse você quiser fazê-lo via postagem. Ambos são igualmente inseguros, embora GET seja mais fácil de invadir.

O fato de cada nova solicitação ser, exceto os dados da sessão, uma instância totalmente nova do script me pegou quando comecei a codificar em PHP. Depois de se acostumar, é bastante simples.

Jrgns
fonte
2
Graças a isso, o problema foi que eu tinha várias variáveis ​​na primeira página, então o que fiz foi criar uma matriz com todas essas variáveis ​​e enviá-la para a próxima página usando sessões.
1919 Carlo
Schweet :) Fico feliz em poder ajudar.
21909 Jrgns
4
Nitpick: sessões em PHP geralmente também são manipuladas por cookies. O cookie de sessão não é persistente e, geralmente, apenas mantém o ID da sessão. Mas ainda é um biscoito.
Decent Dabbler
Para elaborar meu próprio comentário. O motivo é que, porque, como você disse, o HTTP é sem estado. Portanto, o PHP ainda precisa de uma maneira de identificar a sessão. Isso é feito armazenando um cookie no cliente com um ID de sessão. Se os cookies estiverem desabilitados no lado do cliente, o PHP às vezes utilizará $ _GET vars para acrescentar o ID da sessão aos links entre as páginas. Mas isso geralmente é considerado inseguro e, portanto, geralmente é desabilitado para a maioria dos servidores da web (php.ini).
Dabbler decente
As sessões PHP do @fireeyedboy também podem ser propagadas usando as variáveis ​​GET e POST. No final do dia, a sessão simplifica a passagem de variáveis ​​de uma página para a seguinte, tendo apenas um dado para transferir: o ID da sessão. Esse ID de sessão é então usado para recuperar os dados salvos anteriormente.
21412 Jr Jrs
30

Obrigado pelas respostas acima. Aqui está como eu fiz isso, espero que ajude aqueles que o seguem. Estou procurando passar um número de registro de uma página para outra, portanto regName e regValue :

Crie sua primeira página, chame-a de 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>

Crie sua segunda página, chame-a 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>

Embora não seja tão abrangente quanto a resposta acima, para meus propósitos isso ilustra de maneira simples a relação entre os vários elementos.

Frank
fonte
13
Seu exemplo também funciona sem sessões e, de fato, não está recebendo os dados pelo mecanismo de sessões (em get_reg.php). Você está enviando regName através de um formulário com o método get, conforme explicado por Jrgns. A variável é, portanto, acessível na página get_reg.php através da matriz $ _GET.
metatron
16

Passando dados na solicitação

Você pode incorporá-lo como um campo oculto no seu formulário ou adicioná-lo ao URL de ação do seu formulário.

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

ou

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

Observe que isso também ilustra o uso de htmlentities e urlencode ao transmitir dados.

Passando dados na sessão

Se os dados não precisarem ser passados ​​para o lado do cliente, as sessões poderão ser mais apropriadas. Simplesmente chame session_start () no início de cada página e você poderá obter e configurar dados no array $ _SESSION.

Segurança

Como você declara que seu valor é realmente um nome de arquivo, você precisa estar ciente das ramificações de segurança. Se o nome do arquivo chegou do lado do cliente, suponha que o usuário tenha adulterado o valor. Verifique se há validade! O que acontece quando o usuário passa o caminho para um arquivo importante do sistema ou para um arquivo sob seu controle? Seu script pode ser usado para "analisar" o servidor em busca de arquivos que existem ou não?

Como você está claramente começando aqui, vale lembrar que isso vale para todos os dados que chegam em $ _GET, $ _POST ou $ _COOKIE - assuma que seu pior inimigo criou o conteúdo dessas matrizes e codifique de acordo!

Paul Dixon
fonte
9

Existem três métodos para passar valor em php.

  • Por correio
  • Por obter
  • Tornando a sessão variável

Esses três métodos são usados ​​para fins diferentes. Por exemplo, se queremos receber nosso valor na próxima página, podemos usar o método 'post' ($ _POST) como: -

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

Se exigirmos o valor da variável em mais de uma página, poderemos usar a variável de sessão como: -

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

Antes de usar esta sintaxe para criar a variável SESSION, primeiro precisamos adicionar essa tag no início da nossa página php

session_start(); 

O método GET geralmente é usado para imprimir dados na mesma página que costumava receber informações do usuário. Sua sintaxe é como:

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

O método POST geralmente consome mais seguro que GET porque, quando usamos o método Get, ele pode exibir os dados na barra de URL. Se os dados são mais sensíveis, como a senha, podem ser inggeris.

Ravi Sharma
fonte
7

As sessões seriam a única maneira boa, você também pode usar GET / POST, mas isso seria potencialmente inseguro.

Alo
fonte
6

tente este código

usando o campo oculto, podemos passar o php varibale para outra página

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>

passe a variável php para o valor do campo oculto para que você possa acessar essa variável em outra página

page2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>
Bhargav Chudasama
fonte
1
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

página 2

if(isset($_POST['x'])) {
    $new_value=$_GET['variable_name'];
}
V Kash Singh
fonte
1

As sessões seriam a única maneira boa, você também pode usar GET / POST, mas isso seria potencialmente inseguro.

Passando dados na sessão Se os dados não precisarem ser passados ​​para o lado do cliente, as sessões poderão ser mais apropriadas. Simplesmente chame session_start () no início de cada página e você poderá obter e configurar dados no array $ _SESSION.

Segurança Como você declara que seu valor é realmente um nome de arquivo, você precisa estar ciente das ramificações de segurança. Se o nome do arquivo chegou do lado do cliente, suponha que o usuário tenha adulterado o valor. Verifique se há validade! O que acontece quando o usuário passa o caminho para um arquivo importante do sistema ou para um arquivo sob seu controle? Seu script pode ser usado para "analisar" o servidor em busca de arquivos que existem ou não?

Como você está claramente começando aqui, vale lembrar que isso vale para todos os dados que chegam em $ _GET, $ _POST ou $ _COOKIE - assuma que seu pior inimigo criou o conteúdo dessas matrizes e codifique de acordo!

Kaushik Kothiya
fonte