Ir para o conteúdo
GpL

executar codigo php quando carregar no botao submit

Mensagens Recomendadas

GpL    0
GpL

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
softklin    12
softklin

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Battousai    1
Battousai

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">

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
softklin    12
softklin

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
GpL    0
GpL

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Battousai    1
Battousai

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
GpL    0
GpL

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..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Battousai    1
Battousai
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();
}
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
GpL    0
GpL

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Battousai    1
Battousai

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!';
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

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();
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade