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

Sign in to follow this  
subkiller

problemas no post ao submit

Recommended Posts

subkiller

boas

tou a ter um problema no site mais especificamente no post a um botao.

<?php
session_start();
include "protection.php";
include "exist_record.php";
include "execute_query.php";
include "server_info.php";

mysql_connect($server, $username, $password);
mysql_select_db($database);

if (isset($_POST["guardar"]))
{
$user=$_POST["username"];
$pass=$_POST["password"];
$repeat_pass=$_POST["repeat_password"];

if ($user!="")
{
	if($pass!="")
	{
		if($repeat_pass==$pass)
		{
			$encrypted_pass=md5($pass); //encripta a password
			$checkuser = mysql_query("SELECT username FROM utilizadores WHERE username='$user'"); //passa a query para a variavel checkuser
			$username_exist = mysql_num_rows($checkuser); //passa os resultados para a variavel username_exist
			if ($username_exist = 0) //verifica se existem registos
			{
				//se a variavel for igual a 0 significa que o username ainda nao existe
				if (execute_query("INSERT INTO utilizadores(username, password) VALUES('$user','$encrypted_pass')")) //executa a query
				{
					//se a query for executada, destroi a sessao e volta para o inicio para o utilizador poder fazer o login
					session_destroy();
					include "index.html";
					echo "<p><font color='green'>Conta criada com sucesso</font></p>";
					echo "<p><font color='green'>Agora faça login</font></p>";
				}
				else
				{
					$msg="<p><font color='red'>Erro na inserção á base de dados</font></p>";
				}
			}	
			else
			{
				unset($user); //destroi a variavel user
				$msg="<p><font color='red'>Username ja existente</font></p>";
			}
		}
		else
		{
			$msg="<p><font color='red'>Erro ao repetir password</font></p>";
		}
	}
	else
	{
		$msg="<p><font color='red'>Campo password vazio</font></p>";
	}
}
else
{
	$msg="<p><font color='red'>Campo username vazio</font></p>";
}
}
else
{
$msg="<p><font color='red'>Erro</font></p>";
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Termofilm, Máquinas alimentares</title>
<link rel="stylesheet" type="text/css" href="style.css"/>
<link rel="shortcut icon" href="favicon.ico" />
</head>
<body>

<div id="top">
<img src="img/logo.png" alt="logo" />
</div>

<div id="menu">
</div>

<div id="efeito">
</div>

<div id="content" class="clearfix">
<h1>Area de Administração</h1>
<h1>Nova conta</h1>
</div>

<div id="conteudo2" class="clearfix">

<img class= "1" src="img/embalagem.jpg" alt="logo"/>
<img class= "1" src="img/maquina.jpg" alt="logo" />

<h6><li><a href="home.php">Home</a></li></h6>

<h6>Criar nova conta</h6>

<?php
    echo $msg;
?>

<center>
    <form action="admin_nova_conta.php" method="POST">
<h6>Username:</h6><input type="text" name="username"> <br>
<h6>Password:</h6><input type="password" name="password"> <br>
<h6>Repetir Password:</h6><input type="password" name="repeat_password"> <br><br>
<input type="submit" name="guardar" value="Guardar">
</form>
</center>

<div id="bot" class="clearfix">
</div>

<div id="footer" class="clearfix">
<h6>©Termofilm, LDA</h6>
</div>

</body>
</html>

aki esta o meu codigo...

o problema é que me aparece sempre a mensagem de erro que eu meti no else do primeiro if

if (isset($_POST["guardar"]))
{

e aparece sempre isto

else
{
$msg="<p><font color='red'>Erro</font></p>";
}

alguem sabe porque é que me da sempre a msg de erro?

cumps.

Share this post


Link to post
Share on other sites
pedrotuga

no teu forumulário essaa variável aparece de facto definida.

Vê o conteudo do $_POST manualmente

<?php
echo "<pre>";
print_r($_POST);
echo "</pre>";
?>

Share this post


Link to post
Share on other sites
subkiller

eu fiz um var_dump ao post e deu null...

sempre que eu carego no botao ele volta para o index.

Share this post


Link to post
Share on other sites
pmg

O array $_POST só é preenchido quando o utilizador carrega em "Guardar", com o submit do formulário.

Tu estás a testar o array sempre, mesmo quando a página é apresentada pela primeira vez ao utilizador antes deste carregar em "Guardar".

O facto de não haver $_POST não indica erro. É uma situação perfeitamente normal.

Tira o else do teu código.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
subkiller

ok,

mas ainda assim nao insere na base de dados o novo utilizador... eu pensei que fosse o meu metodo post que estivesse mal...

quando eu carrego no guardar ele deve ir para o index, apresentar a mensgem de sucesso e gravar o user na base de dados...

mas ele vai para o index e nao faz nada.

Share this post


Link to post
Share on other sites
pmg

Verifica todos os mysql_query.

Eu costumo fazer, numa primeira abordagem antes de começar a complicar a gestão de erros, assim:

$res = mysql_query("select ...") or die("Erro: " . mysql_error());


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
pmg

A função execute_query() o que é que faz?


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
subkiller

sempre que carrego no guardar, ele vai para o index quer as caixas de texto tenham alguma coisa ou estejam vazias

Share this post


Link to post
Share on other sites
subkiller

a funçao execute_query executa querys...

no exemplo eu estou a passar o insert... eu tou a utilizar o execute_query noutra pagina que muda a pass e funciona perfeitamente.

<?php
function execute_query($query) 
{
include "server_info.php";

if(!($id = mysql_connect($server, $username, $password))) 
{
	return 0;
}

if(mysql_select_db($database, $id)) 
{
	if(mysql_query($query, $id)) 
	{
		mysql_close();
		return 1;
	}
	else 
	{
		mysql_close();
		return 0;
	}
}
else 
{
	mysql_close();
	return 0;
}
}
?>

Share this post


Link to post
Share on other sites
pmg

mas ele vai para o index e nao faz nada.

Hmmm ... tem que fazer alguma coisa :)

Logo a seguir a cada if e a cada else mete um print de qualquer coisa só para ver o que ele faz e o que ele não faz.

/* ... */
if (isset($_POST["guardar"]))
{
   echo 'DBG 1';
   $user=$_POST["username"];
   $pass=$_POST["password"];
   $repeat_pass=$_POST["repeat_password"];
   
   if ($user!="")
   {
      echo 'DBG 2';
      if($pass!="")
      {
         echo 'DBG 3';
         /* ... */
      }
      else
      {
         echo 'DBG 13';
         /* ... */
      }
   }
   else
   {
      echo 'DBG 14';
      /* ... */
   }
}
else
{
   echo 'DBG 15';
   /* ... */
}


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
subkiller

continua sem fazer nada...

if (isset($_POST["guardar"]))
{
echo "DBG 1";
$user=$_POST["username"];
$pass=$_POST["password"];
$repeat_pass=$_POST["repeat_password"];

if ($user!="")
{
	echo "DBG 2";
	if($pass!="")
	{
		echo "DBG 3";
		if($repeat_pass==$pass)
		{
			echo "DBG 4";
			$encrypted_pass=md5($pass); //encripta a password
			$checkuser = mysql_query("SELECT username FROM utilizadores WHERE username='$user'") or die(mysql_error()); //passa a query para a variavel checkuser
			$username_exist = mysql_num_rows($checkuser); //passa os resultados para a variavel username_exist
			if ($username_exist = 0) //verifica se existem registos
			{
				echo "DBG 5";
				//se a variavel for igual a 0 significa que o username ainda nao existe
				if (execute_query("INSERT INTO utilizadores(username, password) VALUES('$user','$encrypted_pass')")) //executa a query
				{
					echo "DBG 6";
					//se a query for executada, destroi a sessao e volta para o inicio para o utilizador poder fazer o login
					session_destroy();
					include "index.html";
					echo "<p><font color='green'>Conta criada com sucesso</font></p>";
					echo "<p><font color='green'>Agora faça login</font></p>";
				}
				else
				{
					echo "DBG 7";
					$msg="<p><font color='red'>Erro na inserção á base de dados</font></p>";
				}
			}	
			else
			{
				echo "DBG 8";
				unset($user); //destroi a variavel user
				$msg="<p><font color='red'>Username ja existente</font></p>";
			}
		}
		else
		{
			echo "DBG 9";
			$msg="<p><font color='red'>Erro ao repetir password</font></p>";
		}
	}
	else
	{
		echo "DBG 10";
		$msg="<p><font color='red'>Campo password vazio</font></p>";
	}
}
else
{
	echo "DBG 11";
	$msg="<p><font color='red'>Campo username vazio</font></p>";
}
}

Share this post


Link to post
Share on other sites
pmg

pera aí ... "vai para o index", mas o action do form é admin_nova_conta.php.

Alguma coisa o manda ir do admin_nova_conta.php para o index.

Onde é que está essa instrução?

É o include "index.html"?

Se é esse include, repara que ele só faz o include quando o execute_query devolve true.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
subkiller

pois, o execute_query devolve true que quer dizer que inseriu na base de dados... depois ele destroi a sessao e vai po index mas ele nao insere na base dados  ;)

Share this post


Link to post
Share on other sites
pmg

Então o execute_query é o culpado! Porquê? ? ? ? ? ? ?

Experimenta ver o que é que a função faz ... e podes tirar os debug anteriores ;)

<?php
function execute_query($query)
{
   include "server_info.php";

   if(!($id = mysql_connect($server, $username, $password)))
   {
      return 0;
   }
   
   if(mysql_select_db($database, $id))
   {

      ### DEBUGGING
      echo "<tt>$query</tt>";

      if(mysql_query($query, $id))
      {

         ### DEBUGGING
         echo "query 'worked'. Number of changed records: ", mysql_affected_rows();

         mysql_close();

         ### DEBUGGING
         exit('No more processing');

         return 1;
      }
      else
      {
         mysql_close();
         return 0;
      }
   }


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
subkiller

vou experimentar isso mas acho que nao é do execute_query... eu antes fiz com o mysql_query e nao deu na mesma... e como ja disse usei o execute_query para trocar uma password e funcionou...

eu estou a utilizar codigo semelhante ao que usei para alterar a password... a diferença é que neste ele deve inserir.

desde ja obrigado pela ajuda.  :cheesygrin:;)

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
Sign in to follow this  

×

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.