Jump to content
Sign in to follow this  
Pitag346

Undefined variable e function

Recommended Posts

Olá pessoal, estou com 2 pequenos problemas...



o seguinte:



tenho esse código:




f(isset($_SESSION['Username']) && isset($_SESSION['Password']))
{
$Sesion = "SELECT * FROM users WHERE username = '". $_SESSION['Username'] ."' AND password = '". md5($_SESSION['Password']) ."'";
$resultado = mysqli_query($mysqli,$Sesion);
if(mysqli_num_rows($resultado) > 0)
{
$myrow = mysqli_fetch_assoc($resultado);
define("Loged", TRUE);
}
}
else
{
define("Loged", FALSE);
}

após isso tenho esse código aqui:



$sq_ban = "SELECT * FROM bans WHERE value = '". $myrow['username'] ."' OR value = '". $myrow['ip_last'] ."'";

mas o php está me retornando:



Undefined variable: myrow




e tenho mais um probleminha



tenho a função:



function onlines(){
$sql = "SELECT * FROM users WHERE online = '1'";
$onlines = mysqli_query($mysqli,$sql);
$rowcount=mysqli_num_rows($onlines);
printf("%d Usuários conectados\n",$rowcount);
}

mas a função não está recebendo a conexão -> "$mysqli"



alguém poderia me explicar aonde está o erro por gentileza nesses 2 casos?



att.


Obrigado desde já!




Share this post


Link to post
Share on other sites

No caso abaixo, você está tentando acessar uma variavel que simplesmente não existe no escopo daquela função.
Pois a função naquele momento tem escopo 'local', se você quer acessar uma variável de fora tem algumas opções.

function onlines(){
    $sql = "SELECT * FROM users WHERE online = '1'";
    $onlines = mysqli_query($mysqli,$sql);
    $rowcount=mysqli_num_rows($onlines);
    printf("%d Usuários conectados\n",$rowcount);
}

Usar o global

function onlines(){
    global $mysqli;
    $sql = "SELECT * FROM users WHERE online = '1'";
    $onlines = mysqli_query($mysqli,$sql);
    $rowcount=mysqli_num_rows($onlines);
    printf("%d Usuários conectados\n",$rowcount);
} 

Passar como parâmetro

function onlines($mysqli){
    $sql = "SELECT * FROM users WHERE online = '1'";
    $onlines = mysqli_query($mysqli,$sql);
    $rowcount=mysqli_num_rows($onlines);
    printf("%d Usuários conectados\n",$rowcount);
}  

Leitura de apoio:

http://php.net/manual/pt_BR/language.variables.scope.php

Sobre o Undefined, meu palpite seria alguma das opções abaixo:

1 - a consulta $Sesion não está retornando nada, ou nesse contexto seu de 'logo' abaixo se perde.

2- Case sensitive no banco?

De qualquer modo.

Execute um antes do "$sq_ban = "SELEC...."

var_dump($myrow);

E veja oq tem dentro :D

Abraço bons estudos

@dicaExtra:

Melhore a segurança do seu código utilizando uma 'sanitização' com o bind-param do Mysqli:

http://php.net/manual/pt_BR/mysqli-stmt.bind-param.php

Pois nunca é uma boa ideia passar direito parâmetros assim:

SELECT * FROM users WHERE username = '". $_SESSION['Username'] ."'

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
Sign in to follow this  

  • Similar Content

    • By SAS Junior
      Bom dia!
      Estou com uma dúvida, sou novo com sql, estou com um probleminha, todo dia preciso gerar lista de clientes pegar o id deles para fazer consulta posterior, como posso atribuir esses id's a uma variável e fazer a outra consulta por essa variável, é possível fazer isso? 
    • By RickSilva
      Bom, preciso criar uma funçao que faz uma variavel string ter um valor durante um periodo de 5 segundos e depois outro valor durante os proximos 5 segundos, fazendo isso a todo momento. Por exemplo: Uma variavel cor que tenha como valor "preto" durante 5 segundos e depois receba o valor "branco".  
    • 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;
       

×

Important Information

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