Manipulando radio button com PHP

Veremos como enviar e receber dados através do controle radio button (input type="radio")

Radio buttons são controles de opção.

Abaixo vemos o formulário web no qual trabalharemos.

"Imagem ilustrando o controle radio button"

Crie o arquivo form.php com o conteúdo abaixo:

<!DOCTYPE html>
<html lang="pt-br">
    <head>
        <title>Form de exemplo com radios</title>
        <meta charset="utf-8">
    </head>
    <body>
        <form action="form-action.php" method="post">
            <p>
                <input type="radio" name="band-rock" value="beatles"/>The Beatles
                <input type="radio" name="band-rock" value="led-zeppelin"/> Led Zeppelin
                <input type="radio" name="band-rock" value="pink-floyd"/>Pink Floy
            </p>
            <p>
                <input type="button" value="Submit me!" />
            </p>
        </form>
        <script type="text/javascript" src="radios.js"></script>
    </body>
</html>

Repare que a propriedade name é idêntica para os três inputs.

Talvez você queira saber mais sobre o controle, então veja na seção HTML a matéria Botões de opção (input type=radio).

Recebendo o formulário web

O controle radio button quando clicado, quero dizer, se pelo menos uma opção foi escolhida, envia uma string com o valor da propriedade value.

O radio, igualmente como o controle checkbox, não envia nada quando o controle não é clicado.

Ele poderia enviar o par/valor sem o valor, exemplo: $_POST['bandRock'] = "", mas como não é isso o que acontece precisaremos testar os dados com isset();

if (isset($_POST['band-rock'])) {
    var_dump("escolheu " . $_POST['band-rock']);
} else {
    var_dump("não escolheu nenhuma banda de rock");
}

Encurtando o código, o arquivo form-action.php deve ser:

<?php

$_POST['band-rock'] = ( isset($_POST['band-rock']) ) ? $_POST['band-rock'] : null;

# Visualizando os dados
var_dump($_POST);

# Apartir deste ponto, entra em cena a lógica de seu programa.
# Em outras palavras, é o que faremos com os dados recebidos.

Carregando o formulário web

Em algum momento iremos precisar carregar o formulário com os dados do sistema.

A propriedade checked assinala a opção escolhida.

A minha estratégia é perguntar para a variável $bandRock se o valor que ela contém é igual a "The Beatles", "Led Zeppelin" ou "Pink Floy" e assinalar o input que satisfazer a condição.

Altere o arquivo form.php conforme o conteúdo abaixo:

<?php
/**
 * Aqui teríamos algum código para
 * recuperar de uma fonte de dados
 * as informações do formulário.
 *
 * Utilizaremos o código abaixo, apenas como fins ilustrativo,
 * imaginando que ele vem de alguma fonte.
 */
$bandRock = "pink-floyd";
?>
<!DOCTYPE html>
<html lang="pt-br">
    <head>
        <title>Form de exemplo com radios</title>
        <meta charset="utf-8">
    </head>
    <body>
        <form action="form-action.php" method="post">

            <p>

                <input type="radio"
                       name="band-rock"
                       value="beatles"
                       <?php echo ($bandRock == "beatles") ? "checked" : null; ?>/>The Beatles


                <input type="radio"
                       name="band-rock"
                       value="led-zeppelin"
                       <?php echo ($bandRock == "led-zeppelin") ? "checked" : null; ?>/>Led Zeppelin


                <input type="radio"
                       name="band-rock"
                       value="pink-floyd"
                       <?php echo ($bandRock == "pink-floyd") ? "checked" : null; ?>/>Pink Floy
            </p>

            <p>
                <input type="submit" id="btnSubmit" value="Submit me!" />
            </p>

        </form>
    </body>
</html>

A linha estava comprida e dificultava a leitura do código, então eu formatei o HTML de um jeito "maroto" só para o código ficar mais legível, mas não tome isso como um estilo, ok?

Veja o código completo deste exemplo no GitHub php-exemplo/forms/radio/.

Navegue nesta série!

Comentários

comments powered by Disqus