Problema com base de dados - PHP - Portugal-a-Programar
By Joao Domingues, September 30, 2016 in PHP
Boa tarde, tenho uma página (Conta.php) que só aparece no site se o utilizador entrar na conta que criou e outra página (Index.php) que o utilizador preenche um formulário e os dados que ele introduziu nesse formulário vão aparecer na página da Conta.php mas o meu problema é que ele esta a guardar os dados do formulário do Index.php em todas as contas. Queria que só guardasse no utilizador que a preencheu e não em todos os utilizadores.
João, tens de colocar as tuas questões de forma clara e concreta.
O titulo é um problema com base de dados, depois só descreves (e mal) a interação do teu site em páginas php e por fim ninguém consegue sequer adivinhar qual o problema porque dizes que querias que só guardasse o utilizador que preencheu (o que raio isso queira dizer)...
Tens de ser claro e concreto, caso contrário ninguém vai conseguir perceber muito menos ajudar.
Explica lá isso direito, com informação útil e código que possa ajuda a compreender o teu problema.
Peço desculpa mas é difícil de explicar o meu problema porque sou novato neste tipo de coisas. Bem eu tenho como minha página principal e inicial o index.php que contêm um formulário do imc (altura, peso e o resultado do mesmo). O utilizador para preencher o formulário tem que se inscrever no site, de seguida entrar na conta criada para poder preencher o formulário de imc. Agora o meu problema é o seguinte, vamos ver se me consigo explicar direito, esses dados do formulário do imc na pagina index.php esta a guardar em todos os utilizadores e eu só quero que guarde no utilizador que a prencheu. Fiz me entender ou esta difícil de perceber? Tenho um pouco dificuldade em expressar, desculpa lá.
A primeira coisa a fazeres é criares uma páginas de login/registo e outra para o formulário, caso contrário vais ter uma confusão de código que vai ser dificil de gerir.
A segunda coisa a fazeres é ligares os dados de imc ao utilizador usando uma chave estrangeira na base de dados, desta forma quando fazes um select, insert ou update filtras sempre usando a chave do utilizador que está autenticado.
Nao é isso a minha duvida, vou colocar codigo e imagens para ser mais fácil entender.
Tenho um formulário de IMC (http://prnt.sc/cqqr7j) que quero guardar os dados inseridos nele para a página Conta.php (http://prnt.sc/cqqrdl) mas esta página da Conta.php só aparece se o utilizador criar uma conta no site, o problema é que os dados do formulário estao a ser guardados na página da Conta.php mas esta a guardar os dados para todos os utilizadores e só devia guardar no respetivo utilizador.
Por exemplo tenho um utilizador Joao e outro Rita, ambos criam conta no site e entram nas mesmas, preenchem o formulário do IMC e os dados que cada um preencheu deve ir na sua Conta.php e o meu problema é esse, ele esta a guardar todos os dados inseridos no formulário e guarda para todos os utilizadores e eu só quero que guarde para o utilizador que a preencheu.
Código Index.php (Onde está o formulário do IMC):
if (!empty($_GET['Peso']) && !empty($_GET['Altura']))
$Data = date_default_timezone_set('Europe/Lisbon');
$Resultado = $Peso / ($Altura * $Altura);
$Resultado = number_format($Resultado, 2, ',', '.');
$DadosIMC = array("Data" => $Data,
"Peso" => $Peso,
"Altura" => $Altura,
"Resultado" => $Resultado);
InserirDados($DadosIMC);
Código Database.php (Onde guardo os dados do formulário):
function InserirDados($DadosIMC)
// Inicializar uma vari�vel que sinaliza o sucesso ou insucesso da opera��o
$sucesso = False;
// Criar a liga��o
// Verificar se a liga��o foi efetuada com sucesso
if (!$mysqli->connect_error)
// IMPORTANTE: Antes de interagir com a base de dados, estabelecer o character set.
// Preparar a query
if ($stmt = $mysqli->prepare("INSERT INTO imc (Data, Peso, Altura, Resultado) VALUES (?, ?, ?, ?)"))
$stmt->bind_param('ssss', $DadosIMC['Data'], $DadosIMC['Peso'], $DadosIMC['Altura'], $DadosIMC['Resultado']);
// Executar a query e verificar que n�o retornou FALSE
// A opera��o foi executada com sucesso
$sucesso = True;
// Terminar a liga��o
return $sucesso;
function GetResultado($ID)
// Declarar e inicializar a vari�vel que ir� conter os dados
$registo = NULL;
if ($stmt = $mysqli->prepare("SELECT * FROM imc WHERE ID = ?"))
// Verificar o n�mero de registos devolvidos
$registo = $result->fetch_array();
return $registo;
function GetResultados()
$registos = NULL;
if ($stmt = $mysqli->prepare("SELECT ID, Data, Peso, Altura, Resultado FROM imc"))
// Colocar os dados obtidos na vari�vel $registos, em formato array associativo
$registos = $result->fetch_all(MYSQLI_ASSOC);
// Retornar os dados
return $registos;
function EliminarResultado($ID)
if ($stmt = $mysqli->prepare("DELETE FROM imc WHERE ID = ?"))
Em primeiro lugar nesta query dizes que vais passar 4 parâmetros no entanto depois estás a passar 5.
Parece-me que deverias ter um campo na tabela imc onde guardas o id do utilizador.
Qual é a utilidade das funções GetResultado($ID) e GetResultados()?
Vou deduzir que o GetResultados() é utilizado para preencher a tabela IMC's e que o GetResultado($ID) será para chamada quando o utilizador quiser ver o resultado completo de uma as entradas da tabela.
Na função GetResultados() tens a seguinte query:
Isto vai retornar todas as entradas que estão na base de dados, pois não tens nenhuma condição para "filtrar" as entradas que são de um determinado utilizador.
Caso eu não tenha entendido a utilidade de cada uma das funções explica melhor se faz favor.
Edited November 8, 2016 by danielfpaiva
Eu frequentei um curso de profissional de informática e tive que fazer uma PAP (construir um website) e o meu professor ajudou me e algumas coisas como as funções de Resultado não sei para que servem.