Ir para conteúdo

Arquivado

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

halfar

variável não definida

Recommended Posts

tenho uma funcao em js que está me dando erro:

Citar

 

<?php

$usuario = 1;
      ?>
    <p> <a href='#' onclick='executar($usuario);'>verificar</a></p> 

 

 

 

quando executo a funcao js, ao clicar no link, dá erro de variavel $usuario indefinida...

Citar

 

function executar(x){

var req = CriaRequest();

alert(x);
 

}

 

 

se eu colocar um valor qualquer então a funcao funciona, mas se colocar o nome da variavel da problema.

 

Uma outra função identica a esta, funciona normalmente, só que o valor da variavel passada é buscada do banco de dados...

não sei o porque que funciona aqui, e na outra que é a mesma coisa (a unica diferenca é que o valor da variavel nao vem do bd) não funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, boa tarde.

Você está misturando PHP no seu HTML ali em:

<?php
	$usuario = 1;
?>
<p> <a href='#' onclick='executar($usuario);'>verificar</a></p> 

Para imprimir um valor do PHP no seu HTML você não deveria inseri-lá dessa forma. Há duas opções para tal:

<?php
	$usuario = 1;
	echo "<p> <a href='#' onclick='executar({$usuario});'>verificar</a></p>";
?>

ou

<p> <a href="#" onclick="executar(<?php echo $usuario; ?>);">verificar</a></p>

 

O que acontece é que o PHP é executado no servidor, antes de exibir algum conteúdo. Então o que acontecerá é que irá imprimir na página HTML o seguinte:

<p> <a href='#' onclick='executar(1);'>verificar</a></p> 

 

Uma pergunta parecida, antiga, por aqui:

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tadeu Barbosa, sua resposta corrigiu o problema em parte. De fato faltava colocar mesmo o "<?php echo...?>", é que num outro link que fiz não foi necessário colocar o echo, pois eu ja o havia feito antes, no inicio do link, algo assim:

 

Citar

<?php echo "<a href=...etc";?>

 

mas mesmo assim, está dando erro de variável idefinida.

 

O que ocorre é que esta variável é uma variável de sessão que o javascript não está enxergando e não sei por qual motivo.

 

Na pagina inicial eu iniciei a sessão:

Citar

<?php
session_start(); 
$_SESSION["usuario"] = "";
?>

 

então o usuario faz um login e a variável de sessão está tudo ok até o momento.

 

Então apos realizar o login, existe na barra de ferramenta um outro link para ele poder navegar no site. 

Esta barra de ferramenta está na propria pagina inicial onde iniciei a sessão. só que ao clicar neste link é que o javascript não está enxergando esta variavel.

 

veja o codigo, aqui inicio da variavel de sessão, é nesta pagina onde também tem a barra de ferramenta com os links.

Citar

<?php
session_start(); 
$_SESSION["usuario"] = "";
?>

 

 

aqui o link que consta na barra de ferramenta:

Citar

<p> <a href='#' onclick='meus_jogos(<?php echo $_SESSION['usuario'];?>);'>Meus jogos - conferir resultados</a></p> 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah sim! Entendi errado...

Nesta linha você está inserindo os dados corretamente?

meus_jogos(<?php echo $_SESSION['usuario'];?>)

Creio que deveria ter uma aspa ali, não? Ou o valor da $_SESSION é um int?
No console do seu navegador aparece alguma mensagem? Confere pra gente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem, fiz alguns testes,  e não encontrei erro de logica na programação.

Os testes que fiz foi o seguinte:

logo na pagina inicial, onde contem a barra de navegacao com seus links,  iniciei a sessão e atribui um valor a variável, no caso o valor 11 (apenas para testar mesmo), assim:

Citar

 

<?php
session_start(); 
$_SESSION["usuario"] = "11";
?>

 

 

 

em seguida,  quando clico no link:

Citar

meus_jogos(<?php echo $_SESSION['usuario'];?>)

 

funciona corretamente, ao executar a funcao meus jogos, a caixa de alert mostra o valor 11 corretamente.

Esta função irá invocar uma outra pagina php, que irá buscar no banco de dados o valor correto deste usuário, vamos supor que seja 15.

O valor é encontrado corretamente (15),  só que depois ao clicar no link em questão, continua considerando o valor 11.

Portanto a variável de sessão não está  interagindo nas páginas.

 

Até coloquei o session_start();  na segunda pagina também (embora não seja o correto), mas não adiantou nada.

 

estou achando que estas variáveis de sessão não se entendem muito bem com o ajax não...

Compartilhar este post


Link para o post
Compartilhar em outros sites

retorna 11 sim:

Citar

    <p> <a href='#' onclick='meus_jogos(11);'>Meus jogos - conferir resultados</a></p> 

 

 

vou colocar um trecho do codigo aqui para ficar mais claro:

 

na pagina inicial tenho a inicialização da variável de sessão::

 

Citar

<?php
session_start(); 
$_SESSION["usuario"] = "11";
?>

 

na página inicial existe na barra de ferramentas, onde o usuário clica para se cadastrar ou logar.


 

Citar

 

<div id="login" class="login">

 

<form id="form1" onsubmit="return enviar();">
usuário - <input size="5" id = "usuario" value="">
senha   - <input size="5" id = "senha" value="" type="password">
<input  name="cadas" id= "cadas" value="cadastrar ou logar" type="submit">


</form>
</div>


 

 

a função "enviar" recupera os dados do formulário e executa  a página responsável para acessar o banco de dados e verificar se é usuario novo ou não, e me retorna o número id do usuário,  o qual é exibido corretamente na div abaixo "resul_login".


 

Citar

<div id="resul_login" class="resul_login"></div>
<div id="menu_cadastro" class="menu">Cadastrar ou logar</div>

 

 

agora note que existe uma outra div pertecente ainda a barra de ferramenta, onde o usuário ao clicar irá acessar outras áreas, mas deverá estar logado. Por isso é que a variável usuário deve conter o id do usuário. Mas está retornando 11..., conforme foi declarado no inicio quando inicializei a variável de sessão. O 11 é apenas para exemplo, na realidade esta variavel inicia com nulos. Então se retiro o 11 da variável, ela me retorna indefined...

 

Citar

 


<div id="menu_lotofacil" class="menu"style="left:235px; width:180px;"><div id="grps">LOTOFACIL</div>
<div id="links" class="links">
    <p> Inserir jogos</p> 

<p> <a href='#' onclick='meus_jogos(<?php echo $_SESSION['usuario'];?>);'>Meus jogos - conferir resultados</a></p> 

</div>

</div>

 

 

 

mas se a variável de sessão não funcionar, estou pensando numa outra saída.

Note que o valor da variável usuário é exibido corretamente na div resul_login, porque é nesta div que é exibido o resultado do login, e não na div menu_lotofacil ou na div links...

Será que na função tem como especificar para exibir o resultado em duas divs??

Aí resolve o problema,  e nem preciso da variável de sessão...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Mauricio Molina
      Ola pessoal, será que podem me dar uma força?
       
      Preciso fazer um calculo de subtração de valores, onde o administrador seleciona o mes, pego pelo ID, método GET, para edição.
       
      Como normalmente tem vários meses pagos, o script a seguir só esta funcionando no primeiro item da tabela.
       
      Como posso fazer para funcionar em todos os itens da tabela?
       
      Teria que dar um nome diferente no getValor (id no HTML) para cada um, mas como posso fazer isso?
       
      <!-- Calculo Devolucao--> <script type="text/javascript"> function id(valor_campo) { return document.getElementById(valor_campo); } function getValor(valor_campo) { var valor = document.getElementById(valor_campo).value.replace(',', '.'); /*document.write("Valor: " - valor);*/ return parseFloat( valor ) * 1; } function sub() { var total = getValor('v_recebido') - (getValor('v_devolvido')); id('resultadoDev').value = (total * 1) .toFixed(2, "."); } </script> <!-- Calculo Devolucao--> <div class="toggle"> <input name="v_devolvido" type="checkbox" id="foo<?php echo $rows_aluno['id']; ?>" value="<?php echo $rows_aluno['v_recebido']; ?>"> <label for="foo<?php echo $rows_aluno['id']; ?>"></label> </div> <input type="text" id="v_recebido" value="<?php echo $rows_aluno['v_recebido']; ?><?php echo $rows_aluno['v_receb_parc']; ?>" onblur="sub()" > <div class="form-row"> <div class="form-group col-md-6"> <label for="validationCustomUsername">Valor Parcial:</label> <div class="input-group"> <div class="input-group-prepend"> <span class="input-group-text" id="inputGroupPrepend">R$</span> </div> <input name="v_dev_parc" type="text" class="form-control" id="v_devolvido" placeholder="Digite o Valor" aria-describedby="inputGroupPrepend" onblur="sub()"> </div> </div> <input name="id_user" type="hidden" value="<?php echo $rows_aluno['id_user']; ?>"> <input name="id_prof" type="hidden" value="<?php echo $rows_aluno['id_prof']; ?>"> <input name="status" type="hidden" value="Devolvido"> <input name="mes" type="hidden" value="<?php echo $rows_aluno['mes']; ?>"> <input name="v_recebido" type="text" id="resultadoDev"> </div>  
    • Por mateus.andriollo
      Boa tarde,
      Tenho alguns campos numéricos q ao fazer uma select gostaria q retornasse uma legenda
       
      exemplo:
      Status: 0=Inativo / 1=Ativo Condição: 1=Funcionando / 2=Em manutenção / 3=Manutenção Interna   
      Seria algo assim, tenho varias tabelas com estes campos... mas tenho q ficar usando replace.
      Existe uma forma de criar uma função para isso? Nem q na função eu tenha que setar nome do campo, ficando assim:
      Legenda('Status',cadastro.status) 
    • Por joagostini
      Olá, sou iniciante, e estou fazendo, como exercício, o jogo da velha. 'Desenvolvi' uma rotina de escolha de nível do jogo (serão 3 níveis) que deve aguardar a escolha do usuário para o programa prosseguir. Mas acho que não entendi direito como o javascript funciona, pois o que fiz não funciona e não encontrei uma solução (talvez não saíba como pesquisar corretamente o assunto na web).

      O começo do HTML (que é pouco) onde está um select para escolha do nível é este:
      <body>     <div id="dvmenu">         <button onclick="iniciar()">Iniciar Jogo</button>         <p><br></p>         <div id="dvQuemComeca">             <label for="nivel">Escolha o nivel:</label>             <select id="nivel" onChange='atualiza()'>                 <option value=0 selected>Escolha um nível</option>                 <option value=1>Nível 1 - Brincadeira</option>                 <option value=2>Nivel 2 - Surpresa</option>                 <option value=3>Nível 3 - Desafio</option>             </select>         </div>         <div id="jogador" class="jogador"></div>         <div id="vencedor" class="jogador"></div>     </div>  
      O código JS é este:
      //INÍCIO VEM DE LOAD function iniciar() {     casela = document.querySelectorAll('div[id^="p"]');     for (let cas of casela) {         cas.innerHTML = '';     }     for (let i = 0; i < 9; i++){        tab = tab;     }     console.log(tab);     nivel = 0;      msg = '';     qtosLancesJog = 0;     sorteiaJogador();     //até aqui funcionou direito } //-------------------------------------------------------------------- //ESCOLHA DO NÍVEL DO JOGO function atualiza(){     let selecao = document.querySelector('#nivel');     let opcao = selecao.options[selecao.selectedIndex];     return opcao.value;    }   //--------------------------------------------------------------------   //SORTEIA QUEM VAI COMEÇAR JOGANDO //função para definir o jogador que inicia o tab function sorteiaJogador() {//funcionou direito     let quemComeca = parseInt(Math.floor(Math.random() * 2));     if (quemComeca == 0) {         msg = 'Computador';         //setTimeout(lanceCpu, 2000);//dá um intervalo antes do computador realizar o 1 lance         lanceCpu();     } else msg = 'Humano';//neste caso a rotina espera que o jogador clique no tabuleiro, qdo roda a função lancetab(pos)         lanceHumano();     document.querySelector('#jogador').innerHTML = `<br>O ${msg} começa!`; } //--------------------------------------------------------------------   //ESCOLHA RANDÔMICA, NIVEL = 1, Da POSIÇÃO DO LANCE DA CPU NO tabULEIRO function jogouCpu(){//funcionou direito //nível 1 modo randômico pos = Math.floor(Math.random() * 9); return pos; }   //função humana function lanceHumano(){     console.log('Estou na função humana');     do {         nivel = atualiza();         console.log(nivel);     } while (nivel === 0);     console.log(nivel + ' passei direto'); }  
      O problema está nesse do...while da function lanceHumano(). Segundo entendi, ele prosseguiria apenas quando nivel!== 0, caso contrário, ficaria 'preso' até o momento que o usuário escolhesse uma das opções. Pelo HTML percebesse que setei o select para value=0. Mas ele nem se dá ao trabalho de esperar um miléssimo de segundo, segue em frente com o valor que tiver, no caso 0. O while  não tem efeito. Essa minha perspectiva está errada? Se sim, o que fazer? (paradigma funcional, await?) Obrigado.
      P.S.. No código tem uns conole.logs que servem watch-dogs para ajudar a entender por onde vão as rotinas.
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
    • Por Kellison Ruan
      Acho que não fui tão claro no título, portanto irei esmiuçar melhor aqui...
       
      É o seguinte, quero saber se há algum jeito de pegar as linhas de uma coluna q está em VARCHAR com informações do tipo "4 PONTOS DE ILUMINAÇÃO", dessa informação pretendo retirar somente o número que em questão é o "4" e colocá-lo em outra coluna INTEGER. Há essa possibilidade? Detalhe, as vezes as informações não está seguindo um padrão de vim somente como "4 PONTOS DE ILUMINAÇÃO" às vezes vêm dados com mais informações númericas que precisa distinguir, por exemplo, a mim só interessa pegar números que vem antecedendo as palavras "PONTOS", "PTOS", "PTS", têm algum jeito de distinguir isso?
    • Por slaoxx
      Não conseguir obter êxito, minha sintaxe foi a seguinte:
       
      CREATE FUNCTION precomed ()
      RETURNS decimal
      SELECT AVG(preco_cd);
       
      SELECT precomed ();
       
×

Informação importante

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