Jump to content
Flaviaac

[dúvida] Minha variável não mostrando o tipo certo.

Recommended Posts

Boa tarde galera!

 

Estou tendo um problema esquisito aqui.

Sou iniciante e não faço a mínima ideia do que pode ser.

 

 

Veja só, no campo dropdown abaixo coloquei no "value" o ID, mas ele salva no banco como tipo STRING e não INT.

<?php
$sql = "SELECT id, sigla FROM local ORDER BY sigla ASC";
$result = $conn->query($sql);
?>
.
.
.
<select name="local" class="form-control">
  <option selected>Selecione...</option>
  <?php
  while($row = $result->fetch_assoc()){                                  
    echo "<option value=".$row['id'].">".$row['sigla']."</option>";                                  
  }                              
  ?>                            
</select>
.
.
.

Dei um var_dump() pra saber o que apareceria e ele mostra como STRING.

<pre>
<?php
$sql = "SELECT id, sigla FROM local ORDER BY sigla ASC";
$result = $conn->query($sql);

$row = $result->fetch_assoc();  
var_dump($row['id']);
?>
</pre>

Resultado:

  string(1) "5"

 

 

Esse é o Banco de dados:

Coloquei a coluna ID como INT.

-- phpMyAdmin SQL Dump
-- version 4.8.3
-- https://www.phpmyadmin.net/


SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Banco de dados: `arq`
--

-- --------------------------------------------------------

--
-- Estrutura para tabela `local`
--

CREATE TABLE `local` (
  `id` int(11) NOT NULL,
  `SIGLA` mediumtext NOT NULL,
  `LOCAL` mediumtext NOT NULL,
  `TELEFONE` mediumtext NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Fazendo dump de dados para tabela `local`
--

INSERT INTO `local` (`id`, `SIGLA`, `LOCAL`, `TELEFONE`) VALUES
(1, 'AAC', 'AAC', '2222-2222'),
(2, 'DSV', 'DSV', '1111-1111'),
(3, 'SCA', 'SCA', '3333-3333');

--
-- Índices de tabelas apagadas
--

--
-- Índices de tabela `local`
--
ALTER TABLE `local`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT de tabelas apagadas
--

--
-- AUTO_INCREMENT de tabela `local`
--
ALTER TABLE `local`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Obrigada pessoal!

 

Share this post


Link to post
Share on other sites

Não entendi qual o problema.

Está gerando algum erro?

 

O PHP tem conversão automática de tipos, uma vez que você precise fazer algum cálculo com este id, você pode realizar tranquilamente que a conversão automática faz o trabalho.

 

Fonte:

https://www.php.net/manual/pt_BR/language.types.type-juggling.php

 

Uma fonte interessante pra compreender melhor a tipagem do PHP:
https://pt.stackoverflow.com/questions/76831/criando-um-conjunto-de-variaveis-no-php

Edited by ricardo cf
melhorar resposta com boas referencias

Share this post


Link to post
Share on other sites

@Flaviaac

 

Experimente substituir o comando VAR_DUMP por GETTYPE do PHP.

Se o conteudo da coluna no seu Banco de Dados for um número, então ele deve exibir INTEGER, se for do tipo STRING vai aparecer STRING mesmo, porém é certo de que você está incluindo um INTEIRO e não uma STRING no Banco de Dados, pois caso você tente colocar um alphanumérico no campo INT você irá receber um erro impedindo que o valor seja incluido na tabela.

 

DE:

var_dump($row['id']);

 

PARA:

echo gettype($row['id'];

 

Uma perguntinha, o que isso está te causando de problema?

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Marcones Borges
      Olá, bom dia, estou tendo dificuldade em uma filtragem, quando passo o parâmetro para o select em forma de variável ele não exibe resultados.
       
      Segue o código:

              $usuario='gerente';         function montaSelect()         {         $sql = "SELECT * FROM membros WHERE user='".$usuario."' ";                 $query = mysql_query( $sql );                 if( mysql_num_rows( $query ) > 0 )                 {                         while( $dados = mysql_fetch_assoc( $query ) )                         {                                 $opt .= '<option value="'.$dados['nome'].'">'.$dados['nome'].'</option>';                         }                 }                 else                         $opt = '<option value="0">Nenhum Membro cadastrado</option>';                 return $opt;         }


      Quando substituo a variável pelo nome usuário gerente, ele lista normal, mais na variável não da certo. já tentei user='{$usuario}'  , user='$usuario' , user=$usuario}, nenhuma forma funciona...

      Alguém pode me ajudar..
       
    • By fnatan
      Olá galera, novato em PHP aqui.
       
      Fiz uma classe e gostaria de ler o valor de uma determinada variável, porém essa variável será alterada por alguns métodos enquanto ela estiver instanciada, mas quando leio o valor dela essas alterações não são visualizadas.
       
      segue exemplo:
       
      <?php $test = new classeTeste; echo "valor inicial de myVar: ".$test->myVar."</br>"; $test->alterar_myVar(); echo "myVar após chamada do método: ".$test->myVar."</br>"; class classeTeste { public $myVar = 1000; public function alterar_myVar(){ $myVar = 20000; echo "Valor myVar foi alterado para: ".$myVar." pelo método alterar_myVar</br>"; } } ?> Valeu e Abraço!
    • By Edilson Chaves
      Ola amigos, uso curso a algum tempo, só que desta vez estou apanhando de algo que aparentemente e bem simples. Tenho certeza que estou esquecendo algum detalhe.
      To a 2 dias me debatendo com isto.
      Por isto estou pedindo ajuda.
       
      O que pretendo fazer e criar um novo registro que mostre a evoluçao do crecimento mensal projetando o ponto de equilibrio. Para isto eu preciso pegar a soma do mês anterior e acrescentar a soma do atual.
       
      Esta é a Procedure. Abaixo explico o quer nao esta funcionado.
       
      DROP PROCEDURE IF EXISTS sp_Monitorado;
      DELIMITER $$
          CREATE PROCEDURE sp_Monitorado()
          BEGIN
              DECLARE done INT DEFAULT FALSE;
              DECLARE vVlrMesAtuPrv, vVlrMesAntPrv, vVlrMesAtuRea, vVlrMesAntRea, vPrevisto, vRealizado numeric(10,2);
              DECLARE vAnoAtu, vMesAtu, vOrdem, vAno, vMes INT;
              DECLARE vGrupo, vSubGrupo, vPessoa, vPessoaAtu VARCHAR(100);
              DECLARE cDados CURSOR FOR SELECT Ordem, Grupo, SubGrupo, Pessoa, Ano, Mes, Previsto, Realizado FROM vwresultadomonitoramento;
              DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
              OPEN cDados;
              read_loop: LOOP
                  FETCH cDados INTO vOrdem, vGrupo, vSubGrupo, vPessoa, vAno, vMes, vPrevisto, vRealizado;
                  IF done THEN
                     LEAVE read_loop;
                  END IF;
                  IF vOrdem <= 4 THEN
                      SET vVlrMesAtuPrv = vVlrMesAtuPrv + vPrevisto;
                      SET vVlrMesAtuRea = vVlrMesAtuRea + vRealizado;
                  INSERT INTO zzResultado VALUES (vOrdem, vGrupo, vSubGrupo, vPessoa, vAno, vMes, vPrevisto, vVlrMesAtuPrv);
                  END IF;
                  IF vOrdem = 4 THEN
                      SET vVlrMesAntPrv = vVlrMesAntPrv + vVlrMesAtuPrv;
                      SET vVlrMesAntRea = vVlrMesAntRea + vVlrMesAtuRea;
                      INSERT INTO zzResultado VALUES (99, vGrupo, 'PONTO DE EQUILIBRIO', vPessoa, vAno, vMes, vVlrMesAntPrv, vVlrMesAntRea);
                      SET vVlrMesAtuPrv = 0;
                      SET vVlrMesAtuPrv = 0;
                  END IF;
              END LOOP read_loop;
              CLOSE cDados;
          END;
      $$ DELIMITER;
       
      Quando co cursor entra nesta condiçao abaixo ele deveria pegar o valor acumulado anterior e acrescentar as variaveis (vVlrMesAntPrv, vVlrMesAntRea). So que o valor se perde e fica tudo zerado.
      Alguém pode me dizer onde estou errando.
      Anexo tem um print do resultado que pretendo ter
       
       IF vOrdem = 4 THEN
                      SET vVlrMesAntPrv = vVlrMesAntPrv + vVlrMesAtuPrv;
                      SET vVlrMesAntRea = vVlrMesAntRea + vVlrMesAtuRea;
                      INSERT INTO zzResultado VALUES (99, vGrupo, 'PONTO DE EQUILIBRIO', vPessoa, vAno, vMes, vVlrMesAntPrv, vVlrMesAntRea);
                      SET vVlrMesAtuPrv = 0;
                      SET vVlrMesAtuPrv = 0;
      END IF;
       

    • By opl12
      Podem me ajudar?
      Preciso colocar um menu "DropDown" na "Nav Bar"... mas tô me quebrando hahahaha
      o que estou fazendo de errado?
      <!DOCTYPE html> <html lang="pt-br"> <head> <!-- Última versão CSS compilada e minificada --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <!-- Tema opcional --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> <!-- Última versão JavaScript compilada e minificada --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <title>::: TESTE :::</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style> .dropdown { position: relative; display: inline-block; } .dropdown-content { display: none; position: absolute; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); padding: 12px 16px; z-index: 1; } .dropdown:hover .dropdown-content { display: block; } </style> </head> <body> <nav class="navbar navbar-default"> <div class="container-fluid"> <div class="navbar-header"> <!--<img width="80px" height="30" src="#" title="seu texto" vspace="10px"/>--> </div> <ul class="nav navbar-nav"> <li class="nav-item"><a class="nav-link" href="#" target="a_blank">HOME</a></li> <li class="nav-link"><a href="#" target="a_blank">LINK A</a></li> <li class="nav-link"><a href="#" target="a_blank">LINK B</a></li> <li class="nav-link"><a href="#">LINK C</a></li> <li><a href="#">LINK D</a></li> <li><a href="#">LINK E</a></li> <li><a href="#">LINK F</a></li> <li><a href="#" target="a_blank">LINK G</a></li> <div class="dropdown"> <div class="dropdown-content" id="myDropdown"> <a href="#">Link 1</a> <a href="#">Link 2</a> <a href="#">Link 3</a> </div> </div> </ul> <ul class="nav navbar-nav navbar-right"> <li><a href="#"><span class="glyphicon glyphicon-user" aria-hidden="true"></span> User</a></li> <li><a href="#"><span class="glyphicon glyphicon-off" aria-hidden="true" <img title="Deslogar"/> </span>Sair</a></li> </ul> </div> </nav> </body> </html>  
    • By BrazucaBostero
      Olá!
       
      Estou com uma dúvida daquelas sobre um código de calculo de desconto no javascript, abaixo segue o código
       
      JS
      function calcValor() { //Declarando as variaveis let preco, porcentagem, desconto, novopreco; //Obtendo dados atraves do prompt preco = parseFloat(document.getElementById("CAMPO_87").value); porcentagem = parseFloat(document.getElementById("CAMPO_85").value); alert(preco) document.getElementById("CAMPO_88").value = preco; alert(preco) //Realizando os calculos desconto = preco * porcentagem / 100; novopreco = preco - desconto; //O .toFixed(2) faz com que o valor seja corrijdo para duas casas decimais document.getElementById("CAMPO_88").value = novopreco; } HTML
      <div class="row"> <div class="col-md-2"><label class="a3label control-label" for="CAMPO_87">Valor da Mensalidade</label> <input class="a3formcontrol form-control" data-campo-id="@@87@@" data-nome="87 - Valor Mensalidade" data-tipo-documental-id="3" id="CAMPO_87" oninput="calcValor()" type="text" /> </div> <div class="col-md-2"><label class="a3label control-label" for="CAMPO_85">Bolsa (%)</label> <input class="a3formcontrol form-control" data-campo-id="@@85@@" data-nome="85 - Bolsa (%)" data-tipo-documental-id="3" id="CAMPO_85" oninput="calcValor()" type="text" /></div> </div> <div class="row"> <div class="col-md-2"><label class="a3label control-label" for="CAMPO_88">Mensalidade Final</label> <input class="a3formcontrol form-control" data-campo-id="@@88@@" data-nome="88 - Valor Mensalidade (F)" data-tipo-documental-id="3" id="CAMPO_88" type="text" oninput="calcValor()" /></div>  
       
      O que acontece, tenho 2 problemas, que estou a quase 1 semana e não consigo resolver
       
       
      Quando jogo somente o valor do campo mensalidade, ele deveria teoricamente aparecer no campo mensalidade final, independente ou não de haver desconto, porém para minha surpresa ele aparece exatamente igual a imagem abaixo
       

       
       
      E minha outra dúvida é sobre a questão de , e .
      Quando calculo desconto com , por exemplo. 2314,50, ele arredonda e quando coloco 2314.50, ele me da o valor exato. Alguém pode me dar uma luz? Desde já fico agredecido
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.