Problemas na conexão com banco de dados mysql e php OOP (mysqli)

8 respostas
php7
A

Boas, pessoal estou com um problema durante os meus estudos com php Orientado a Objectos para criação de uma CRUD. Então o problema é o seguinte: fui seguindo o curso passo a passo e estava a correr tudo bem passo, mas quando chegou a hora de testar se havia comunicação com a base de dados através da inserção de um registo numa tabela, não teve sucesso. Tentei pesquisar em foruns, voltei a assistir as aulas relacionadas a criação das classes, fiz downgrade, reinstalei o LAMPP (estou a usar linux) mais nada funcionou. Gostaria de ter a vossa ajuda. Abaixo deixarei códigos e a estrutura do projecto

Estrutura
(Raiz)Sistema
-bd
-classes
*conexao.php
*usuario.php
-css
-js
-libs
-procedimentos
-login
*registarUsuario.php (dentro de login que esta dentro de procedimento)
-views
*dependencias.php
*menu.php
*registar.php (est]a na raiz do projecto)

Codigos

conexao.php

<?php

class conectar
{

    // VARIAVEIS/CREDENCIAS  DE ACESSO A BASE DE DADOS
    private $servidor = "localhost";
    private $usuario = "root";
    private $senha = "";
    private $bd = "sistema";

    public function conexao()
    {
        $conexao = mysqli_connect(
            $this->servidor,
            $this->usuario,
            $this->senha,
            $this->bd
        );

        if (!$conexao) {
            echo ("Sucesso!");
        } else {
            echo ("Falha");
        }

        return $conexao;
    }
}

usuario.php

<?php
// require_once "../classes/conexao.php";

class usuario
{
    public function registarUsuario($dados)
    {
        $con = new conectar();
        $conexao = $con->conexao();
        $data = date('Y-m-d');

        $sql = "INSERT INTO usuario(nome, user_name, email, senha, data_captura) VALUES ('$dados[0]', '$dados[1]', '$dados[2]', '$dados[3]', '$data')";


        return mysqli_query($conexao, $sql);
    }
}

registarUsuario.php

<?php

require_once "../../classes/conexao.php";
require_once "../../classes/usuario.php";

$user = new usuario();
$senha = sha1($_POST['senha']);

$dados = array(
    $_POST['nome'],
    $_POST['usuario'],
    $_POST['email'],
    $senha
);


echo $user->registarUsuario($dados);

registar.php

<?php
// require_once "./views/dependencias.php";
require_once "classes/conexao.php";

$obj = new conectar();
$conexao = $obj->conexao();

?>

<!DOCTYPE html>
<html>

<head>
    <title>Registrar Usuário</title>
    <link rel="stylesheet" href="libs/bootstrap-5.0.0-beta1-dist/css/bootstrap.min.css">
    <link rel="stylesheet" href="libs/alertifyjs/css/alertify.min.css">
    <link rel="stylesheet" href="libs/alertifyjs/css/themes/default.css">
    <link rel="stylesheet" href="libs/select2-4.0.13/dist/css/select2.min.css">
    <link rel="stylesheet" href="css/style.css">



</head>

<body style="background-color: gray">
    <br><br><br>
    <div class="container">
        <div class="row">
            <div class="col-sm-4"></div>
            <div class="col-sm-4">
                <div class="panel bg-white">
                    <div class="panel panel-heading bg-warning">Registrar Administrador</div>
                    <div class="panel panel-body">
                        <form id="frmRegistro">
                            <label>Nome</label>
                            <input type="text" class="form-control input-sm" name="nome" id="nome">
                            <label>Usuário</label>
                            <input type="text" class="form-control input-sm" name="usuario" id="usuario">
                            <label>Email</label>
                            <input type="text" class="form-control input-sm" name="email" id="email">
                            <label>Senha</label>
                            <input type="password" class="form-control input-sm" name="senha" id="senha">
                            <p></p>
                            <span class="btn btn-primary" id="registro">Registrar</span>
                            <a href="index.php" class="btn btn-default">Voltar Login</a>
                        </form>
                    </div>
                </div>
            </div>
            <div class="col-sm-4"></div>
        </div>
    </div>


    <script src="libs/jquery/jquery-3.5.1.min.js"></script>
    <script src="libs/select2-4.0.13/dist/js/select2.full.min.js "></script>
    <script src="https://unpkg.com/@popperjs/core@2/dist/umd/popper.js"></script>
    <script src="libs/bootstrap-5.0.0-beta1-dist/js/bootstrap.min.js"></script>
    <script src="libs/alertifyjs/alertify.min.js"></script>
    <script src="js/script.js"></script>


    
    <script>
        $(document).ready(function() {
            $("#registro").on("click", function() {
                vazios = validarFormVazio("frmRegistro");

                if (vazios > 0) {
                    alert("Preencha os campos!!");
                    return false;

                }

                dados = $("#frmRegistro").serialize();
                $.ajax({
                    type:"POST",
                    data:dados,
                    url:"procedimentos/login/registarUsuario.php",
                    success: function(r) {
                        console.log("aqui");
                         alert(r);
                        if (r==1) {
                            alert("Inserido com Sucesso!");
                        } else {
                            alert("Erro ao Inserir");
                        }
                    }
                });

            });

        });
    </script>
</body>

</html>

Gostaria de entender o que fiz de errado para prosseguir no aprendizado… Preciso da vossa ajuda. Obrigado

8 Respostas

J

Debuga com Xdebug, pra pelo menos saber o que deu errado.

A

Xdebug é uma extensão do chrome ou vstudio?

J

PHP, que pode ser usado via VScode. https://www.google.com/search?q=debugar+php+vscode

A

Infelizmente estou com problemas em instalar xdebug no sistema operativo… Realizo todos os procedimentos mas quando executo a página de test com phpinfo não mostra lá que foi instalado mesmo sem ter dado nenhum erro

A

Olá Amigo! Um problema com banco de dados pode ser algo muito abrangente, pois existe diversos fatores para este problema por exemplo: Servidor MySQL, Senha de Acesso ou Conexão através do PHP.
Olhando seu código acredito que seja a função que você está utilizando no PHP para se conectar no MySQL, pois a função mysqli_connect() só está disponível nas versões **4 e 5 ** do PHP. Considerando que você esteja com uma versão mais recente do PHP você deverá utilizar a classe PDO do PHP
Documentação do PDO

Exemplo
$conexao = new PDO(‘mysql:host=localhost;dbname=test’, $user, $pass);

J

Reiniciou o Apache?

Vale muito investir em conseguir isso, não é
difícil. Debugando fica muito mais fácil descobrir a maioria dos problemas que acontecer.

A

Obrigado pela dica, já consegui resolver o problema Xdebug e também da conexão com a base de dados, mas continuo sem conseguir inserir dados na tabela da base de dados… Resolvi da seguinte maneira os dois problemas citados:

  • Para resolver a falta de conexão com o servidor Mysql tive que desinstalar o XAMPP e instalei e configurei separadamente o Apache, phpmyadmin e o PHP7.4.14 e mantive o servidor mysql que já estava na máquina (Linux mint). Após isso já conseguia estabelecer conexão com usuário root que configurei ao instalar o servidor mysql…
  • Em relação ao Xdebug, penso que havia uma confusão com as versões do php no meu sistema, porque no Xampp tinha uma versão e no SO tinha outra versão e quando executava o arquivo que continha o código que ia executar o phpinfo() ele pegava um deles, penso que o problema foi esse…

Ao adicionar o breackpoint na linha do ficheiro e de seguida executando o código não houve um retorno em relação ao Xdebug. Em que linha deveria inserir o brackpoint exatamente? Provavelmente estaria a colocar na linha errada
Mesmo estabelecendo a comunicação com a base de dados, ainda continuo sem inserir dados executando o projecto acima. Obs: não alterei o código de conexão, apenas fiz uma revisão na query sql…

A

Obrigado pela dica, tentei criar um miniprojecto para poder testar a conexão e métodos de inserção e deu resultado com o mysqli… Acredito que seja problema do proprio código falei com instrutor do curso, mas não me deu feedback :exploding_head::exploding_head:

Criado 3 de fevereiro de 2021
Ultima resposta 8 de fev. de 2021
Respostas 8
Participantes 3