Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Roberto Vinicius

[Resolvido] Arrays e sessions, como trabalhar?

Recommended Posts

Pessoal é o seguinte:

 

Estou empancado com uma dúvida acho que simples, mas não estou conseguindo fazer.

Quero exibir todos os itens de um array numa session, mas só exibe a primeira posição. A carater de exemplo vou postar um codigo simplificado.

Recebo os dados de um formulário e adiciono no array:

 

$nome = $_POST['nome'];
session_start();
$_SESSION['nomes'] = array();
array_push($_SESSION['nomes'], $nome); // adiciona no array

 

em outra pagina exibo:

 

session_start();
if ($_SESSION['nomes'] == ""){
echo "não tem nada";
}

print_r($_SESSION['nomes']);
?>

 

Quando volto ao formulario e adiciono outro nome, é exibido apenas o último, como faço para adicionar vários nomes pelo formuário e exibilos ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
session_start();
$i = ( !isset( $_SESSION['nomes'] ) ) ? 1 : ( count( $_SESSION['nomes'] ) + 1 ) ;
$_SESSION['nomes'][$i] = $_POST['nome'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pow cara valeu, mas ainda continua imprimindo apenas o último nome, não está acumulando.

$nome = $_POST['nome'];
session_start();
$_SESSION['nomes'] = array();

$i = ( !isset( $_SESSION['nomes'] ) ) ? 1 : ( count( $_SESSION['nomes'] ) + 1 ) ;
$_SESSION['nomes'][$i] = $nome;

 

e o arquivo para imprimir:

 

session_start();
if ($_SESSION['nomes'] == ""){
echo "nao tem nada";
}

print_r($_SESSION['nomes']);

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou comentar apenas sobre o código que você implementou:

 

$nome = $_POST['nome']; // desnecessário
session_start();
$_SESSION['nomes'] = array(); // ao fazer isso está sobrescrevendo a variável com um novo array "zerado", por isso nunca irá "acumular" novos índices

$i = ( !isset( $_SESSION['nomes'] ) ) ? 1 : ( count( $_SESSION['nomes'] ) + 1 ) ;
$_SESSION['nomes'][$i] = $_POST['nome'];

 

 

faça o código final exatamente como está no post #2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente Hirom, muito obrigado, deu certo. Agora peço que explique como aplicar o mesmo para um array dinamico, que é o que realmente procuro.

Como acumular e imprimir o nome e a idade por exemplo de um array de pessoas? Tentei assim mas não deu certo:

session_start();
$i = ( !isset( $_SESSION['pessoa'] ) ) ? 1 : ( count( $_SESSION['pessoa'] ) + 1 ) ;
$_SESSION['pessoa']['nome'][$i] = $_POST['nome'];
$_SESSION['pessoa']['idade'][$i] = $_POST['idade'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei ao certo o quê está fazendo ou qual a finalidade.

Analisando o que explicou, acho que serve a mesma lógica de um carrinho de compras.

 

Modifique um pouco para facilitar o gerenciamento, devido ao que explicou no post #5

 

 

Ficaria assim:

session_start();
$i = ( !isset( $_SESSION['pessoa'] ) ) ? 1 : ( count( $_SESSION['pessoa'] ) + 1 ) ;
$_SESSION['pessoa'][$i] = $_POST;

 

Obviamente que se a variável global $_POST possuir outros dados, seria melhor re-organizá-los no formulário.

 

 

 

 

Exemplo completo

 

formulario.html

<form action="pagina.php" method="POST">
<br />nome: <input type="text" name="pessoa[nome]" value="">
<br />idade: <input type="text" name="pessoa[idade]" value="">
<br /><input type="submit" value="enviar">
</form>

 

 

 

pagina.php

session_start();

if( isset( $_POST['pessoa'] ) )
{
   // apenas para debugar
   // print_r( $_POST['pessoa'] );

   $i = ( !isset( $_SESSION['pessoa'] ) ) ? 1 : ( count( $_SESSION['pessoa'] ) + 1 ) ;
   $_SESSION['pessoa'][$i] = $_POST['pessoa'];

   print_r( $_SESSION['pessoa'] ); // apenas para debugar
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente, estou fazendo um sistema para um mercado, onde em cada compra armazeno no banco apenas o preço final dela.

Por isso minha dificuldade, pois nunca usei session antes.

Durante a compra, ao acrescentar os produtos quero que sejam exibidos:o nome, preço, e a quantidade.

Então quero aprender a lógica de como armazenar em uma session um array de produtos. Mas desta forma que voce repassou já abri um pouco a mente sobre sessions.

Neste caso como faço para imprimir cada informação separadamente (no exemplo do array de pessoas):

foreach($_SESSION['pessoa'][nome] as $a){
echo $a;
}

 

E assim para a idade também?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara... Trabalhar com uma SESSION perfaz o mesmo procedimento de se trabalhar com variáveis comuns, com a exceção de a SESSION estar disponível em outras páginas.

 

Isso significa que você pode, por exemplo, transferir o valor da sessão para uma variável qualquer, e trabalhar à vontade. Os dados da sessão são mantidos. Exemplo:

 

$_SESSION['nome'] = array('Gilberto', 'Astolpho');
$var = $_SESSION['nome'];
echo $var[1];//imprime Astolpho

 

Confesso que não li os códigos, somente os textos, e pelo que entendi, o problema está na sua lógica com arrays, e não com as sessions.

Dá uma olhadinha no manual do PHP sobre arrays. Há muitas funções que podem te ajudar.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.