Ir para conteúdo
Fórum Script Brasil
  • 0

Utilização de sessions


jacksolutiontech

Pergunta

Olá galera,

Estou com uma duvida com session que é o seguinte :

Tenho um form na qual faço um select de produtos no mysql, nesse form eu seleciono o produto, qtd , e alguns checkbox ,

porem quando envio para a pagina seguinte ele gera o pedido grava no bd e volto para a tela do form.

Eu gostaria de saber como faço para armazenar esses dados na tela seguinte de modo a permitir que o cliente decida se ele quer gerar o pedido ou se quer voltar ao form e selecionar outro produto e assim por diante , incluindo varios produtos no mesmo pedido.

PS. O que eu preciso saber é qual a melhor forma de acumular essas informações sem ter que gravar um a um no bd , pois eu vi algumas materias informando para usar session e cookie , mas dependendo do browser do usuario se não aceitar cookie não vai dar , enfim , será que vocês poderiam me ajudar esclarecendo essa duvida .

Desde já agradeço

Abraços.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
Mas de que forma seria possivel fazer isso ?

Bom, eu criaria uma classe que seria o tipo Item, esse tipo seria dinâmico, poderia conter qualquer valor e necessariamente seria serializável. Depois eu criaria outra classe que seria a lista de itens.

A classe Lista seria também necessariamente serializável:

tipo Item:

/**
 * Cria um item dinâmico que pode receber qualquer tipo de valor
 */
class Item implements Serializable {
    /**
     * Matriz que conterá os dados do item
     * @var array
     */
    private $dados;

    /**
     * Constroi o item
     */
    public function __construct(){
        $this->dados = array();
    }

    /**
     * Define dinâmicamente uma nova propriedade
     *
     * @param string $name O nome da propriedade
     * @param mixed $value O valor da propriedade
     */
    private function __set( $name , $value ){
        $this->dados[ $name ] = $value;
    }

    /**
     * Recupera o valor de uma propriedade
     * @param string $name O nome da propriedade
     * @return mixed O valor da propriedade ou NULL se ela não existir
     */
    private function __get( $name ){
        $ret = null;

        if ( isset( $this->dados[ $name ] ) ){
            $ret = $this->dados[ $name ];
        }
    }

    /**
     * Serializa o objeto para poder ser colocado em uma variável de sessão
     *
     * @return string O objeto convertido para uma string
     */
    public function serialize(){
        $ret = serialize( $this->dados );

        return( $ret );
    }

    /**
     * Transforma uma string serializada de volta no objeto
     *
     * @param string $dados A string que foi serializada anteriormente
     */
    public function unserialize( $dados ){
        $this->dados = unserialize( $dados );
    }
}
Com essa classe você pode definir qualquer propriedade dinâmicamente, por exemplo:
$item = new Item();
$item->nome = "Neto";
$item->idade = 27;
Depois de criar o tipo Item você vai precisar da Lista que é na verdade um container de Items:
/**
 * Cria uma lista de itens dinâmicos que pode ser serializada para ser armazenada em uma variável de sessão
 */
class Lista implements Serializable {
    /**
     * Matriz que conterá nossa lista de itens
     * @var array
     */
    private $dados;

    /**
     * Constroi a lista
     */
    public function __construct(){
        $this->dados = array();
    }

    /**
     * Adiciona um novo item na lista
     *
     * @param Item $item O item que será adicionado na lista
     * @return Lista Referência ao objeto que estamos utilizando
     */
    public function addItem( Item $item ){
        $this->dados[] = $item;

        return( $this );
    }

    /**
     * Serializa o objeto para poder ser colocado em uma variável de sessão
     *
     * @return string O objeto convertido para uma string
     */
    public function serialize(){
        $ret = serialize( $this->dados );

        return( $ret );
    }

    /**
     * Serializa o objeto para poder ser colocado em uma variável de sessão
     *
     * @return string O objeto convertido para uma string
     */
    public function unserialize( $dados ){
        $this->dados = unserialize( $dados );
    }
}
Para usar a lista você faz o seguinte:
$lista = new Lista();

$item1 = new Item();
$item1->nome = "Neto"
$item1->valor = 10;

$item2 = new Item();
$item2->nome = "João"
$item2->valor = 20;

$lista->addItem( $item1 );
$lista->addItem( $item2 );
Agora que você já tem o item e a lista, basta serializar para guardar em uma variável de sessão:
$_SESSION[ "lista" ] = serialize( $lista );
ai quando você quiser usar a lista que está guardada na variável de sessão você faz o seguinte:
$lista = unserialize( $_SESSION[ "lista" ] );

$novo = new Item();
$novo->nome = "teste";
$novo->valor = 30;

$lista->addItem( $novo );

$_SESSION[ "lista" ] = serialize( $lista );

[]'s

J. Neto

Link para o comentário
Compartilhar em outros sites

  • 0

J.Neto,

Muito obrigado mais uma vez por ajudar esclarecendo essa dúvida,

como estou engatinhando em php, não sabia que existia o "serialize() / unserialize()", vou dar uma estudada nesse assunto e tb procurar na net e no site do php a melhor forma para colocar em pratica, e assim que resolver eu vou postar aqui o resultado.

Por enquanto só tenho a agradecer a atenção que me foi dada aki no SB e mandar um abraço a você e a todos os colegas desse fórum .

Editado por jacksolutiontech
Link para o comentário
Compartilhar em outros sites

  • 0

buenas pessoal;

acabei de me cadastrar no forum, sou iniciante em php e estou fazendo testes com session.

Minha dúvida é semelhante a do nosso colega de como enviar os dados via post e acumular serializando-os, porem eu juro que tentei usar o método que o j.neto passou, mas não entendi. Será que não teria uma forma mais simples para demonstrar como serializa dados de um formulario à um simples mortal como eu ..rssss. :closedeyes: , visto que o metodo passado é para experts em php, e como estou iniciando agradeceria se postassem algo mais leve né.

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

  • 0

Depois de algumas noites batendo a cabeça no monitor consegui chegar nisso ... (rssss)

<?
session_start();
?>
<form action="" method="post">
<input type="text" name="array_nome[nome]" value="<?echo $_SESSION[cesta][nome];?>"><br>
<input type="submit" name="enviar" value="enviar">
</form> 
<hr>
<?

//RECEBE AS VARIÁVEIS
$dados = $_POST["array_nome"];

//GRAVA NA CESTA
$cesta[nome] = $dados[nome];

//GRAVA NA SESSÃO
$_SESSION[cesta] = $cesta;

//EXIBE O RESULTADO
echo $_SESSION[cesta][nome];

?>
Bem simplão pra entender como funciona o processo, porém eu só consigo receber uma informação por vez, sei que é preciso um loop pra gravar varios dados vindos de um unico input text , já tentei isso mas não deu certo
For($i=0;$i<sizeof( $_SESSION[cesta][nome]);$i++)

Alguém poderia me explicar onde estou errando.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...