Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Não consigo adicionar dados ao banco de dados

Criei a seguinte função para adicionar dados a um banco de dados:

function insereAluno($conexao, Aluno $aluno){

    $nome = $aluno->getNome();
    $telefone = $aluno->getTelefone();
    $nome_camiseta = $aluno->getNomeCamiseta();
    $numero = $aluno->getNumero();
    $tamanho_camiseta = $aluno->getTamanhoCamiseta();
    $sexo = $aluno-> getSexo();
    $pagou = $aluno->getPagou();

    $query = "insert into alunos (nome, telefone, nome_camiseta, numero, tamanho_camiseta, sexo, pagou) values ('{$nome}', '{$telefone}', '{$nome_camiseta}', {$numero}, '{$tamanho_camiseta}', '{$sexo}', {$pagou})";

    return mysqli_query($conexao, $query);
}

Ela é executada no seguinte arquivo:

<?php require_once("class/Aluno.php");
require_once("verifica-dados-aluno.php");
require_once("login/logica-usuario.php");
require_once("banco-aluno.php");

$nome = $_POST['nome'];
$telefone = $_POST['telefone'];
$nome_camiseta = $_POST['nome-camiseta'];
$numero = $_POST['numero'];
$tamanho_camiseta = $_POST['tamanho-camiseta'];
$sexo = $_POST['sexo'];
$pagou = false;

$arrayDeDados = array($nome, $telefone, $nome_camiseta, $numero, $tamanho_camiseta, $sexo);
if(verificaDadosAluno($arrayDeDados)){
    $_SESSION['danger'] = "Verifique os dados inseridos";
    header("location: /painelmo/form-aluno.php");
}else{
    $aluno = new Aluno($nome, $telefone, $nome_camiseta, $numero, $tamanho_camiseta, $sexo, $pagou);
    insereAluno($conexao, $aluno);
    $_SESSION['success'] = "Aluno adicionado com sucesso";
    header("location: /painelmo/form-aluno.php");
}

O código funciona normalmente, só que quando eu vou na tabela do banco n encontro nenhum "aluno" na tabela, gostaria de saber o que está errado nesse trecho de código, desde já agradeço pela ajuda

9 respostas

Primeiro você tem a variável $conexao fazendo a conexão com o banco de dados? Algo assim:

$conexao = mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

Só com isso você pode tentar adicionar os dados no banco. Eu tentaria algo assim:

$query = "INSERT INTO alunos (nome, telefone, nome_camiseta, numero, tamanho_camiseta, sexo, pagou) VALUES ('$nome', '$telefone', '$nome_camiseta', $numero, '$tamanho_camiseta', '$sexo', $pagou) LIMIT 1";
$valida = mysqli_query($conexao,$query);
return $valida;

Porém, particularmente, eu não trabalharia desta maneira com o PHP e Banco de dados, eu utilizaria PDO e Prepared Statement, como segue os guias e referências bem explicativas:

http://php.net/manual/pt_BR/pdo.prepared-statements.php

https://www.w3schools.com/php/php_mysql_prepared_statements.asp

http://codigofonte.uol.com.br/artigos/evite-sql-injection-usando-prepared-statements-no-php

Qualquer dúvida poste aqui.

A conexão está no arquivo conecta.php, nas outras partes onde eu dei require_once elas está funcionando numa boa, apenas as letras maiúsculas seriam um problema, ou até mesmo o lugar onde eu chamo a função?

Mas o conecta.php está sendo incluido onde? Somente nos arquivos require_once? Não entendi....

No arquivo onde está a função, o banco-aluno.php

solução!

Tenta trocar então a função para:

function insereAluno(Aluno $aluno){

    $nome = $aluno->getNome();
    $telefone = $aluno->getTelefone();
    $nome_camiseta = $aluno->getNomeCamiseta();
    $numero = $aluno->getNumero();
    $tamanho_camiseta = $aluno->getTamanhoCamiseta();
    $sexo = $aluno-> getSexo();
    $pagou = $aluno->getPagou();

    $query = "insert into alunos (nome, telefone, nome_camiseta, numero, tamanho_camiseta, sexo, pagou) values ('{$nome}', '{$telefone}', '{$nome_camiseta}', {$numero}, '{$tamanho_camiseta}', '{$sexo}', {$pagou})";

    return mysqli_query($conexao, $query);
}

Sendo que a variável $conexao já estará sendo setada no arquivo conecta.php incluido antes desta função.

E troca a maneira de chamar a função também, para:

insereAluno($aluno);

Te encorajo a ver os links que te enviei sobre PDO, pois é muito mais seguro e melhor para comunicação de PHP com mySQL.

Vou testar aqui e já te informo se funcionou, vou dar uma olhada nesses links que vc me enviou

Dei uma olhada e o retorno da função é esse:

array(6) { [0]=> string(25) "Gabriel Fernandes Roberto" [1]=> string(9) "991212081" [2]=> string(6) "Nandes" [3]=> string(2) "42" [4]=> string(1) "M" [5]=> string(8) "Masulino" }

Parece que no array o atributo 'pagou' não está sendo passado, o erro pode estar aí? Se sim pq esse valor não está sendo atribuido?

Então, eu não tenho acesso a todas essas classes e arquivos para saber se é algo de errado nelas, pois você chama o metodo getPagou(); corretamente, mas as vezes é um erro na própria classe ou dependências dela, que não tenho o código-fonte para saber.

Consegui resolver o problema, muito obrigado pela ajuda, getPagou() estava retornando um false e por isso não ocorria o registro no banco