Jump to content

executar codigo php quando carregar no botao submit


GpL

Recommended Posts

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

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

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

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

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

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

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

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

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

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.