• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

GpL

executar codigo php quando carregar no botao submit

14 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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">

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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!';
}

0

Partilhar esta mensagem


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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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