Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde, tenho um sistema que salva no banco o valor do checkbox('S' | 'N') e dos radio buttons ('R' | 'P | 'N'), porém queria saber como posso extrair esse valor do banco de dados ao fazer uma consulta, deixando o checkbox "checked"("S") ou "unchecked"("N") assim como no radio button que tem 3 opções e queria que retornasse selecionando apenas o radio e o check que tem o valor que foi salvo no BD. Encontrei algumas funções em javascript, mas nenhuma que funcionasse ou que servisse ao meu proposito.
Alguém ai pode me ajudar? Desde já Agradeço!
Cara, a principio parece ser isso, mas ele nao puxar do banco os valores dos check (S, N) E DOS RADIO (R, P, S), no banco eles foram salvos com letras e nao numerais, sabe o que posso alterar pra funcionar? segue o codigo que estou tentando fazer rodar
<?php
include_once('../funcoes/conexao.php');
?>
<!DOCTYPE html>
<html>
<head>
<!-- META -->
<meta charset="utf-8" />
<!-- TITLE -->
<title>Return Datas</title>
<!-- STYLE -->
<style type="text/css">
*
{ margin: 0; padding: 0 }
body, html
{ background: #f2f2f2; padding: 5vh 0 }
#container
{ background: rgba(0,0,0,0.2); margin: auto; width: 100vh; padding: 5vh 0 }
#box
{ background: #f2f2f2; margin: auto; height: 50vh; width: 50vh }
.clear
{ clear: both }
.form
{ padding: 5vh }
.left
{ float: left }
.right
{ float: right }
.md10
{ border-bottom: 1px solid #000; padding: 3vh 0 }
h4
{ margin: 3vh; text-align: center }
</style>
</head>
<body>
<div id="container">
<?php
$pdo = conecta();
$show = $pdo->prepare(' SELECT * FROM FORNECEDORES WHERE CODIGO = 113 ');
$show->execute();
$s = $show->fetch(PDO::FETCH_ASSOC);
?>
<section id="box">
<form class="form" method="post" autocomplete="off">
<h4>
<?php echo $s['NOME'] ?>
</h4>
<div class="md10">
<div class="md5 left">
<input id="box1" type="checkbox" name="ATIVO" <?php
if ($s['ATIVO'] == 'S') {
echo "checked";
}
?> />
<label for="box1">ATIVO</label>
</div>
<div class="md5 right">
<input id="box2" type="checkbox" name="ATIVO" <?php
if ($s['ATIVO'] == 'N') {
echo "checked";
}
?> />
<label for="box2">INATIVO</label>
</div>
<div class="clear"></div>
</div>
<div class="md10">
<div class="md5 left">
<input type="radio" id="statusChoice1" name="TRIB_EMPRESA" value="R" <?php
if ($s['TRIB_EMPRESA'] == 'R') {
echo "checked";
}
?> />
<label for="statusChoice1">LUCRO REAL</label>
</div>
<div class="md5 right">
<input type="radio" id="statusChoice2" name="TRIB_EMPRESA" value="S" <?php
if ($s['TRIB_EMPRESA'] == 'S') {
echo "checked";
}
?> />
<label for="statusChoice2">SIMPLES NACIONAL</label>
</div>
<div class="md5 right">
<input type="radio" id="statusChoice3" name="TRIB_EMPRESA" value="P" <?php
if ($s['TRIB_EMPRESA'] == 'P') {
echo "checked";
}
?> />
<label for="statusChoice3">LUCRO PRESUMIDO</label>
</div>
<div class="clear"></div>
</div>
</form>
</section>
</div>
</body>
</html>Abaixo dessa linha:
$s = $show->fetch(PDO::FETCH_ASSOC);
Adicione um var_dump da variável $s para visualizar o seu conteúdo:
var_dump($s);
Apesar do SQL ser *case insensitive*, chaves de um vetor são *case sensitive*.array(2) {
["ATIVO"]=> string(4) "S "
["TRIB_EMPRESA"]=> string(4) "R "
}
retornou esse array, no caso de busca de um cliente ativo('S") e que tinha lucro real('R') em relação a tributação da empresaVeja que a variável é "S " e não "S", ou seja, há um espaço no cadastro de S. Por isso a comparação não funcionará. O tipo do campo na tabela é texto livre, enum ou set?
é do tipo char, tanto o ATIVO quanto o TRIB_EMPRESA.
Imagino que seja char(2), por isso está vindo com espaços em branco. Pode validar aqui:
https://dev.mysql.com/doc/refman/5.7/en/char.html
Prefira campos do tipo varchar (character varying). Lhe evitará esse tido de dor de cabeça.
Entretanto, nesse caso em específico, mude para ENUM, faz mais sentido para o seu caso em que tenha uma lista de valores.
campo ENUM('N', 'P', 'R'),
Com ENUM, você é obrigado a utilizar um dos valores da lista.
E se for do tipo ativo/inativo, mude para tinyint(1) e utilize apenas 1 (true) e 0 (false). Você terá um controle melhor e evitará erros como o que está ocorrendo agora.
pois é cara, o problema é que não posso alterar o campo por que nosso sistema é feito em VB e ja roda em cima do firebird com todas as funções escritas para esse tipo de campo(char(1)). Estou reescrevendo ele em php, então vou ter que me adaptar e ter essa dor de cabeça mesmo. Sabe a forma mais simplificada de pegar esses valores em char mesmo?
Use trim do SQL mesmo: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html
estou utilizando agora, sem espaços, porém ainda tenho o problema dos check e dos radios que estão pegando os valores, mas nao estão marcando.
=(
Permita-me ajudar você de outro modo...
Se possível, me adicione no Skype, assim terei uma forma melhor em ajudar-lhe, Ok?
Enviei uma mensagem em seu "PV" com meu Skype, aguardo retorno!
Obs: Se for contra as regras, avisar-me :)
@Resolvido
Código
<?php
include_once('../funcoes/conexao.php');
?>
<!DOCTYPE html>
<html>
<head>
<!-- META -->
<meta charset="utf-8" />
<!-- TITLE -->
<title>Return Datas</title>
<!-- STYLE -->
<style type="text/css">
*
{ margin: 0; padding: 0 }
body, html
{ background: #f2f2f2; padding: 5vh 0 }
#container
{ background: rgba(0,0,0,0.2); margin: auto; width: 100vh; padding: 5vh 0 }
#box
{ background: #f2f2f2; margin: auto; height: 50vh; width: 50vh }
.clear
{ clear: both }
.form
{ padding: 5vh }
.left
{ float: left }
.right
{ float: right }
.md10
{ border-bottom: 1px solid #000; padding: 3vh 0 }
h4
{ margin: 3vh; text-align: center }
</style>
</head>
<body>
<div id="container">
<?php
$pdo = conecta();
$show = $pdo->prepare(' SELECT * FROM FORNECEDORES WHERE CODIGO = 113 ');
$show->execute();
$s = $show->fetch(PDO::FETCH_ASSOC);
# Elimina todos os espaços e deixa só as Letas (Exemplo: Olavo De Carvalho => OlavoDeCarvalho)
$s['ATIVO'] = $string = preg_replace('/\s+/', '', $s['ATIVO']);
$s['TRIB_EMPRESA'] = $string = preg_replace('/\s+/', '', $s['TRIB_EMPRESA']);
?>
<section id="box">
<form class="form" method="post" autocomplete="off">
<h4>
<?php echo $s['NOME'] ?>
</h4>
<div class="md10">
<div class="md5 left">
<input id="box1" type="checkbox" name="ATIVO" <?php
if ($s['ATIVO'] == 'S') {
echo "checked";
}
?> />
<label for="box1">ATIVO</label>
</div>
<div class="md5 right">
<input id="box2" type="checkbox" name="ATIVO" <?php
if ($s['ATIVO'] == 'N') {
echo "checked";
}
?> />
<label for="box2">INATIVO</label>
</div>
<div class="clear"></div>
</div>
<div class="md10">
<div class="md5 left">
<input type="radio" id="statusChoice1" name="TRIB_EMPRESA" value="R" <?php
if ($s['TRIB_EMPRESA'] == 'R') {
echo "checked";
}
?> />
<label for="statusChoice1">LUCRO REAL</label>
</div>
<div class="md5 right">
<input type="radio" id="statusChoice2" name="TRIB_EMPRESA" value="S" <?php
if ($s['TRIB_EMPRESA'] == 'S') {
echo "checked";
}
?> />
<label for="statusChoice2">SIMPLES NACIONAL</label>
</div>
<div class="md5 right">
<input type="radio" id="statusChoice3" name="TRIB_EMPRESA" value="P" <?php
if ($s['TRIB_EMPRESA'] == 'P') {
echo "checked";
}
?> />
<label for="statusChoice3">LUCRO PRESUMIDO</label>
</div>
<div class="clear"></div>
</div>
</form>
</section>
</div>
</body>
</html>100% Funcional !!!
Siga o exemplo:
conexao.php
<!DOCTYPE html>
--
-- Extraindo dados da tabela
usuario--