Ir para conteúdo
Fórum Script Brasil
  • 0

Guarda os dados para todos os utilizadores e só devia guardar no utilizador que preencheu o formulário


Joao Domingues

Pergunta

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

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'GET')
    {
        if (!empty($_GET['Peso']) && !empty($_GET['Altura']))
        {
            $css = '';
            $Peso = $_GET['Peso'];
            $Altura = $_GET['Altura'];
            $Data = date_default_timezone_set('Europe/Lisbon');
            
            $Resultado = $Peso / ($Altura * $Altura);
            $Resultado = number_format($Resultado, 2, ',', '.');
            
            if (isset($_SESSION['User_ID']))
            {
                $Data = date("Y-m-d");
                $DadosIMC = array("Data" => $Data,
                "Peso" => $Peso,
                "Altura" => $Altura,
                "Resultado" => $Resultado);

                InserirDados($DadosIMC);
            }
        }
    }
?>

 

Código Database.php (Onde guardo os dados do formulário):

<?php
    
    function InserirDados($DadosIMC)
    {
        // Inicializar uma vari�vel que sinaliza o sucesso ou insucesso da opera��o
        $sucesso = False;
        
        // Criar a liga��o
        $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);

        // 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.
            $mysqli->set_charset("utf8");
            
            // 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
                if ($stmt->execute())
                {
                    // A opera��o foi executada com sucesso
                    $sucesso = True;
                }
                
                $stmt->close();
            }

            // Terminar a liga��o
            $mysqli->close();
        }

        return $sucesso;
    }    
    
    function GetResultado($ID)
    {
        // Declarar e inicializar a vari�vel que ir� conter os dados
        $registo = NULL;

        // Criar a liga��o
        $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
        
        // 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.
            $mysqli->set_charset("utf8");
            
            // Preparar a query
            if ($stmt = $mysqli->prepare("SELECT * FROM imc WHERE ID = ?"))
            {
                $stmt->bind_param('i', $ID);
            
                // Executar a query e verificar que n�o retornou FALSE
                if ($stmt->execute())
                {
                    $result = $stmt->get_result();
                    
                    // Verificar o n�mero de registos devolvidos
                    if ($result->num_rows > 0)
                    {                        
                        $registo = $result->fetch_array();
                        
                        $result->free();
                    }
                }
                
                $stmt->close();
            }

            // Terminar a liga��o
            $mysqli->close();
        }
        
        return $registo;
    }    
    
    function GetResultados()
    {
        // Declarar e inicializar a vari�vel que ir� conter os dados
        $registos = NULL;

        // Criar a liga��o
        $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);

        // 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.
            $mysqli->set_charset("utf8");
        
            // Preparar a query
            if ($stmt = $mysqli->prepare("SELECT ID, Data, Peso, Altura, Resultado FROM imc"))
            {
                // Executar a query e verificar que n�o retornou FALSE
                if ($stmt->execute())
                {
                    $result = $stmt->get_result();
                    
                    // Colocar os dados obtidos na vari�vel $registos, em formato array associativo
                    $registos = $result->fetch_all(MYSQLI_ASSOC);
                        
                    $result->free();
                }
                
                $stmt->close();
            }
            
            // Terminar a liga��o
            $mysqli->close();
        }

        // Retornar os dados        
        return $registos;
    }
    
    function EliminarResultado($ID)
    {
        // Inicializar uma vari�vel que sinaliza o sucesso ou insucesso da opera��o
        $sucesso = False;
        
        // Criar a liga��o
        $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
        
        // Verificar se a liga��o foi efetuada com sucesso
        if (!$mysqli->connect_error)
        {
            // Preparar a query
            if ($stmt = $mysqli->prepare("DELETE FROM imc WHERE ID = ?"))
            {
                $stmt->bind_param('i', $ID);
                
                // Executar a query e verificar que n�o retornou FALSE
                if ($stmt->execute())
                {
                    // A opera��o foi executada com sucesso
                    $sucesso = True;
                }
                
                $stmt->close();
            }

            // Terminar a liga��o
            $mysqli->close();
        }

        return $sucesso;
    }
 ?>

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Quando voce salva no bando de dados: INSERT INTO imc (Data, Peso, Altura, Resultado) VALUES (?, ?, ?, ?)

você não esta vinculando a um utilizador, ou seja, não tem como você saber de quem é o calculo que esta no banco.

você pode criar mais um campo no banco chamado utilizador e salvar o ID do usuario nesse campo, e na função de getResultado você adiciona o WHERE:  SELECT ID, Data, Peso, Altura, Resultado FROM imc WHERE utilizador= ?

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz as alteraçoes que dizeste e continua na mesma.

Código da funçao GetResultado:

function GetResultado($ID)
    {
        // Declarar e inicializar a vari�vel que ir� conter os dados
        $registo = NULL;

        // Criar a liga��o
        $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
        
        // 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.
            $mysqli->set_charset("utf8");
            
            // Preparar a query
            if ($stmt = $mysqli->prepare("SELECT ID, Data, Peso, Altura, Resultado FROM imc WHERE utilizador= ?"))
            {
                $stmt->bind_param('i', $ID);
            
                // Executar a query e verificar que n�o retornou FALSE
                if ($stmt->execute())
                {
                    $result = $stmt->get_result();
                    
                    // Verificar o n�mero de registos devolvidos
                    if ($result->num_rows > 0)
                    {                        
                        $registo = $result->fetch_array();
                        
                        $result->free();
                    }
                }
                
                $stmt->close();
            }

            // Terminar a liga��o
            $mysqli->close();
        }
        
        return $registo;
    }

PS: Segue uma fotografia da base de dados.

Base de Dados - Diagrama ER.jpg

Link para o comentário
Compartilhar em outros sites

  • 0

Funçao InserirDados:

function InserirDados($DadosIMC)
    {
        // Inicializar uma vari�vel que sinaliza o sucesso ou insucesso da opera��o
        $sucesso = False;
        
        // Criar a liga��o
        $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);

        // 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.
            $mysqli->set_charset("utf8");
            
            // Preparar a query
            if ($stmt = $mysqli->prepare("INSERT INTO imc (Data, Peso, Altura, Resultado, utilizador_ID) VALUES (?, ?, ?, ?, ?)"))
            {
                $stmt->bind_param('sssss', $DadosIMC['Data'], $DadosIMC['Peso'], $DadosIMC['Altura'], $DadosIMC['Resultado'], $DadosIMC['utilizador_ID']);
                
                // Executar a query e verificar que n�o retornou FALSE
                if ($stmt->execute())
                {
                    // A opera��o foi executada com sucesso
                    $sucesso = True;
                }
                
                $stmt->close();
            }

            // Terminar a liga��o
            $mysqli->close();
        }

        return $sucesso;
    }

 

Tive que a acrescentar $DadosIMC['utilizador_ID'] porque não estava a guardar os dados, nesta linha de código $stmt->bind_param('sssss', $DadosIMC['Data'], $DadosIMC['Peso'], $DadosIMC['Altura'], $DadosIMC['Resultado']). Mas continua a não dar.

Link para o comentário
Compartilhar em outros sites

  • 0

altere essa linha:  $stmt->bind_param('sssss', $DadosIMC['Data'], $DadosIMC['Peso'], $DadosIMC['Altura'], $DadosIMC['Resultado'], $DadosIMC['utilizador_ID']);

tire o sssss

 $stmt->bind_param($DadosIMC['Data'], $DadosIMC['Peso'], $DadosIMC['Altura'], $DadosIMC['Resultado'], $DadosIMC['utilizador_ID']);

 

no index.php

adicione o utilizador_ID assim:

 if (isset($_SESSION['User_ID']))
            {
                $Data = date("Y-m-d");
                $DadosIMC = array("Data" => $Data,
                "Peso" => $Peso,
                "Altura" => $Altura,
                "Resultado" => $Resultado,
				"utilizador_ID" = >$_SESSION['User_ID']);

                InserirDados($DadosIMC);
            }

 

Link para o comentário
Compartilhar em outros sites

  • 0

não estou esquecendo isso.

$DadosIMC = array("Data" => $Data,
                                "Peso" => $Peso,
                                "Altura" => $Altura,
                                "Resultado" => $Resultado,
                                "utilizador_ID" = >$_SESSION['User_ID']);


                                InserirDados($DadosIMC);

Link para o comentário
Compartilhar em outros sites

  • 0
18 horas atrás, Joao Domingues disse:

não estou esquecendo isso.

$DadosIMC = array("Data" => $Data,
                                "Peso" => $Peso,
                                "Altura" => $Altura,
                                "Resultado" => $Resultado,
                                "utilizador_ID" = >$_SESSION['User_ID']);


                                InserirDados($DadosIMC);

n sei se pode ser isso, mas experimenta tirar o espaço que tem entro o = e o >

deixa os dois junto =>

Link para o comentário
Compartilhar em outros sites

  • 0

Não tenho nenhuma pasta chamada php.idi ou uma pasta que diga a origem dos erros. Eu criei o site no xampp e eu é que hosteava o site, agora passei para o host online gratuito e comecei a deparar com algumas melhorias que devia fazer no site, uma delas era esta que era um erro grave depois tinha mais dois erros com o email na criação de um novo utilizador.

Editado por Joao Domingues
Link para o comentário
Compartilhar em outros sites

  • 0

Código Index.php:

if (isset($_SESSION['User_ID']))

{
           $Data = date("Y-m-d");
           $DadosIMC = array("Data" => $Data,
                                             "Peso" => $Peso,
                                              "Altura" => $Altura,
                                              "Resultado" => $Resultado,
                                             "utilizador_ID" => $_SESSION['User_ID']);
          echo InserirDados($DadosIMC);
          InserirDados($DadosIMC);

}

Assim? Não acontece nada.

Link para o comentário
Compartilhar em outros sites

  • 0
13 horas atrás, Joao Domingues disse:

Tive que tirar var_dump do InserirDados($DadosIMC) senão o site não abria.

E apareceu esta mensagem no site: 

array(5) { ["Data"]=> string(10) "2016-10-18" ["Peso"]=> string(2) "60" ["Altura"]=> string(4) "1.75" ["Resultado"]=> string(5) "19,59" ["utilizador_ID"]=> int(1) }

o utilizador n esta sendo atribuido, você ta criando a sessão para grava no $_SESSION['User_ID'] ?

faz o seguinte no começo do arquivo escreve session_start();

 

Link para o comentário
Compartilhar em outros sites

  • 0

<?php
        if (isset($_SESSION['User_ID']))
        {
            $ID = var_dump($_SESSION['User_ID']);
            $NomeUtilizador = Usermanager::GetNomeUtilizador($ID);
        }
   
        if (!isset($NomeUtilizador)) 
        {
            $NomeUtilizador = "";
        }
    ?>

Assim?

Se for assim aparece int(1) debaixo do cabeçalho do site, que corresponde ao que esta na base de dados. Agora era só guardar os dados do formulário nesse ID.

Editado por Joao Domingues
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...