Ir ao conteúdo
  • Cadastre-se

Ajuda Validação PHP/Javascript


gih_vianna

Posts recomendados

Oiee Estou fazendo a parte de validação de um form para contato

já fiz a parte javascript, faltaria a parte php q eu já fiz tb, só que a php

como eu faria para aparecer a mensagem de erro melhor?

pois quando da erro aparece a pagina em branco com o escrito do echo..

queria uma janela de javascript pra não sair da pagina...

não sei se é assim q funciona, to apanhando dessa parte de validar os dois lados...

ps:No firefox final, não ta reconhecendo o javascript o.O,

mas o chrome com opera reconhece..será que esta desativado? mas era pra vir funcionando certinho, não mexi em nada..

Pagina do formulario.php // deixei só a parte do formulario e o javascript


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtl1-transitional.dtd">
<html>
<head>
<meta name="description" content=""/>
<meta name="keywords" content=""/>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8"/>
<title></title>
<link rel="stylesheet" href="estilo.css" type="text/css"/>
<script language="javascript" type="text/javascript">
var valido;
function valida(){
var nome = contato.nome.value;
var telefone = contato.telefone.value;
var email = contato.email.value;
var msg = contato.msg.value;

if(nome == "" || telefone == "" || email == "" || msg == ""){
alert('Preencha o campo!');
contato.nome.focus();
return false;
}

if(nome.length < 8){
alert('Digite seu nome completo');
contato.nome.focus();
return false;
}
if ((isNaN (contato.telefone.value))) {
alert('Somente números!');
contato.telefone.focus();

}
var str = document.contato.email.value;
var filter = RegExp(/^[a-z0-9_\-\.]+@[a-z0-9_\-\.]{2,}\.[a-z0-9]{3,}(\.[a-z0-9])?/);
if(filter.test(str))
valido = true;
else{
alert("Este endereço de e-mail não é válido!");
document.contato.email.focus();
valido = false;
}
return valido;

}
</script>

</head>
<body>
<div id="form">

<p class="msg">Mensagem</p>
<table class="form">
<form method="POST" name="contato" action="envia.php" id="contato" onsubmit="return valida();">
<tr>
<td class="p"><label for="nome">Nome:</label></td>
<td class="j"><input type="text" class="input" id="nome" name="nome" size="40" maxlength="50" required/></td>
</tr>
<tr>
<td class="p"><label for="fone">Telefone:</label></td>
<td class="j"><input type="text" class="input" id="fone" name="telefone" size="20" maxlength="10" required></td>
</tr>
<tr>
<td class="p"><label for="email">Email:</label></td>
<td class="j"><input type="text" class="input" id="email" name="email" size="30" maxlength="30" required></td>
</tr>
<tr>
<td class="p"><label for="msg">Mensagem:</label></td>
<td class="j"><textarea id="msg" class="input" name="msg" cols="30" rows="5" required></textarea></td>
</tr>
<tr>
<td>  </td>
<td><input type="submit" class="s" value="   Enviar   " /><input type="reset" value="   Apagar   "class="s"/></td>
</tr>
</form>
</table>
</div>
</body>
</html>

Agora a parte PHP

envia.php


<?php
function anti_injection($str) {
if (!is_numeric($str)) { // verifica se é variavel naão é numerica
$str = get_magic_quotes_gpc() ? stripslashes($str) : $str;
// verifica se o comando get_magic está ativado, se estiver utiliza o comando stripslashes
//stripslashes (remove barras invertidas)
$str = function_exists('mysql_real_escape_string') ? mysql_real_escape_string($str) : mysql_escape_string($str);
//verfica se existe a função mysql_real_escape, se não existir usa a mysql_escape_string
}
return $str;
}

include('conexao.php');

$nome = anti_injection($_POST["nome"]);
$telefone = anti_injection($_POST["telefone"]);
$email = anti_injection($_POST["email"]);
$msg = anti_injection($_POST["msg"]);

if(empty($nome)){
echo "Por favor, preencha o seu nome!";
}
if(empty($telefone)){

echo"Por favor, Preencha o seu telefone!";
}
if(empty($email)){

echo"Por favor, preencha o seu email!";
}
if(empty($msg)){

echo"Por favor, digite sua mensagem!";
}
if(strlen($nome)<=8){

echo"Por favor, preencha seu nome completo!";
}
if(!preg_match('/^[^0-9][a-z0-9_]+([.][a-z0-9_]+)*[@][a-z0-9_]+([.][a-z0-9_]+)*[.][a-z]{2,4}$/', $email)){

echo "E-mail inválido.";
}
$telefone = "(82) 5555-5555";
if(!preg_match('^\(+[0-9]{2,3}\) [0-9]{4}-[0-9]{4}$^', $telefone)){

echo "Telefone inváildo.";
}

$insere = "INSERT INTO contato (nome,telefone,email,msg) VALUES ('$nome', '$telefone', '$email', '$msg')";
$query = mysql_query($insere) or die (mysql_error());

if($query){
echo' <meta http-equiv="refresh" content="0.1;url=contato.php">';
echo'<script type="text/javascript">alert("Mensagem Enviada!");</script>';
}else{
echo'<script type="text/javascript">alert("Erro ao Enviar a Mensagem!");</script>';
echo' <meta http-equiv="refresh" content="0.1;url=contato.php">';
}
?>

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Primeiro de tudo você não está fazendo a verificação server-side (PHP) corretamente. Você verifica tudo, mostra todos os echo's mas permite que o código continue sendo executado (o $insere e o $query sendo definidos). Está errado, você não pode executar a query caso tenha algum erro.

Existem diversas formas de fazer.. umas delas é utilizando arrays contendo os erros:

(...)

$nome = anti_injection($_POST["nome"]);
$telefone = anti_injection($_POST["telefone"]);
$email = anti_injection($_POST["email"]);
$msg = anti_injection($_POST["msg"]);
$erros = Array();

if (empty($nome)) { array_push($erros, "Por favor, preencha o seu nome!"); }
if (empty($telefone)) { array_push($erros, "Por favor, preencha o seu telefone!"); }
if (empty($email)) { array_push($erros, "Por favor, preencha o seu email!"); }
if (empty($msg)) { array_push($erros, "Por favor, digite sua mensagem!"); }
if (strlen($nome)<=8) { array_push($erros, "Por favor, preencha seu nome completo!"); }
if (!preg_match('/^[^0-9][a-z0-9_]+([.][a-z0-9_]+)*[@][a-z0-9_]+([.][a-z0-9_]+)*[.][a-z]{2,4}$/', $email)) {
array_push($erros, "E-mail inválido.");
}
$telefone = "(82) 5555-5555"; // Que que isso ? só um teste ? :s
if(!preg_match('^\(+[0-9]{2,3}\) [0-9]{4}-[0-9]{4}$^', $telefone)){
array_push($erros, "Telefone inváildo.");
}

if(sizeof($erros)==0){
$insere = "INSERT INTO contato (nome,telefone,email,msg) VALUES ('$nome', '$telefone', '$email', '$msg')";
$query = mysql_query($insere) or die (mysql_error());

if($query){
echo' <meta http-equiv="refresh" content="0.1;url=contato.php">';
echo'<script type="text/javascript">alert("Mensagem Enviada!");</script>';
} else {
echo'<script type="text/javascript">alert("Erro ao Enviar a Mensagem!");</script>';
echo' <meta http-equiv="refresh" content="0.1;url=contato.php">';
}
} else {
// Deu erro, então mostra pro usuário
// Vamos utilizar a Array anterior que possue todos os erros que ocorreram para gerar uma mensagem ao usuário
foreach ($erros AS $e) {
$errosString .= "\\n$e";
}
?>
<script type="text/javascript">
alert('Não foi possível enviar sua mensagem, verifique os seguintes erros: <?=$errosString?>');
window.location = 'contato.php'; // Redireciona o usuário
</script>
<?php
}
?>

PS1: Lembrando que a função array_push tem a mesma funcionalidade de fazer:

$erros[] = "Você não digitou x campo!";

PS2: Identei o código da forma que EU acho melhor para esta situação em especifico. Fica a seu critério como quiser identá-lo.

PS3: Eu particularmente prefiro esta função para sql injection:

function anti_injection($sql) {
// remove palavras que contenham sintaxe sql
$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
$sql = trim($sql);//limpa espaços vazio
$sql = strip_tags($sql);//tira tags html e php
$sql = addslashes($sql);//Adiciona barras invertidas a uma string
return $sql;
}

Qualquer dúvida, poste.

Abraços!

Link para o comentário
Compartilhar em outros sites

Oiee, Fui testar o código q você demonstrou aqui, agora eu vi os meus erros, só q ta dando falha nessas linhas, não entendo porque :C

$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);

ERRO > Deprecated: Function sql_regcase() is deprecated

Apareceu um para cada campo..

Linha de cada codigo que deu o mesmo erro...

if (strlen($nome)<=8) { array_push($erros, "Por favor, preencha seu nome completo!"); }
array_push($erros, "E-mail inválido.");
array_push($erros, "Telefone inváildo.");

ERRO>Warning: array_push() expects parameter 1 to be array, null given

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!