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

1 resposta
E

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:

[color=red]Código Javascript: [/color]
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:

[color=red]Código HTML:[/color]
<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>
[color=red]Código Javascript: [/color]
function JSF () 
{ 
document.getElementById("frmRegister").submit(); 
}
[color=red]Código PHP: [/color]
<?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:

[color=red]Código PHP: [/color]
<?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:

[color=red]Código Javascript [/color]
function JSF () 
{ 
var error = document.getElementById("frmRegisterUN").value; 
alert (error); 
document.getElementById("frmRegister").submit(); 
}
[color=red]Código PHP: [/color]
<?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?

1 Resposta

D

Sabe qual o problema? Até que você esteja utilizando algo que faça o javascript rodar no servidor, você não terá sucesso nessa abordagem.
O PHP é server side, ou seja, ele é interpretado e suas funções (e métodos quando OO) são executados no servidor. O javascript é client side, ou seja, é executado no browser do cliente (se não estiver desabilitado).
Você não deve misturar isso, é errado, é feio (olhe bem pro teu código e veja como está horrível).
Separe uma cosia da outra. Quer validar e submeter com javascript, ótimo, mas não faça com que ele dependa ou seja a dependência de qualquer coisa do PHP.

Criado 30 de julho de 2013
Ultima resposta 30 de jul. de 2013
Respostas 1
Participantes 2