Bobrinha 4 Denunciar post Postado Fevereiro 24, 2015 Olá colegas, estou com um problema de logica e não achei o erro ou solução, estou tentando fazer um simples formulario para pegar um valor e ordenar a query por esse valor porem quando eu atualizado a pagina a sessão não se mantem: Veja todo o codigo Formulario <form name="FormOdenar" action="" method="post"> <select name="ordem"> <option value="nome">Nome</option> <option value="novos">Novos</option> <option value="cliques">Cliques</option> <option value="votos">Votos</option> </select> <input type="submit" value="Ordenar" name="ordenar"> </form> PHP <?php $Ordem = filter_input_array(INPUT_POST, FILTER_DEFAULT); if (isset($Ordem) && !empty($Ordem)): unset($Ordem['ordenar']); $Ordem = implode('',$Ordem); switch ($Ordem): case 'novos': $_SESSION['ordem'] = 'ORDER BY id DESC'; break; case 'cliques': $_SESSION['ordem'] = 'ORDER BY cliques DESC'; break; case 'votos': $_SESSION['ordem'] = 'ORDER BY votos DESC'; break; endswitch; else: $_SESSION['ordem'] = 'ORDER BY nome ASC'; endif; ?> Query "WHERE id_categoria = :cat AND ativo = 1 {$_SESSION['ordem']} LIMIT :limit OFFSET :offset" Conforme eu clico em ordenar ele ordena conforme o que é solicitado porem ao atualizar a pagina entrar de novo na pagina etc a sessão não se mantem, como fazer para que a sessão seja mantida? Compartilhar este post Link para o post Compartilhar em outros sites
Rogério Santana 172 Denunciar post Postado Fevereiro 24, 2015 <?php session_start(); $Ordem = filter_input_array(INPUT_POST, FILTER_DEFAULT); Compartilhar este post Link para o post Compartilhar em outros sites
Bobrinha 4 Denunciar post Postado Fevereiro 25, 2015 Colega ja existe a session start ativa no inicio da minha pagina, visto que para uma sessão funcionar o session start é obrigatorio Compartilhar este post Link para o post Compartilhar em outros sites
Apenas Eu 13 Denunciar post Postado Fevereiro 25, 2015 Olá! Você reparou se isso acontece só no google chorme? Os links que você projetou, você incluiu o endereço do site (http://www.site.com.br/link.php) ou apenas o nome da pagina (/link.php)? Compartilhar este post Link para o post Compartilhar em outros sites
Dorian Neto 41 Denunciar post Postado Fevereiro 25, 2015 O session_start() você inseriu nas 2 páginas (solicitante e solicitada)? Compartilhar este post Link para o post Compartilhar em outros sites
Bobrinha 4 Denunciar post Postado Fevereiro 26, 2015 Olá! Você reparou se isso acontece só no google chorme? Os links que você projetou, você incluiu o endereço do site (http://www.site.com.br/link.php) ou apenas o nome da pagina (/link.php)? Colega, é igual em todos navegadores, veja que não existe links, é apenas um formulário que ao ser enviado recebo o valor e crio a sessão de ordenação, funciona so na primeira pagina por exemplo como uso paginação ao clicar na segunda pagina ja perde a sessão, se eu clicar no navegador e abrir outra aba também perde a sessão, se eu apertar f5 também perde a sessão e fica na defalt O session_start() você inseriu nas 2 páginas (solicitante e solicitada)? Colega é um formulário de post que retorna para a mesma pagina não redireciono para nenhuma outra, como mostrado todo código acima Compartilhar este post Link para o post Compartilhar em outros sites
Rogério Santana 172 Denunciar post Postado Fevereiro 26, 2015 Rapaz ... eu fiz um teste com seu script e a sessão se mantém normalmente <?php session_start(); $Ordem = filter_input_array(INPUT_POST, FILTER_DEFAULT); var_dump($Ordem); if (isset($Ordem) && !empty($Ordem)): unset($Ordem['ordenar']); $Ordem = implode('', $Ordem); echo $Ordem; switch ($Ordem): case 'novos': $_SESSION['ordem'] = 'ORDER BY id DESC'; echo $_SESSION['ordem']; break; case 'cliques': $_SESSION['ordem'] = 'ORDER BY cliques DESC'; echo $_SESSION['ordem']; break; case 'votos': $_SESSION['ordem'] = 'ORDER BY votos DESC'; echo $_SESSION['ordem']; break; endswitch; else: $_SESSION['ordem'] = 'ORDER BY nome ASC'; endif; ?> <form name="FormOdenar" action="" method="post"> <select name="ordem"> <option value="nome">Nome</option> <option value="novos">Novos</option> <option value="cliques">Cliques</option> <option value="votos">Votos</option> </select> <input type="submit" value="Ordenar" name="ordenar"> </form> Compartilhar este post Link para o post Compartilhar em outros sites
Bobrinha 4 Denunciar post Postado Março 1, 2015 Agora fiquei mais perdido ainda, por que aqui não funciona, eu seleciono a opção mando atualizar funciona certinho salva as sessões de acordo mais é so atualizar a pagina que volta pra default , perdido agora Conhece algum tipo de debug diferente ou imagina algo que possa estar dando errado? Compartilhar este post Link para o post Compartilhar em outros sites
Ldovale 9 Denunciar post Postado Março 1, 2015 Põe a sessão em um arquivo e chama ele com include nos outros. Colocar num arquivo chamado _HEADER.php com os menus e tal, quando vc iniciar a sessão, este arquivo precisa estar através de um include nos demais arquivos. Compartilhar este post Link para o post Compartilhar em outros sites
Bobrinha 4 Denunciar post Postado Março 1, 2015 Que menus? do que esta falando? não quero incluir nada em outra pagina, tenho tudo que preciso pra fazer em uma unica pagina, como dito e testado esta tudo funcionando porem aqui não mantem a sessão ja com o colega acima se mantem e ai não consigo entender por que Compartilhar este post Link para o post Compartilhar em outros sites
Ldovale 9 Denunciar post Postado Março 1, 2015 O menu foi para ilustrar, rapaz, na ultima aplicação que fiz, usei este método, iniciei a sessão em um único arquivo e o incluir nos outros, funcionou tranquilo. Tenta receber os dados primeiro, fazer a condição e depois que validar uma das condições você inicia a sessão. Só uma ideia, eu tive um probleminha similar e iniciei a sessão dentro da condição, depois funfou. Compartilhar este post Link para o post Compartilhar em outros sites
LeozinCuiabá 7 Denunciar post Postado Março 1, 2015 Boa noite, primeiramente gostaria de entender a necessidade de usar a super global $_SESSION para fazer um simples filtro. evite colocar regra de negócios em sessions, elas não foram feitas para isso. sugiro que você passe esse parâmetro via GET mesmo no formulário. outra detalhe, nunca concatenar parâmetros diretamente na query, uma pessoa mal intencionada pode fazer SQL Injection no seu sistema facilmente. eu percebi que você está utilizando o PDO, então utiliza o bindValue para passar os parâmetros da query, o PDO monta a query internamente e isso evita qualquer dor de cabeça com SQL Injection. Espero ter ajudado. Compartilhar este post Link para o post Compartilhar em outros sites
Bobrinha 4 Denunciar post Postado Março 1, 2015 Boa noite, primeiramente gostaria de entender a necessidade de usar a super global $_SESSION para fazer um simples filtro. evite colocar regra de negócios em sessions, elas não foram feitas para isso. sugiro que você passe esse parâmetro via GET mesmo no formulário. outra detalhe, nunca concatenar parâmetros diretamente na query, uma pessoa mal intencionada pode fazer SQL Injection no seu sistema facilmente. eu percebi que você está utilizando o PDO, então utiliza o bindValue para passar os parâmetros da query, o PDO monta a query internamente e isso evita qualquer dor de cabeça com SQL Injection. Espero ter ajudado. A necessidade é para evitar o uso de varias paginas fazendo exibição e ordenação tudo em um unico lugar, como exibido resultados por paginação não quero criar uma pagina para cada tipo de ordenação. Passar paramentros por GET? não vejo necessidade ainda mais quando se usa sistema de url amigavel e não querer manter na url nenhum tipo de parametro, gosto de receber ja filtrado por post e sempre funcionou ate agora rsss Uso PDO e foi apenas ilustração possuo classes que fazem a filtragem e validação de todas as consultas com total segurança essa é uma das grandes vantagens do PDO Obrigado OBS: fiz novos testes aqui e descobri que a sessão se mantem sim ao atualizar a página, porem quando clico na url ali em cima no navegador e aperto enter pra entrar na mesma pagina de novo ai sim a sessão se perde e volta pra default Compartilhar este post Link para o post Compartilhar em outros sites
LeozinCuiabá 7 Denunciar post Postado Março 1, 2015 O fato de usar url's amigaveis não impacta em nada a respeito do que eu disse, em algum ponto de qualquer url amigavel está sendo passado um parâmetro via GET, isso é basico. você não precisa criar uma página para cada tipo de ordenação, para isso existem os parâmetros, que neste caso podem passados via GET sem problemas, um exemplo seria: www.meusistema.com.br/produtos/escritorio - me lista todos os produtos da categoria escritorio www.meusistema.com.br/produtos/escritorio/10 - me lista todos o produto da categoria escritorio que possui o ID 10 Paginação: www.meusistema.com.br/produtos/escritorio/2 - me lista todos os produtos da categoria escritorio que estão na pagina 2 eu testei o seu código na minha máquina e funcionou normalmente, e vai funcionar mesmo, se você testar esse PHP isolamente não tem porque não funcionar, agora no ambiente do teu sistema é outra história. Por isso te disse para evitar fazer lógica nas sessions, elas foram feitas para armazenar informações temporárias e não regras de negócio. mas fica ao seu critério, só estou lhe mostrando o caminho das melhores práticas. Compartilhar este post Link para o post Compartilhar em outros sites
Bobrinha 4 Denunciar post Postado Março 1, 2015 Obg Leo porem minha dúvida agora é somente em saber por que a sessão não se mantem OBS: fiz novos testes aqui e descobri que a sessão se mantem sim ao atualizar a página, porem quando clico na url ali em cima no navegador e aperto enter pra entrar na mesma pagina de novo ai sim a sessão se perde e volta pra default Como manter a sessão mesmo depois de clicar na url do navegador e apertar ENTER? Compartilhar este post Link para o post Compartilhar em outros sites
Ldovale 9 Denunciar post Postado Março 1, 2015 Tenta enviar via GET um ?controle=1, e você põe uma condição if($_GET['controle']==1){ inicia a sessão novamente} Compartilhar este post Link para o post Compartilhar em outros sites
LeozinCuiabá 7 Denunciar post Postado Março 1, 2015 Passei uma dica para ele ontem no private, so colocar um ob_start() apos o session_start() e funcionou, so marcar como resolvido. Compartilhar este post Link para o post Compartilhar em outros sites