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:
Código 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:
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:
Código 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:
Código Javascript
function JSF ()
{
var error = document.getElementById("frmRegisterUN").value; alert (error); document.getElementById("frmRegister").submit();
}
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.
Pergunta
Evair_Peterson
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:
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:
<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>
{
document.getElementById("frmRegister").submit();
}
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:
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:
{
var error = document.getElementById("frmRegisterUN").value;
alert (error);
document.getElementById("frmRegister").submit();
}
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?
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.