Não estava aparecendo nenhum erro, quando eu olhava a rede no devtools ele recebia o script o problema é que o script não está rodando.
Bom, no teste que fiz aqui funcionou. Sugiro que tente isolar o problema removendo o código desnecessário.
Por exemplo, tire toda essa parte do MySQL e deixe somente echo '<script>alert('oi')</script>'
. Se não rodar, veja se aparece algo no console, ou na aba Network pra ver o que foi retornado (veja no código fonte da página se veio esse script
). E se rodar, vc sabe que o problema deve estar em outro lugar (provavelmente no querySelector
, por exemplo).
Sem ver o exemplo completo (HTML, o que foi digitado para testar, etc), é o que dá pra sugerir…
<script>
alert("Este email já existe porfavor coloque outro.");
</script>
Aparece isto na área de resposta
Tambem o email está sendo enviado via ajax no método que você havia me mostrado anteriormente.
Ah, se vc está usando AJAX, não vai funcionar assim. Vc está adicionando elementos no HTML, mas ele só roda se o HTML for carregado. Mas se usa AJAX, ele não vai carregar o HTML todo novamente (esse é o propósito do AJAX, aliás).
Em vez disso, coloque o alert
no código JS que pega a resposta do AJAX.
Me desculpe, eu sou novo na área do ajax se puder me explicar um pouco melhor.
Coloque o código que faz a chamada AJAX
function enviarDadosForm(event) {
event.preventDefault();
var url = "a_crianca_e_o_mundo_da_literatura_form.php";
fetch(url, {
method: 'POST',
// ATENÇÃO: vc pode passar o elemento "form" diretamente, que ele envia todos os campos
body: new FormData(document.querySelector('#form_de_inscricao'))
})
}
Aqui
Bom, nesse caso, como eu já disse, o AJAX não vai recarregar o HTML, e portanto não vai rodar o que está na tag script
.
Portanto, a abordagem tem que ser diferente. Minha sugestão:
Primeiro, vc tem que mudar o PHP para retornar somente a quantidade de registros encontrados. Algo como:
$result = // executa a query
// PHP retorna somente a quantidade de registros encontrados
echo mysqli_num_rows($result);
E no JavaScript vc verifica a quantidade retornada
fetch(url, {
method: 'POST',
body: new FormData(document.querySelector('#form_de_inscricao'))
})
.then(response => response.text())
.then(valor => {
// verifica o valor que o PHP retornou
if (valor > 0) {
alert('já existe');
} else {
// não existe, faz o que precisar aqui...
}
});
(! ) Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, object given in C:\wamp64\www\TesteFormJr\testeForm.php on line 43
Está aparecendo este erro
coloquei o código assim
$result = $conexao->prepare("SELECT * FROM usuarios WHERE Email = ?");
if(!$result){
echo 'erro na consulta: '. $conexao->errno .' - '. $conexao->error;
}
$result->bind_param('s', $email);
$result->execute();
$result->store_result(); // necessário para obter o num_rows abaixo
if ($result->num_rows > 0) {
// já existe
echo mysqli_num_rows($result);
}
fetch(url, {
method: 'POST',
body: new FormData(document.querySelector('#form_de_inscricao'))
})
.then(response => response.text())
.then(valor => {
// verifica o valor que o PHP retornou
if (valor > 0) {
alert('já existe');
} else {
// não existe, faz o que precisar aqui...
}
});
Nesse caso tire o if
e deixe apenas:
echo $result->num_rows;
Ok
Ele retornou o número 1 mas não deu o alert
Desculpa se estou tomando muito de seu tempo.
Olha, não sei o que pode estar errado, mas é algum detalhe que vc fez aí.
Aqui eu fiz assim, tem um HTML:
<form id="myForm" method="POST">
... alguns campos input type="text" etc e esse botão abaixo:
<input type="button" id="ok" value="OK">
</form>
Nesse mesmo HTML também tem o JavaScript que chama o PHP:
// ao clicar no botão, chama o PHP via AJAX
document.querySelector('#ok').addEventListener('click', function() {
fetch('teste.php', { // estou chamando o teste.php, TROQUE PELO SEU ARQUIVO PHP
method: 'POST',
body: new FormData(document.querySelector('#myForm'))
})
.then(response => response.text())
.then(valor => {
console.log(valor); // só pra ver o valor que voltou, mas pode tirar depois se quiser
if (valor > 0) {
alert('já existe');
} else {
alert('não existe');
}
});
});
Repare que o fetch
está chamando o PHP (que por sua vez está em outro arquivo, no meu caso é o criativo nome de teste.php
).
E no arquivo teste.php
tem o código que consulta o banco e retorna a quantidade de linhas:
//mysql etc...
echo $result->num_rows;
E só. Aqui funcionou, eu clico no botão, ele executa o fetch
, que por sua vez chama o PHP, que retorna o número, e volta para o JS, que verifica o número retornado e dá o alert
.
Não sei o que está errado no seu, então vou dar outra dica: sempre que vc muda algo no seu código e diz que não funcionou, tem que dar mais detalhes, senão ninguém tem como adivinhar o que está acontecendo (por exemplo, se dissesse desde o início que está usando AJAX, eu não teria escrito este post - foi um grande chute, porque eu não sabia que estava usando AJAX).
Tem que falar exatamente o que vc mudou no código, como está testando, qual mensagem de erro que deu e/ou como o programa se comportou. Por exemplo, aqui vc colocou o código PHP e JS tudo junto. Eu presumo que eles não estejam juntos, certo? Se estiverem exatamente assim, não vai funcionar mesmo.
Tente separar da forma que eu fiz acima. E se não funcionar, dê mais detalhes do que vc fez, como testou, e qual foi o erro (mensagens no console, o que exatamente o programa fez, etc). Assim todo mundo que ler consegue testar e tentar descobrir o erro.
Ok, obrigado
Separei como você indicou funcionou direitinho, mas teria algum jeito para não presisar separar o php do html e javascript?
Nesse caso acho que não, porque o PHP precisa retornar uma informação bem específica (o número), e somente essa informação.
Mas eu não acho ruim separar, cada arquivo tem sua responsabilidade e fica mais organizado. Claro que cada caso é um caso, mas a princípio não vejo problemas.
Um jeito de não precisar separar seria não usar AJAX. Aí nesse caso o PHP teria que retornar o echo '<script>etc...
mais todo o HTML.
Ok então, obrigado por sua ajuda mais uma vez, desculpa se te estressei em algo, se tirei muito seu tempo, muito obrigado, tenha uma boa tarde!
Relaxa. Mas na próxima, já sabe, inclua todos os detalhes
Ok
Olha basicamente você está fazendo errado!
Não pode e não deve fazer esse código imprimindo um javascript script depois de alguma função, retorna para a sua tela uma flag e depois mostre o alert, lembrando que alert é do javascript !