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

subkiller

problemas no post ao submit

18 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
}
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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';
   /* ... */
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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: ;)

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