Ir ao conteúdo

PHP Manter option selecionado no select via session


Ir à solução Resolvido por maycker,

Posts recomendados

Postado

Bom dia a todos,

 

Estou tentando desenvolver um código onde o usuário seleciona o estado pelo 'Select' sem 'botão' e mesmo ao navegar em outras páginas a opção selecionada do usuário se mantem através do 'Session' nas páginas

 

porém ao selecionar o estado quando eu vou para segunda página e retorno para página inicial a seleção é restaurada para opção inicial removendo a minha opção selecionada anteriormente

Poderiam me ajudar a manter a opção seleciona pelo usuário independente da página acessada?

 

index.php

 

<?php
session_start();
if (isset($_POST['submit'])){
   $_SESSION['username'] = $_POST['username'];
}else {
             $_SESSION['username']='Selecione o Estado';
        }
?>


<form action="#"  method="POST">	
<select name="username">
<option value="Selecione o Estado">Selecione o Estado</option>
<option value="Selecione o Estado" selected><?php echo ($_SESSION['username']);?></option>
<option value="AL">AL</option>
<option value="BA">BA</option>
<option value="DF">DF</option>
<option value="GO">GO</option>
<option value="MG">MG</option>
<option value="RS">RS</option>
<option value="SE">SE</option>
</select>
<input type="submit" name="submit">
</form>
		
    
<br><br><a href="page2.php">Segunda Page</a>

 

page2.php

 

<?php
session_start();
if (isset($_POST['submit'])){
   $_SESSION['username'] = $_POST['username'];
}
?>


<form action="#"  method="POST">	
<select name="username">
<option value="Selecione o Estado">Selecione o Estado</option>
<option value="#" selected><?php echo ($_SESSION['username']);?></option>
<option value="AL">AL</option>
<option value="BA">BA</option>
<option value="DF">DF</option>
<option value="GO">GO</option>
<option value="MG">MG</option>
<option value="RS">RS</option>
<option value="SE">SE</option>
</select>
<input type="submit" name="submit">
</form>
	
<br><br><a href="index.php">Inicio</a>

 

Desde já agradeço a todos pela ajuda tempo e atenção

 

Mayck

Postado

@maycker Bom amigo é um simples error na logica!

 

Você verifica se o valor foi transmitido através do método POST e depois sobre escreve uma SESSION com o valor dele, porém você não verifica se ele já foi inserido.

 

 

 

Nesse exemplo eu verifico se ele foi transmitido primeiro e depois eu verifico se ele foi inserido, dessa forma eu garanto que ele vai substituir o valor já gravado, e caso ele não tenha sido transmitido, eu verifico se o valor já foi inserido e recupero ele.

 

<?php

session_start();

$estado = null;

if ($_SERVER['REQUEST_METHOD'] === "POST" && isset($_POST['estado']))
{
    $estado = $_POST['estado'];
    $_SESSION['estado'] = $_POST['estado'];
}
elseif (isset($_SESSION['estado']))
{
    $estado = $_SESSION['estado'];
}


?>
<!DOCTYPE html>
<html lang="pt_BR">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Home</title>
    </head>
    <body>
        <form action="/page2.php" method="POST">	
            <select name="estado" value="<?=$estado?>" required>
                <?php
                    if (empty($estado)):
                        echo '<option value="" disabled selected>Selecione o Estado</option>';
                    endif;
                ?>
                <option value="AL">AL</option>
                <option value="BA">BA</option>
                <option value="DF">DF</option>
                <option value="GO">GO</option>
                <option value="MG">MG</option>
                <option value="RS">RS</option>
                <option value="SE">SE</option>
            </select>
            <input type="submit" name="Enviar">
        </form><br><br>
        <a href="page2.php">Segunda Page</a>
    </body>
</html>

 


 

 

Postado

Antes de mais nada agradeço pela ajuda

No código que você mandou eu testei e por mais que eu selecione outro estado fica sempre voltando pro option 'AL' no 'select', saberia dizer o motivo?

Mais uma vez agradeço pelo seu tempo ajuda e atenção

Postado

@maycker Está funcionando, eu que interpretei o select de forma errada.

 

<?php

session_start();

$estado = null;

if ($_SERVER['REQUEST_METHOD'] === "POST" && isset($_POST['estado']))
{
    $estado = $_POST['estado'];
    $_SESSION['estado'] = $_POST['estado'];
}
elseif (isset($_SESSION['estado']))
{
    $estado = $_SESSION['estado'];
}

?>
<!DOCTYPE html>
<html lang="pt_BR">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Home</title>
    </head>
    <body>
        <form action="/page2.php" method="POST">	
            <select name="estado" required>
                <?php
                    echo '<option value="'.$estado.'" disabled selected>'.((empty($estado)) ? "Selecione o Estado" : $estado).'</option>';
                ?>
                <option value="AL">AL</option>
                <option value="BA">BA</option>
                <option value="DF">DF</option>
                <option value="GO">GO</option>
                <option value="MG">MG</option>
                <option value="RS">RS</option>
                <option value="SE">SE</option>
            </select>
            <input type="submit" name="Enviar">
        </form><br><br>
        <a href="page2.php">Segunda Page</a>
    </body>
</html>

 

  • Obrigado 1
  • Solução
Postado

Perfeito! só tenho a agradecer de verdade pelo seu tempo ajuda e atenção

 

Só alterei a 'submit' por onchange="this.form.submit()" para não precisar clicar

 

 

<?php

session_start();

$estado = null;

if ($_SERVER['REQUEST_METHOD'] === "POST" && isset($_POST['estado']))
{
    $estado = $_POST['estado'];
    $_SESSION['estado'] = $_POST['estado'];
}
elseif (isset($_SESSION['estado']))
{
    $estado = $_SESSION['estado'];
}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
		<meta name="viewport" content="width=device-width">
        <title>Home</title>
		
		
<style>
	@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,300);
  
	html, body {
  	height: 100%  !important;
  	width: 100%;
  	padding: 12px 12px 12px 12px;
  	margin: 0;  
  	font-family: 'Open Sans', sans-serif;
  	font-size:16px;
  	font-weight:500;
  	color: #000000;	
	}
  
	a {text-decoration: none;}
	select {width: 150px;}
</style>
		
		
    </head>
    <body>
		
        <form action="#" method="POST">	
            <select name="estado" required onchange="this.form.submit()">
                <?php
                    echo '<option value="'.$estado.'" disabled selected>'.((empty($estado)) ? "Selecione o Estado" : $estado).'</option>';
                ?>
                <option value="AL">AL</option>
                <option value="BA">BA</option>
                <option value="DF">DF</option>
                <option value="GO">GO</option>
                <option value="MG">MG</option>
                <option value="RS">RS</option>
                <option value="SE">SE</option>
            </select>
            <!--<input type="submit" name="Enviar">-->
        </form>
		
		<br><a href="page2.php">Page2</a>		

		
    </body>
</html>

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!