Ir para conteúdo

POWERED BY:

Arquivado

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

Evair_Peterson

Código javascript não está funcionando dentro de código PHP

Recommended Posts

Preciso executar um código javascript durante a execução de um código PHP. A coisa funciona +/- assim: quando o usuário clicar no botão REGISTRAR do formulário, será executada a função javascript JSF(), que tem por objetivo fazer uma primeira validação dos dados inseridos no formulário. Se estiver tudo OK, vai dar um submit e executar uma segunda validação pela função PHP enviar(). Se o estiver tudo OK novamente, vai prosseguir com o login do usuário...

 

Durante as validações, caso seja encontrado algum erro, é gerada uma mensagem que é impressa no campo frmRegisterError do formulário. Com o javascript foi fácil fazer este direcionamento da mensagem de erro. Fiz dessa maneira:

 

Javascript:
var frmRegisterError = document.getElementById("frmRegisterError");
frmRegisterError.value = "INFORME SEU NOME DE USUÁRIO";  

 

Como tudo o que eu li até hoje sobre o PHP diz que ele não consegue fazer este direcionamento de seu retorno para um campo específico do formulário, aí a solução foi misturar PHP com javascript. Só para testar se ia funcionar eu fiz da seguinte maneira:

 

HTML:

<form method="post" action="teste.php?function=enviar" id="frmRegister" name="frmRegister" accept-charset="utf-8"> 
<label>Nombre de usuario: </label> 
<input type="text" id="frmRegisterUN" value="" name="frmRegisterUN" /> 
<br /> 
<label>Se encontro un error: </label> 
<input type="text" value="" id="frmRegisterError" name="frmRegisterError"/> 
<br /> 
<input type="button" value="REGISTRAR" id="frmRegister_Button"/ onClick="JSF ()"> 
</form>  

 

Javascript:

function JSF () 
{ 
document.getElementById("frmRegister").submit(); 
}  

 

PHP:

<?php  
if($_GET['function'] == "enviar")  
{  
    enviar();  
}  

function enviar ()  
{  
    if (isset($_POST))  
    {  
        $usuario = $_POST['frmRegisterUN'];  
        if ($usuario != "")  
        {  
            ?>  
            <script>  
            document.write("INFORME SEU NOME DE USUÁRIO");  
            </script>  
      <?php  
        }  
        else  
        {  
            echo "INFORME SEU NOME DE USUÁRIO";  
        }  
    }  
}  
?>

 

 

Dessa maneira a mistura do PHP com o javascript funcionou perfeitamente. Ambos imprimem a mensagem como era desejado. Já que tinha funciounou dessa maneira, penso que agora basta substituir o código javascript interno ao PHP para imprimir a mensagem de erro dentro do campo frmRegisterError do formulário. Então mudei este trecho de código para:

 

PHP:
<?php  
function enviar ()  
{  
    if (isset($_POST))  
    {  
        $usuario = $_POST['frmRegisterUN'];  
        if ($usuario != "")  
        {  
            ?>  
      <script>  
            var error = document.getElementById("frmRegisterError");  
            error.value = "INFORME SEU NOME DE USUÁRIO";  
            </script>  
      <?php  
        }  
        else  
        {  
            echo "INFORME SEU NOME DE USUÁRIO";  
        }  
    }  
}  
?>

 

 

Teoricamente era para ter funcionado, mas não sei por qual motivo não funcionou desse modo! Depois de testar de algumas maneiras cheguei à seguinte conclusão: quando se tem um código javascript interno à um código PHP não é possível obter retorno de getElementById que passa a não funcionar. Para ter certeza de que era isso que estava acontecendo, fiz o seguinte teste:

 

Javascript:
function JSF () 
{ 
var error = document.getElementById("frmRegisterUN").value; 
alert (error); 
document.getElementById("frmRegister").submit(); 
}  

 

PHP:
<?php  
if($_GET['function'] == "enviar")  
{  
    enviar();  
}  

function enviar ()  
{  
    if (isset($_POST))  
    {  
        $usuario = $_POST['frmRegisterUN'];  
        if ($usuario != "")  
        {  
            ?>  
      <script>  
            var error = document.getElementById("frmRegisterUN").value;  
            alert (error);  
            </script>  
      <?php  
        }  
        else  
        {  
            echo "INFORME SEU NOME DE USUÁRIO";  
        }  
    }  
}  
?>

 

 

Com isso, se o usuário insere corretamente o seu nome de usuário era para ser exibida uma mensagem de erro com um alert duas vezes, só que ela só é exibida uma única vez! O que eu percebi que está acontecendo é que, quando a página executa o código da função JSF() a mensagem é exibida normalmente. Porém, ao executar o código contido na função PHP enviar() esta menagem não é exibida como era o esperado. Percebi também que depois da linha que contém o getElementById a execução do código é interrompida.

 

 

Alguém sabe como resolver este problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, não intendi muito bem, se voce que executar js dentro do php não tem como...

se voce que apenas mostrar um erro, tente colocar um

 

window.onload = function(){ // blablabla. getElementbyId("blabla).blabla }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você quer retornar um erro caso o usuário não digite os valores em algum campo e tente enviar é isso?

 

Se for tente chamada sua funação em um "onsubmi" no form mesmo. Exemplo:

 

<form name="cadastro" method="post" action="envia.php" onsubmit="return funcao_que_vc_definiu();">

Qualquer dúvida posta ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cristianoolv e juninhogpe, o objetivo não é diretamente executar o javascript dentro do PHP. Sei que isso não é possível, pois é roda no lado cliente e o outro no servidor. Mas pesquisando bastante na internet ví que como ""fazer uma pausa"" na execução do código PHP, executar um javascript e logo na sequência retomar a execução do código PHP. Tanto é que eu testei e realmente dá certo:

 

<?php  
function enviar ()  
{  
    if (isset($_POST))  
    {  
        $usuario = $_POST['frmRegisterUN'];  
        if ($usuario != "")  
        {  
            ?>  
      <script>  
            var error = document.getElementById("frmRegisterError");  
            error.value = "INFORME SEU NOME DE USUÁRIO";  
            </script>  
      <?php  
        }  
        else  
        {  
            echo "INFORME SEU NOME DE USUÁRIO";  
        }  
    }  
}  
?>

 

Testei de diversas formas e vi que este artifício realmente funciona, inclusive testei em diversos navegadores. O problema é que, durante esta pausa, eu não consigo usar o getElementById, que é exatamente o que eu preciso usar para mudar o value de uma input de meu formulário. No caso, se desse certo eu substituiria o "document.write("INFORME SEU NOME DE USUÁRIO");" por "document.getElementById('IDdoCampo').value = variável_com_o_erro;"

 

Eu até conheço um outro meio algo mais simplista de se fazer esta alteração, mas não está funcionando no Firefox, por isso estou buscando vias alternativas como esta...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei sim, mas não funcionou. Na verdade eu já esperava que funcionaria, isso porque "window.onload" funciona para código javascript e o código que eu postei é uma função PHP com uma pequena chamada javascript. Mas fiz o teste e, logo que abri a página, os navegadores apontaram erro de sintaxe....

 

Eu estava querendo economizar um pouco de tempo usando o pouco que sei e estou vendo que na verdade isso está é tomando todo o meu tmepo, pois só nisso eu fiquei praticamente o dia todo pesquisando, buscando uma solução e nada... O negócio é eu parar um pouco, e começar a estudsar um pouco de AJAX, ou pelo menos JQuery, que acredito que já vai me ajudar e muito...

 

Agradeço por sua atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso é muita gambiarra cara, para com isso. :lol:

 

faça um ajax que chame o teu php valide e traga o retorno. Pronto, bem melhor.

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.