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

Classe: o mau uso do $_SESSION


Frank K Hosaka

Pergunta

Eu tenho um formulário chamado diário e outro chamado orçamento, em ambos eu uso a variável $_SESSION['codprod'] para incluir um novo produto, um para registrar o que foi gasto e outro para registrar o que pode ser vendido.

Ontem eu comprei 500 g de pepino japonês na quitanda, e consegui registrar o gasto na tabela histórico dos produtos.

Mas eu precisei ir na tela de orçamento, e quando cheguei lá o pepino foi incluído no orçamento de venda, ou seja, ele foi acabar indo na tabela histórico dos pedidos.

Eu levei cinco anos até encontrar um autoload e um roteador portátil para trabalhar com as classes, e agora que eu consegui, eu não sei como trabalhar com uma classe sem usar o $_SESSION. Não sei se é possível trabalhar com as classes sem o $_SESSION.

Por enquanto, eu fiz a seguinte gambiarra:

No formulário do menu, alterei assim <a href=?Orcamento.inicio>Orçamento</a> para <a href=?Orcamento.menu>Orçamento</a>

E na classe Orcamento, eu criei o seguinte método:

arquivo orcamento.php
<?php
class Orcamento
{
	// listagem parcial
	public function menu()
	{
		unset($_SESSION['codprod']);
		return $this->inicio();
	}
}
	

Claro que se trata de gambiarra. Para eliminar o $_SESSION, preciso imaginar como criar um $_POST para o produto selecionado, mas como o formulário vai saber quem solicitou a informação?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Postado (editado)

Esse é o meu primeiro teste de laboratório, o problema é quando a lista de produtos é na escala de milhares de produtos, vai ser necessário o uso de filtros e repassar os valores do solicitante.

arquivo index.php
<?php
$selecao1=$selecao2="";
if(isset($_GET['solicitante']))
{
    if($_GET['solicitante']=="rotina1")
    {
        $selecao1=$_GET['produto'];
    }
    if($_GET['solicitante']=="rotina2")
    {
        $selecao2=$_GET['produto'];
    }
}
?>
<form method=post action=produto>
    <input type=submit value=rotina1 name=rotina><?=$selecao1?><br>
    <input type=submit value=rotina2 name=rotina><?=$selecao2?>
</form>

arquivo produto.php
<?php
$destino="";
if(isset($_POST['rotina']))
{
    $solicitante=$_POST['rotina'];
    $destino="index.php?solicitante=$solicitante";
}
?>
<a href=<?=$destino?>&produto=produto1>produto1</a>
<a href=<?=$destino?>&produto=produto2>produto2</a>
<a href=<?=$destino?>&produto=produto3>produto3</a>

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0

Segundo teste de laboratório:

arquivo index.php
<?php
$selecao1=$selecao2="";
if(isset($_GET['solicitante']))
{
    if($_GET['solicitante']=="rotina1")
    {
        $selecao1=$_GET['produto'];
    }
    if($_GET['solicitante']=="rotina2")
    {
        $selecao2=$_GET['produto'];
    }
}
?>
<form method=post action=produto>
    <input type=submit value=rotina1 name=rotina><?=$selecao1?><br>
    <input type=submit value=rotina2 name=rotina><?=$selecao2?>
</form>

arquivo produto.php
<?php
$destino="";
$solicitante="";
if(isset($_POST['rotina']))
{
    $solicitante=$_POST['rotina'];
    $destino="index.php?solicitante=$solicitante";
}
if(isset($_POST['filtrar']))
{
    // rotina para filtrar produtos
}
?>
<form method=post>
    <input placeholder=filtrar name=filtrar>
    <input type=hidden name=rotina value=<?=$solicitante?>>
    <input type=submit>
</form>
<a href=<?=$destino?>&produto=produto1>produto1</a>
<a href=<?=$destino?>&produto=produto2>produto2</a>
<a href=<?=$destino?>&produto=produto3>produto3</a>

 

Link para o comentário
Compartilhar em outros sites

  • 0

Agora, separando o PHP do HTML:

arquivo index.php
<?php
spl_autoload_register(fn ($class) => require str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php');

function view($arquivo, $array = null)
{
    if (!is_null($array))
    {
        foreach ($array as $var => $value)
        {
            ${$var} = $value;
        }
    }
    ob_start();
    include $arquivo . ".php";
    ob_flush();
}

class Index
{
    public function inicio($selecao1=null,$selecao2=null)
    {
        return view('indexView',['selecao1'=>$selecao1,'selecao2'=>$selecao2]);
    }

    public function produtoEscolhido($produto)
    {
        $selecao1=$selecao2=null;
        if($_GET['solicitante']=="rotina1")
        {
            $selecao1=$produto;
        }
        if($_GET['solicitante']=="rotina2")
        {
            $selecao2=$produto;
        }
        return $this->inicio($selecao1,$selecao2);
    }
}

$rota='Index_inicio';
if($_GET)
{
    if(strpos(key($_GET),"_")==0)
    {
        exit;
    }
    $rota=isset($_GET) ? key($_GET) : $rota;
}
$segmentos=explode('_',$rota);
$nomeControle=$segmentos[0] ?? 'Index';
$metodo=$segmentos[1] ?? 'inicio';
$parametro=$segmentos[2] ?? null;
$controle=new $nomeControle();
$controle->$metodo($parametro);
?>

arquivo indexView.php
<form method=post action=?Produto.inicio>
    <input type=submit value=rotina1 name=solicitante><?=$selecao1?><br>
    <input type=submit value=rotina2 name=solicitante><?=$selecao2?>
</form>

arquivo produto.php
<?php
class Produto
{
    public function escolhido($produto)
    {
        $solicitante=$_GET['solicitante'];
        return header("location:?Index.produtoEscolhido.$produto&solicitante=$solicitante");
    }

    public function filtrar()
    {
        // rotina para filtrar
        $solicitante=$_POST['solicitante'];
        $this->inicio($solicitante);
    }

    public function inicio($solicitante=null)
    {
        if(isset($_POST['solicitante']))
        {
            $solicitante=$_POST['solicitante'];
        }
        view('produtoView',['solicitante'=>$solicitante]);
    }
}
?>

arquivo produtoView.php
<form method=post action=?Produto.filtrar>
    <input placeholder=filtrar name=filtrar>
    <input type=hidden name=solicitante value=<?=$solicitante?>>
    <input type=submit>
</form>
<a href="?Produto.escolhido.produto1&solicitante=<?=$solicitante?>">produto1</a>
<a href="?Produto.escolhido.produto2&solicitante=<?=$solicitante?>">produto2</a>
<a href="?Produto.escolhido.produto3&solicitante=<?=$solicitante?>">produto3</a>

 

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...