Jump to content
Joao Domingues

Problema com base de dados

Recommended Posts

Joao Domingues

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.

Share this post


Link to post
Share on other sites
M6

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.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Joao Domingues

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

Share this post


Link to post
Share on other sites
M6

Acho que já percebi.

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.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Joao Domingues

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

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

Share this post


Link to post
Share on other sites
danielfpaiva

Boas,

Em primeiro lugar nesta query dizes que vais passar 4 parâmetros no entanto depois estás a passar 5.

if ($stmt = $mysqli->prepare("INSERT INTO imc (Data, Peso, Altura, Resultado) VALUES (?, ?, ?, ?)"))
            {
                $stmt->bind_param('ssss', $DadosIMC['Data'], $DadosIMC['Peso'], $DadosIMC['Altura'], $DadosIMC['Resultado']);

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:

if ($stmt = $mysqli->prepare("SELECT ID, Data, Peso, Altura, Resultado FROM imc"))

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 by danielfpaiva

Share this post


Link to post
Share on other sites
Joao Domingues

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.

Share this post


Link to post
Share on other sites
danielfpaiva
56 minutos atrás, Joao Domingues disse:

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.

Sem saber exactamente onde elas são usadas torna-se complicado.

 

Precisava de ver onde estão a ser usadas e qual a sua funcionalidade concretamente.

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

×
×
  • Create New...

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.