Jump to content
ricardo_1977

Mensagens de erro na mesma pagina

Recommended Posts

ricardo_1977

Boas,

tenho uma aplicação de gestao de cabeleireiros feita com html, php, css e mysql

Estou a validar todos os dados(como por exemplo ver se o contacto é valido, se as datas são validas,etc...).

O problema é que cada mensagem de erro(ou ate mesmo de sucesso) é aberta noutra pagina o que faz com que tenha de ter sempre 1 "voltar á pagina anterior".

de que forma é que com php consigo por as mensagens na mesma pagina?

Share this post


Link to post
Share on other sites
brunoais

Sem javascript é impossível.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
ricardo_1977

Tens alguma coisa que me ajude nisso?

nao percebo muito de javascript

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

@ricardo_1977, fazes a validação na mesma página em que tens o formulário, é simples :cheesygrin:

@fabiomiguel3, eu acho que o brunoais percebeu mal a pergunta, por isso esse teu comentário foi um pouco infeliz, mas ok..

Share this post


Link to post
Share on other sites
fabiomiguel3

Boas,

@ricardo_1977, fazes a validação na mesma página em que tens o formulário, é simples :cheesygrin:

@fabiomiguel3, eu acho que o brunoais percebeu mal a pergunta, por isso esse teu comentário foi um pouco infeliz, mas ok..

Pois talvez mas se não veio contribuir ou responder a pergunta mais vale não escrever não achas?

Share this post


Link to post
Share on other sites
KTachyon

Sem mudar de página, sem JS é impossível. Mas podes reenviar para a mesma página com flags que te permitam indicar o erro e com os valores que te permitem repor o formulário como havia sido preenchido pelo utilizador.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
ricardo_1977

Eu vou deixar aqui um exemplo do que tenho.

eu estou-me a iniciar nestas andanças, entendo muito mais de java e c.

com o codigo que aqui tenho como faziam para por a aparecer o erro na mesma pagina?

<html>
<head>
<link rel="stylesheet" 
type="text/css" href="css/frontPage.css" />
<title> Formulario para inserir na bd </title>
<meta http-equiv = "Content-Type" content = "text/html; charset = iso-8859-1">
</head>
<body>
<h1 class ="headerAlterar">Gotas de Cor Cabeleireiros - Alterar Dados</h1>
<form action = "php/alterar.php" method = "post" name = "clientes" id = "clientes">
<div class = "idAlterar"><b> Id:</b>
<input name = "id" type = "text" id = "id" size = "30"></div>
<div class = "nomeAlterar"><b> Nome:</b>
<input name = "nome" type = "text" id = "nome" size = "30"></div>
<div class = "moradaAlterar"><b> Morada:</b>
<input name = "morada" type = "text" id = "morada" size = "30"></div>
<div class = "contactoAlterar"><b> Contacto:</b>
<input name = "contacto" type = "text" id = "contacto" size = "30"></div>
<div class = "dataNascAlterar"><b> Data Nascimento:</b>
</div> 
<div class = "diaAlterar"><b> Dia:</b>
<input name = "dia" type = "text" id = "dia" size = "3"></div> 
<div class = "mesAlterar"><b> Mês:</b>
<input name = "mes" type = "text" id = "mes" size = "3"></div> 
<div class = "anoAlterar"><b> Ano:</b>
<input name = "ano" type = "text" id = "ano" size = "6"></div> 
<div class = "insereButtonAlterar" >
<input type = "submit" name = "Submit" value = "Submeter">
</div>
</form>
<a  href = "http://localhost/Cab/html/clientes.html">
<p class = "voltarAlterar" > Voltar</p></a>
</body>
</html>

<html>
<head>
<title> Listar Clientes</title>
<link rel="stylesheet" type="text/css" href="C:\xampp\htdocs\Cab\html\css\frontPage.css" />
<meta http-equiv="Content-Type" content = "text/html; charset=iso-8859-1">
</head>
<body>
<h1 class ="headerListaClientes">Gotas de Cor Cabeleireiros - Alterar Dados</h1>
<?php
include("conectdb.php");
if(($_POST["nome"] == null)&&($_POST["morada"] == null)&&($_POST["contacto"] == null)&&($_POST["id"] == null)) {
echo "<div class = 'erroCV'><b>Todos os campos estão vazios!!!</b></div>";
echo "<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a></body>";
die (mysql_error());
}
$id = $_POST["id"];
$qe = "SELECT * FROM clientes where id = '$id' " ; 
$resultado = mysql_query($qe);
$conta = mysql_num_rows($resultado);
if($conta==0) {
echo "<div class = 'erroID'><b>Id não existe !!!</b></div>";
echo "<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a>";
die (mysql_error());
}
//$data_entrada =  $_POST["data_nascimento"];
$data_entrada;
$dia = $_POST["dia"];
$mes = $_POST["mes"];
$ano = $_POST["ano"];

//campo nome morada e contacto vazios
if(($_POST["nome"] == null)&&($_POST["morada"] == null)&&($_POST["contacto"] == null)) {
echo "<div class = 'erroNMC'><b>Campos nome morada e contacto vazios !!!</b></div>";
echo "<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a></body>";
die (mysql_error());
}

//campo nome vazio
if(($_POST["nome"] == null)&&($_POST["morada"] != null)&&($_POST["contacto"] != null)) {
echo "<div class = 'errophp'><b>Campo nome está vazio!!!</b></div>";
echo "<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a></body>";
die (mysql_error());
}

//campo nome e morada vazios

if(($_POST["nome"] == null)&&($_POST["morada"] == null)&&($_POST["contacto"] != null)) {
echo "<div class = 'erroNM'><b>Campos nome e morada vazios!!!</b></div>";
echo "<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a></body>";
die (mysql_error());
}
//campo nome e contacto vazios
if(($_POST["nome"] == null)&&($_POST["morada"] != null)&&($_POST["contacto"] == null)) {
echo "<div class = 'erroNC'><b>Campos nome e contacto vazios!!!</b></div>";
echo "<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a></body>";
die (mysql_error());
}
//campo morada vazio
if(($_POST["nome"] != null)&&($_POST["morada"] == null)&&($_POST["contacto"] != null)) {
echo "<div class = 'erroC'><b>Campo morada está vazio!!!</b></div>";
echo "<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a></body>";
die (mysql_error());
}
//campo morada e contacto vazios
if(($_POST["nome"] != null)&&($_POST["morada"] == null)&&($_POST["contacto"] == null)) {
echo "<div class = 'erroMC'><b>Campos morada e contacto vazios!!!</b></div>";
echo "<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a></body>";
die (mysql_error());
}
//campo contacto vazio
if(($_POST["nome"] != null)&&($_POST["morada"] != null)&&($_POST["contacto"] == null)) {
echo "<div class = 'erroC'><b>Campo contacto está vazio!!!</b></div>";
echo "<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a></body>";
die (mysql_error());
}

//contacto invalido
if(((($_POST["contacto"])/960000000)<0.2)||((($_POST["contacto"])/960000000)>1.1)) {
echo "<div class = 'errophp'><b>Contacto Invalido!!!</b></div>";
echo "<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a></body>";
die (mysql_error());
}

if(($dia<1)||($dia>31)) {
echo "<div class = 'erroDia'><b>Dia Inválido!!!</b></div>";
echo "<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a>";
die (mysql_error());
}
//meter o erro do mes
if(($mes<1)||($mes>12)) {
echo "<div class = 'erroMes'><b>Mes Inválido!!!</b></div>";
echo "<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a>";
die (mysql_error());
}

if((($mes==4)||($mes==6)||($mes==9)||($mes==11))&&($dia>30)) {
?>
<div class = 'erroMesDia'><b>O mes <?=$mes;?>&nbsptem de ter 30 dias</b></div>;
<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a>;
<?php
die (mysql_error());
}
if(($mes==2)&&($dia>28)) {
?>
<div class = 'erroMesDia'><b>O mes <?=$mes;?>&nbsptem de ter 28 dias</b></div>;
<a  href = 'http://localhost/Cab/html/alterar.html'>
<p class = 'Voltarerrophp' > Voltar</p></a>;
<?php
die (mysql_error());
}
$num = "0";
$caracter = "/";


if(($dia<10)&&($mes<10)) {
$data_entrada = $ano.$caracter.$num.$mes.$caracter.$num.$dia;
}
else {
if(($dia<10)&&($mes>10)) {
$data_entrada = $ano.$caracter.$mes.$caracter.$num.$dia;
}
else {
if(($dia>10)&&($mes<10)) {
$data_entrada = $ano.$caracter.$num.$mes.$caracter.$dia;
}
else {
$data_entrada = $ano.$caracter.$mes.$caracter.$dia;
}
}
}

//monta a query de procura inserindo o id como parametro
$re= "UPDATE clientes SET nome = '".$_POST['nome']."', morada =  '".$_POST['morada']."',contacto = '".$_POST['contacto']."',data_nascimento = '$data_entrada',data_entrada=data_entrada where id = '$id' ;" ;
$result = mysql_query($re);

if($result == 0) {
die (mysql_error("Impossivel alterar os dados!!!"));
}
else{

echo "<div class = 'errophp'><b>Dados alterados com sucesso!!!</b></div>";
}

//echo "<a href = 'javascript:history.back() '> VOLTAR</a>";
        //encerrar a conexao
//encerra a conexao
//mysql_close($db);
?>
<body>
<a  href = "http://localhost/Cab/html/clientes.html">
<p class = "Voltarerrophp" > Voltar</p></a></body>
</body>

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Esse código... nem vou comentar  😲

A lógica é meteres o arquivo que tem o php, no topo do arquivo que tem o html.

Depois, quando houver erros, adicionas-os a um array. Depois, onde queres que apareça o erro, vês se esse erro existe (através da chave) e se existir imprimes.

Share this post


Link to post
Share on other sites
ricardo_1977

Como eu disse estou-me a iniciar nestas andanças.

Como tal até te agradeço se comentares o código.

em termos de verificação já estou a fazer com javascript.

como faço para importar a funcao criada em javascript para html?

isto é a funcao que eu fiz vai-me verificar todos os forms e se importa-se a funcao nao teria de a escrever em todos os html que tenho

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Colocas o javascript num ficheiro externo, depois é só importares.

Não te esqueças que não basta fazer as verificações em javascript, qualquer pessoa pode desligar o javascript no seu browser :cheesygrin:

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Podes fazer validações em JavaScript, mas tens que fazer essas mesmas validações em PHP.

Pois, se só fizeres em JavaScript, qualquer utilizador te pode "enganar".

Share this post


Link to post
Share on other sites
ricardo_1977

Ok,

thks.

já agora pk disseste que nem querias olhar para o codigo que tenho?

podes criticar o codigo na boa.

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

1) Devias "identar" o teu código, só isso faz uma grande diferença quando se olha...

2) Quando estás a verificar se um campo é null, em vez de "if( $campo == null )", basta "if( $campo)"

3) Não devias estar a ver se falta o campo nome e contacto ou morada e contacto, etc.. Mas sim, se falta o nome, o contacto, a morada, etc..

4) Tem atenção ao utilizar o die()

5) Tem muito mais atenção ao utilizar o mysql_error()

Acho que já foram algumas dicas, espero ter ajudado :cheesygrin:

Share this post


Link to post
Share on other sites
mjamado
2) Quando estás a verificar se um campo é null, em vez de "if( $campo == null )", basta "if( $campo)"

Completamente diferente! Cuidado com essas recomendações...


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

@mjamado depende das situações. Neste caso a fazer a comparação ele devia estar fazer algo como "if( $campo === "" )" e não se era null. No entanto, nesta situação apenas o if serve, pois tanto o tipo especial null como uma string vazia, quando convertidos para boolean resultam em false.

Só uma nota, é preferível (na minha opinião) que quando discordamos de algo, argumentar e não, dizer só "não é assim". Ninguém é perfeito, nem ninguém sabe tudo. Mas ao dizer apenas "não é assim", ninguém aprende nada... :cheesygrin:

Share this post


Link to post
Share on other sites
mjamado

Precisamente por depender das situações é que aviso que é preciso ter muito cuidado com esse tipo de recomendação "às cegas". No caso em concreto, o ideal seria usar um !empty($campo) como condição, mas recomendar a troca como o fizeste sem mais explicações pode levar a situações explosivas futuramente, se o OP não tiver a curiosidade de perceber como funciona a "coisa".

Como informação adicional, essa recomendação que fizeste, para além da falha em explicar a diferença, tem ainda mais dois (dois!) erros adicionais: um deles deve ser distracção, esqueceste a negação (if(!$campo) e não if($campo)); o segundo erro, que oblitera o primeiro, é que algumas situações podem rebentar essa verificação.

Por exemplo:

$campo = "0";
if(!$campo)
{
  // yep, vem parar aqui! Mas não devia, porque a string tem conteúdo;
  // infelizmente, o processo de cast derivado do weak typing do PHP leva a que:
  // condição requer boolean | string fornecida | casting percorrido: string -> int -> boolean <=> "0" -> 0 -> false
}

Resumindo: para confirmar variáveis preenchidas, empty; se for um array, juntem-lhe um is_array, se for um número, atirem logo para um intval, e por aí fora. Mas comecem sempre por um empty.

Em casos de programação dinâmica* (usando magic methods, por exemplo), o uso de is_null, isset ou $campo === null já começa a fazer sentido.

"Discordar de algo" e "argumentar" aplicam-se a discussões opinativas. Isto é uma ciência exacta. Se sabes que estás correcto, a mera constatação desse facto é suficiente, recaindo sobre o menos informado o ónus de procurar o conhecimento quando este está livremente disponível, o que é o caso.

Não me cabe na cabeça que alguém com conhecimentos incompletos tente ajudar outrem, sem pesar a consequência óbvia que esse conhecimento incompleto poderá levar (e, normalmente, leva) a situações muito problemáticas para a pessoa que procura ajuda. Se eu não sei do que se está a falar, mantenho a matraca fechada e aguardo que alguém com superior conhecimento na matéria venha esclarecer. Isto não é uma competição, e não vale a pena enganar quem está a aprender só para se responder mais depressa. Nota que não estou a dizer que é o teu caso, mas é, infelizmente, uma situação comum.

* EDIT: "programação dinâmica" no enquadramento de classes com atributos anónimos, especialmente em PHP, e não "programação dinâmica" como em algoritmos para resolução de knapsack, TSP e coisas do género.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

No primeiro erro que referiste, esqueci-me foi no "!" na comparação e não no "$campo", pois eu tinha olhado para um exemplo em que ele tinha "$nome != null", de qualquer modo foi realmente um pequeno grande erro. Mas qualquer um de nós está sujeito a isso... Já quanto ao segundo, "0" não é um nome válido (a parte do código que tinha visto era a variável $nome e por isso não pensei nesse "problema").

E, como podes ver acima eu disse "já foram algumas sugestões" e não "é tudo!". Por exemplo, mais uma é o que tu referiste: verificar se o tipo de dados inserido "corresponde ao que queremos". Entre aspas, porque os campo html enviam sempre strings, arrays ou files (agora não me lembro de mais), ou seja.. Se quisermos um número, verificarmos se a conversão para int foi bem sucedida, etc, etc... Acho que isto também já faz parte da lógica de programação e por isso cabe ao interessado procurar um pouco...

De resto, concordo com tudo o que disseste :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.