GpL Posted December 3, 2007 at 03:24 PM Report Share #151944 Posted December 3, 2007 at 03:24 PM Boas. Eu tenho uma pagina para guardar na base de dados varios campos,mas so quero guardar quando carregar no botao "guardar".. mas cada vez que abro a pagina,isto insere um registo em branco na base de dados .. alguem me pode ajudar ? <? $message=""; class guardar { function guardardados() { mysql_connect("localhost","luis","12345"); mysql_select_db("maximinos"); $nome=$_POST['nome']; $morada=$_POST['morada']; $mail=$_POST['email']; $bi=$_POST['bi']; $tlmv=$_POST['tel']; $comentarios=$_POST['texto']; $sql="insert into contactos (nome,morada,email,bi,telemovel,comentarios) values ('$nome','$morada','$mail','$bi','$tlmv','$comentarios')"; mysql_db_query("maximinos",$sql); $num_ad=mysql_affected_rows(); if ($num_ad > 0){ $message="Dados inseridos com sucesso."; } else { $message="Erro ao inserir dados."; } mysql_close(); } } ?> ... <form id="form1" name="form1" method="post" action="<? $class=new guardar(); $class->guardardados(); ?>" target="I1" border="0"> ... <input name="submit" type="submit" class="submit1" value="Guardar" /> ... pus só a parte do código que penso ser essencial . espero que me consigam ajudar. Link to comment Share on other sites More sharing options...
softklin Posted December 3, 2007 at 03:58 PM Report Share #151948 Posted December 3, 2007 at 03:58 PM Boas! Tens de ter o teu codigo $class=new guardar(); $class->guardardados(); noutro lado. Sugiro assim: <? $message=""; class guardar { function guardardados() { mysql_connect("localhost","luis","12345"); mysql_select_db("maximinos"); $nome=$_POST['nome']; $morada=$_POST['morada']; $mail=$_POST['email']; $bi=$_POST['bi']; $tlmv=$_POST['tel']; $comentarios=$_POST['texto']; $sql="insert into contactos (nome,morada,email,bi,telemovel,comentarios) values ('$nome','$morada','$mail','$bi','$tlmv','$comentarios')"; mysql_db_query("maximinos",$sql); $num_ad=mysql_affected_rows(); if ($num_ad > 0){ $message="Dados inseridos com sucesso."; } else { $message="Erro ao inserir dados."; } mysql_close(); } } if(!empty($_POST['submit'])){ $class=new guardar(); $class->guardardados(); } ?> (html por aqui abaixo...) Ele está a por dados vazios simplesmente porque as variáveis de Post ainda não tinham nada. Estavas a executar para guardar quando mostravas os formulario. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
GpL Posted December 3, 2007 at 04:22 PM Author Report Share #151952 Posted December 3, 2007 at 04:22 PM eu pus esse php,nao alterei o html e continuo com o mesmo problema. Link to comment Share on other sites More sharing options...
Battousai Posted December 3, 2007 at 04:28 PM Report Share #151954 Posted December 3, 2007 at 04:28 PM tás a ver esta parte do código? <form id="form1" name="form1" method="post" action="<? $class=new guardar(); $class->guardardados(); ?>" target="I1" border="0"> na parte do action, poe a pagina que queres que o script chame quando o utilizador clicar no enviar em vez desse código. algo como <form id="form1" name="form1" method="post" action="index.php" target="I1" border="0"> ou então <form id="form1" name="form1" method="post" action="<?php echo $_SERVER['php self']; ?>" target="I1" border="0"> Link to comment Share on other sites More sharing options...
softklin Posted December 3, 2007 at 04:32 PM Report Share #151956 Posted December 3, 2007 at 04:32 PM tás a ver esta parte do código? <form id="form1" name="form1" method="post" action="<? $class=new guardar(); $class->guardardados(); ?>" target="I1" border="0"> na parte do action, poe a pagina que queres que o script chame quando o utilizador clicar no enviar em vez desse código. Exactamente, o problema principal esta ai 🙂 Já agora, só a titulo de curiosidade, porque usas uma classe para actualizar a base de dados? Visto que so tens uma função, a nem ser que pretendas expandi-la Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
GpL Posted December 3, 2007 at 04:52 PM Author Report Share #151961 Posted December 3, 2007 at 04:52 PM tipo,quando carregar no botao quero que a $message passe para "dados introduzidos com sucesso" e que apareça isso na mesma pagina do formulario. não sei se me estão a perceber.. o que pretendo é ter um formulario e ao carregar no botao, gravar isso na base de dados,ficar na mesma pagina e aparecer a mensagem mais abaixo do botao "Dados introduzidos com sucesso.". Usei a classe porque pensei que fosse a unica maneira de,num formulario html, executar um bloco de código php sem ter que chamar e abrir outro ficheiro. Link to comment Share on other sites More sharing options...
Battousai Posted December 3, 2007 at 05:15 PM Report Share #151969 Posted December 3, 2007 at 05:15 PM para isso terias que declarar a variavel $message no método da classe como global. Depois no sítio onde queres que a mensagem apareça, pões algo como isto: <?php if($message){ ?> html XPTO.... <?php echo $message; ?> html XPTO... <?php } ?> Mas sinceramente, a forma como estás a usar essa função/classe não é das melhores a meu ver, apesar de funcional. Link to comment Share on other sites More sharing options...
GpL Posted December 3, 2007 at 05:17 PM Author Report Share #151971 Posted December 3, 2007 at 05:17 PM global como assim? podias exemplificar isso mesmo com o codigo da classe? isto é um projecto que tenho que apresentar quarta e ainda tá cheio de erros :x ainda tenho que fazer um script para testar se os campos tao vazios e nao deixar inserir na base de dados .. etc. obrigado pela ajuda.. Link to comment Share on other sites More sharing options...
Battousai Posted December 3, 2007 at 05:20 PM Report Share #151973 Posted December 3, 2007 at 05:20 PM class guardar { function guardardados() { global $message; mysql_connect("localhost","luis","12345"); mysql_select_db("maximinos"); $nome=$_POST['nome']; $morada=$_POST['morada']; $mail=$_POST['email']; $bi=$_POST['bi']; $tlmv=$_POST['tel']; $comentarios=$_POST['texto']; $sql="insert into contactos (nome,morada,email,bi,telemovel,comentarios) values ('$nome','$morada','$mail','$bi','$tlmv','$comentarios')"; mysql_db_query("maximinos",$sql); $num_ad=mysql_affected_rows(); if ($num_ad > 0){ $message="Dados inseridos com sucesso."; } else { $message="Erro ao inserir dados."; } mysql_close(); } } Link to comment Share on other sites More sharing options...
GpL Posted December 3, 2007 at 05:43 PM Author Report Share #151991 Posted December 3, 2007 at 05:43 PM ok, já funciona. estive a pensar e não tou a ver qual e' a maneira de testar se os campos estão vazios e não guardar na base de dados nenhum registo,se assim for. já fiz isso em asp.. e em php tambem,mas na action chamava outro ficheiro que testava isso.. nunca fiz nem tou a ver como se faça,tudo no mesmo ficheiro. Link to comment Share on other sites More sharing options...
Battousai Posted December 3, 2007 at 05:47 PM Report Share #151992 Posted December 3, 2007 at 05:47 PM Fácil, antes de chamares a função, testas se os campos $_POST[xxx] têm conteúdos. Não precisas de ir para outro ficheiro... Estilo if ($_POST['nome'] && $_POST['blabla']) { //Chamar funcao } // Se queres ver se toda a array tem valores entao fazes um for each $preenchido = 1; foreach ($_POST as $key => $value) if(!$value){ $preenchido = 0; break; } if ($preenchido){ //Chamar funcao }else{ $message = 'Falta preencher campos!'; } Link to comment Share on other sites More sharing options...
djthyrax Posted December 3, 2007 at 06:08 PM Report Share #152005 Posted December 3, 2007 at 06:08 PM Neste caso Battousai, não deves usar !$value mas sim !empty($value), uma vez que se a variável fosse \n ia retornar verdadeiro. 🙂 Minha sugestão: class guardar { function guardardados() { mysql_connect("localhost", "luis", "12345"); mysql_select_db("maximinos"); foreach(array("nome", "morada", "email", "bi", "tel", "texto") as $k){ if(empty($_POST[$k])){ return ($this->message = "Existem campos vazios."); }else $this->dados[$k] = mysql_real_escape_string($_POST[$k]); } $sql = sprintf("INSERT INTO contactos (nome, morada, email, bi, telemovel, comentarios) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')", $this->dados['nome'], $this->dados['morada'], $this->dados['email'], $this->dados['bi'], $this->dados['tel'], $this->dados['texto']); mysql_query($sql); $num_ad = mysql_affected_rows(); mysql_close(); if ($num_ad != 1) return ($this->message = "Erro ao inserir dados."); return ($this->message = "Dados inseridos com sucesso."); } } # ... if(!empty($_POST['submit'])){ $class = new guardar(); echo $class->guardardados(); } Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
GpL Posted December 3, 2007 at 06:15 PM Author Report Share #152009 Posted December 3, 2007 at 06:15 PM já fiz a validacao dos campos em javascript 🙂 Link to comment Share on other sites More sharing options...
djthyrax Posted December 3, 2007 at 07:03 PM Report Share #152034 Posted December 3, 2007 at 07:03 PM já fiz a validacao dos campos em javascript 🙂 Nunca confies nas verificações do lado do cliente, essa é uma das regras essenciais nas aplicações web. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now