Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lorena_rio

Radio button vários campos

Recommended Posts

Boa noite pessoal, queria fazer uma coisa mais tenho ideia de como

 

Preciso fazer um rádio button, no qual a opção será ativo = 1

 

Mas eu preciso fazer isso de vários id de uma tabela.

 

Tenho a tabela abaixo.

 

CREATE TABLE IF NOT EXISTS `clientes` (

`id` int(10) NOT NULL AUTO_INCREMENT,
`cliente` varchar(60) NOT NULL,
`cpf` varchar(30) NOT NULL,
`ativo` int(1) NOT NULL,
PRIMARY KEY (`id`)
Aí no caso estaria assim:
INSERT INTO `clientes` (`id`, `cliente`, `cpf`, `ativo`) VALUES
(1, 'Ricardo', 00000000, '0'),
(2, 'João', 2222222, '0'),
(3, 'Mario', 3333333, '0'),
(4, 'Alexandre', 4444444, '1'),
(5, 'Fernando, 5555555, '0'),
(6, 'Edson', 66666666, '0'),
(7, 'Maurício', 77777777, '0');

 

 

Então, queria fazer 7 radio button, e quando eu selecionasse o Alexandre por exemplo, ele ficaria ativo igual a 1 e os outros ficassem 0, e se selecionasse o Edson por exemplo, ele ficaria 1 e automaticamente o Alexandre se tornaria 0

 

Então, sempre que eu selecionasse um nome, esse marcaria 1 no bd e os outros automaticamente ficariam em 0

 

Alguém tem uma ideia? Como são em colunas diferentes fiquei perdida

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só adicionar o mesmo nome para todos os inputs do tipo radio.

<input type="radio" name="usuario" value="Alexandre">Alexandre
<input type="radio" name="usuario" value="Edson">Edson


PS: Tem que usar javascript para fazer essa modificaçao no banco de dados quando um input for selecionado.


<form name="usuarios">
<input type="radio" name="usuario" value="Alexandre">Alexandre
<input type="radio" name="usuario" value="Edson">Edson
</form>

<script>
var radio = document.usuarios.usuario;
var prev = null;

for(var i = 0; i < radio.length; i++)
{
    radio[i].onclick = function()
    {
        (prev) ? console.log(prev.value) : null;
        if(this !== prev)
        {
            prev = this;
        }
        //aqui adicionar 1 no bd
        alert("Voce selecionou: "+this.value);
    };
}
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom não entendi nada, além de não ter funcionado, os value dele esão com nome, e preciso gravar 0 ou 1. pode ser que o javascript faça isso, mas não entendi. Além do que eu teria de ter uma forma que chamar todas as colunas pelo id creio eu., para depois o radio fazer essa marcação. Não tenho ideia de como fazer isto ainda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como não funcionou se está funcionando?!

O que você quer não é que ao selecionar um radio automaticamente mude o campo ativo para 1?

Então, te mostrei o código para você alterar os dados no banco quando um radio button for selecionado.


Outro exemplo:

<form name="usuarios">
<input type="radio" name="usuario" value="Alexandre">Alexandre
<input type="radio" name="usuario" value="Edson">Edson
</form>

<script>
var radio = document.usuarios.usuario;
var prev = null;
var xmlHttp = null;
var url = "ativo.php?usuario=";

for(var i = 0; i < radio.length; i++)
{
    radio[i].onclick = function()
    {
        (prev) ? console.log(prev.value) : null;
        if(this !== prev)
        {
            prev = this;
        }
        //aqui adicionar 1 no bd
        var request = url + this.value;
        xmlHttp = new XMLHttpRequest();
        xmlHttp.open( "GET", request, false );
        xmlHttp.send(null);
        alert(xmlHttp.responseText);
    };
}
</script>

Neste exemplo, eu tenho uma página (ativo.php) que está recebendo o usuário (ativo.php?usuario=) que foi selecionado (passar o id no caso) e alterando o campo ativo para 1.


O javascript não salva nada no banco de dados, isso ae só está capturando o evento onclick no radio button, obtendo o usuário selecionado (o valor vai depender do que você colocar no atributo value do radio button) e enviando para uma outra página (ativo.php. responsável por mudar de 0 para 1) o id/nome do usuário selecionado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

CL4nG, o problema que citei também quando postei o tópico é de como fazer isso em 7 colunas diferentes em uma tabela. Isso é uma das dúvidas principais. O exemplo dado nada mais faz do que alterações em uma única tabela com um 1 id, mas são 7 id's.

 

Experimentei seu código, mas até como rádio buton simples ele não funcionou.

 

O que uso aqui é assim

 

<strong>Ativar cliente:</strong><br/>
Sim: <input name="ativo" type="radio" value="1" <?php if($linhas['ativo'] == 1){ echo 'checked="checked"';} ?> />
Não: <input name="ativo" type="radio" value="0" <?php if($linhas['ativo'] == 0){ echo 'checked="checked"';} ?>/>
Dessa maneira gravo e já trago os valores do BD, mas assim eu só consigo alterar de 1 para 0 ou vice versa, marcando cada rádio e somente de um cliente por vez, já que ele só muda um id por vez.
No caso no value eu tenho de indicar 1 ou 0, mas nesse caso eu posso deixar ativo o Alexandre e o Edson também. E na verdade quando eu ativar um o outro não pode estar ativo. Mas aí vem o problema, e ter que alterar em todos os id.
Na situação que falei que nem sei como fazer isso ou mesmo se é possível, seu exemplo ficou muito vago, já que nem eu tentando seu exemplo em um único cliente ele mal funcionou, imagine em 7 id diferentes.
Nem tenho noção de como fazer essa página ativo.php. o que ela receberia? O que já tenho é funcional, mas como disse, tenho de ter uma página para cada cliente e ativar e desativar um a um, e nesse caso se ativo um tenho de ir na página do outro para o desativar, e se esquecer posso ativar mais de um, coisa que meu sistema não vai poder.

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?php

if(isset($_POST['usuario'])){

// ATUALIZA TODOS OS VALORES PARA 0

$atualiza = mysql_query("UPDATE clientes SET ativo = '0'");

// ATUALIZA PARA 1 O VALOR DO USUÁRIO

$atualiza = mysql_query("UPDATE clientes SET ativo = '1' WHERE id = '".$_POST['usuario']."' ");

}

?>

 

 

<form action="" method="post">

<input type="radio" name="usuario" value="1">Alexandre

<input type="radio" name="usuario" value="2">Edson

</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

CL4nG, o problema que citei também quando postei o tópico é de como fazer isso em 7 colunas diferentes em uma tabela. Isso é uma das dúvidas principais. O exemplo dado nada mais faz do que alterações em uma única tabela com um 1 id, mas são 7 id's.

 

Experimentei seu código, mas até como rádio buton simples ele não funcionou.

 

O que uso aqui é assim

 

<strong>Ativar cliente:</strong><br/>
Sim: <input name="ativo" type="radio" value="1" <?php if($linhas['ativo'] == 1){ echo 'checked="checked"';} ?> />
Não: <input name="ativo" type="radio" value="0" <?php if($linhas['ativo'] == 0){ echo 'checked="checked"';} ?>/>
Dessa maneira gravo e já trago os valores do BD, mas assim eu só consigo alterar de 1 para 0 ou vice versa, marcando cada rádio e somente de um cliente por vez, já que ele só muda um id por vez.
No caso no value eu tenho de indicar 1 ou 0, mas nesse caso eu posso deixar ativo o Alexandre e o Edson também. E na verdade quando eu ativar um o outro não pode estar ativo. Mas aí vem o problema, e ter que alterar em todos os id.
Na situação que falei que nem sei como fazer isso ou mesmo se é possível, seu exemplo ficou muito vago, já que nem eu tentando seu exemplo em um único cliente ele mal funcionou, imagine em 7 id diferentes.
Nem tenho noção de como fazer essa página ativo.php. o que ela receberia? O que já tenho é funcional, mas como disse, tenho de ter uma página para cada cliente e ativar e desativar um a um, e nesse caso se ativo um tenho de ir na página do outro para o desativar, e se esquecer posso ativar mais de um, coisa que meu sistema não vai poder.

 

Lorena, tudo o que você precisava era de executar duas query's no arquivo ativo.php, e foi o que o Victor postou:

 

<?php
if(isset($_GET['usuario'])){
// ATUALIZA TODOS OS VALORES PARA 0
$atualiza = mysql_query("UPDATE clientes SET ativo=0");
// ATUALIZA PARA 1 O VALOR DO USUÁRIO 
$atualiza = mysql_query("UPDATE clientes SET ativo=1 WHERE id=".$_GET['usuario']);
}
?>

Eu te mostrei todo o código pra capturar o evento onclick, obter o usuário selecionado e enviar uma requisição informando o usuário que deve ser ativado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se ainda não deu certo, some esse codigo abaixo com o codigo do victorqueiroz

    <script>
        $(document).ready(function() {
            $(":radio").click(function() {
                $("form").submit();
            })
        })
    </script>
        <form name="usuarios" method="post" action="seu arquivo.php" >
            <strong>Ativar cliente:</strong><br/>
            Sim: <input name="ativo" type="radio" value="1" <?php echo $_POST['ativo'] == 1 ? 'checked' : '' ?> />
            Não: <input name="ativo" type="radio" value="0" <?php echo $_POST['ativo'] == 0 ? 'checked' : '' ?>/>
        </form>
    

Mas mude o isset($_POST['usuario'] para isset($_POST['ativo']

 

<?php
if(isset($_POST['usuario'])){
// ATUALIZA TODOS OS VALORES PARA 0
$atualiza = mysql_query("UPDATE clientes SET ativo = '0'");
// ATUALIZA PARA 1 O VALOR DO USUÁRIO
$atualiza = mysql_query("UPDATE clientes SET ativo = '1' WHERE id = '".$_POST['usuario']."' ");
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
if(isset($_POST['usuario'])){
// ATUALIZA TODOS OS VALORES PARA 0
$atualiza = mysql_query("UPDATE clientes SET ativo = '0'");
// ATUALIZA PARA 1 O VALOR DO USUÁRIO 
$atualiza = mysql_query("UPDATE clientes SET ativo = '1' WHERE id = '".$_POST['usuario']."' ");
}
?>


<form action="" method="post">
<input type="radio" name="usuario" value="1">Alexandre
<input type="radio" name="usuario" value="2">Edson
</form>

O código do victorqueiroz foi perfeito, bastando apenas alterar de usuario para ativo.

 

A única coisa que não consegui foi trazer o valor do banco marcado mo radio

 

Fiz assim mas não deu em nada

 

<?php
if(isset($_POST['ativo'])){
// ATUALIZA TODOS OS VALORES PARA 0
$atualiza = mysql_query("UPDATE clientes SET ativo = '0'");
// ATUALIZA PARA 1 O VALOR DO USUÁRIO
$atualiza = mysql_query("UPDATE clientes SET ativo = '1' WHERE id = '".$_POST['ativo']."' ");
}
?>
<form action="" method="post">
<input type="radio" name="ativo" value="1" <?php echo $_POST['ativo'] == 1 ? 'checked' : '' ?> />ALEXANDRE
<input type="radio" name="ativo" value="2" <?php echo $_POST['ativo'] == 2 ? 'checked' : '' ?> />EDSON
<input type="radio" name="ativo" value="3" <?php echo $_POST['ativo'] == 3 ? 'checked' : '' ?> />FERNANDO
</form>
Porém a gravação ficou perfeita

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como não? oque está diferente disso? os inputs sao listados apartir de uma tabela?

esse abaixo esta testado e fucionado

<?php
            if (isset($_POST['ativo'])) {
//ALTERE AQUI
                echo "UPDATE clientes SET ativo = '0'";
                echo "UPDATE clientes SET ativo = '1' WHERE id = '" . $_POST['ativo'] . "' ";
            }
            ?>
<!DOCTYPE html>
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="js/jquery-1.10.2.min.js" type="text/javascript"></script>
    </head>
    <script>
        $(document).ready(function() {
            $(":radio").click(function() {
                $("form").submit();
            })
        })
    </script>
    <body>
        <form name="usuarios" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" >
            <strong>Ativar cliente:</strong><br/>
            <form action="" method="post">
                <input type="radio" name="ativo" value="1" <?php echo @$_POST['ativo'] == 1 ? 'checked' : '' ?> />ALEXANDRE
                <input type="radio" name="ativo" value="2" <?php echo @$_POST['ativo'] == 2 ? 'checked' : '' ?> />EDSON
                <input type="radio" name="ativo" value="3" <?php echo @$_POST['ativo'] == 3 ? 'checked' : '' ?> />FERNANDO
            </form>
    </body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei denovo com uma tabela e deu certo,

 

verifique o valor do input tem que bater com o id do registro;

e o numero desse codigo tambem tem que bater com o valor do input

<?php echo @$_POST['ativo'] == 1 ? 'checked' : '' ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lorena_rio, o problema não é nossos códigos... O problema é que você simplesmente está pegando aqui e testando sem fazer as devidas modificações...

 

Te mostrei o código pra fazer a mudança sem atualizar a página e você disse que não funciona...
É claro que não vai funcionar, eu te mostrei um exemplo, então a partir dele você cria o seu código. Mas o exemplo está tão mastigado que é só fazer alterações...

O Eletronic também postou um código que funciona e você disse que também não funcionou ae...
Vai entender...

Não pegue os códigos como uma solução direta ao seu problema, até porque não sabemos como você está fazendo ae. Um caractere que estiver diferente no nosso código vai ser motivo de erro se juntado ao seu... Então que os códigos só lhe sirva de exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

que viagem, vcs estao usando loop e os escambau...

botao radio só aceita 1 por natureza - so precisa de um evento

 

$('input[type=radio]').click(function(){
...
});

 

Lorena

sempre que um formulario for submetido com dezenas de radios, apenas 1 será marcado, não tem drama

vc quer que a página seja ou não atualizadaquando o radio for clidado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lorena_rio, o problema não é nossos códigos... O problema é que você simplesmente está pegando aqui e testando sem fazer as devidas modificações...

 

Te mostrei o código pra fazer a mudança sem atualizar a página e você disse que não funciona...

É claro que não vai funcionar, eu te mostrei um exemplo, então a partir dele você cria o seu código. Mas o exemplo está tão mastigado que é só fazer alterações...

 

O Eletronic também postou um código que funciona e você disse que também não funcionou ae...

Vai entender...

 

Não pegue os códigos como uma solução direta ao seu problema, até porque não sabemos como você está fazendo ae. Um caractere que estiver diferente no nosso código vai ser motivo de erro se juntado ao seu... Então que os códigos só lhe sirva de exemplo.

 

CL4nG, Não estou pegando os códigos e copiando. Fiz alterações é deu certo, não sei aonde você está vendo isso. A solução foi muito bem dada pelo victorqueiroz e pelo Eletronic. Apenas voltar o resultado é que não está, mas ele está gravando perfeitamente como foi meu pedido de ajuda.

 

Criatividade zero, a solução passada pelo victorqueiroz e depois com uma implementada pelo Eletronic foram exemplares.

 

Eletronic, realmente não importei o Jquery, pode ter sido este o erro. Vou verificar e retorno.

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta dificil ajudar... vc nao respondeu o que perguntei

. um posta que é pra nao atualizar

. outro posta: $("form").submit();

 

seja mais clara com a questão

é ou não é para atualizar a pagina quando o radio for clicado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

que viagem, vcs estao usando loop e os escambau...

botao radio só aceita 1 por natureza - so precisa de um evento

 

$('input[type=radio]').click(function(){

...

});

 

Lorena

sempre que um formulario for submetido com dezenas de radios, apenas 1 será marcado, não tem drama

você quer que a página seja ou não atualizadaquando o radio for clidado?

 

Com a exisência de jQuery todo mundo ficou preguiçoso e não quer saber de fazer do zero...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei o jquery e ele não alterou nada.

 

Bom, mas fico agradecida, o que eu precisava foi solucionado,. Agradeço a todos pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.