Ir para conteúdo
MarcosMth

Problema na Inserção de dados

Recommended Posts

olá boa noite, meu nome é Marcos Mathias, eu sou aluno do IFRJ e estou estuando PHP  e MSQYLi , preciso fazer um trabalho que é um sistema de uma locadora, preciso fazer o upload da foto dos clientes.

a foto esta funcionando  perfeitamente, porém os outros dados não estão chegando no banco de dados, da a mensagem que n foi possível inserir usuário, gostaria que alguém pudesse me ajudar pois n consigo ver o erro

obs: esta orientado a objeto.

 

 

este é o código html formulário:

<form action='comandos/cadastra.php' method='POST' enctype='multipart/form-data'>
                    <div class='formli'>
                    <label name='labelL'>Nome: </label><input name='nome' class='inputL' type='text'><br><br>
                    <label name='labelS'>E-mail: <input name='email' class='inputL' type='text'><br><br>
                    <label name='labelS'>CPF: </label><input name='cpf' class='inputL' type='text'><br><br>
                    <label name='labelS'>Data de Nascimento: </label><input name='dataN' class='inputL' id='data' type='text'><br><br>
                    <label name='labelS'>Login: </label><input name='login' class='inputL' type='text'><br><br>
                    <label name='labelS'>Senha: </label><input name='senha' class='inputL' type='text'><br><br>
                    <label name='labelS'>Tipo de Usuário: </label>
                    <select name="tipo">
                        <option value="2" >ADM</option>
                        <option value="1">Cliente</option>
                     </select><br><br>
                    <label>Foto: </label><input type="file" name="foto"></br>
                    <input class='botao' id='botaoCC' type="submit" value="Cadastrar">
                    </div>    
                </form>

 

-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=

esse aqui é  a ação do formulario:

 

<?php

aqui esta tudo ok

include_once"validacao.php";
$valid = new Validacao();
$valid -> logou ();
$valid -> restricao_pagina(['permissao_cliente']);

 

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

aqui fica a função que eu montei 
$valid -> cadastrar();

 

?>

 

 

 

 

-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=

 

e aqui fica o código da função na class Validacao:

<?

class Validacao    {

public function cadastrar(){
include"conexao.php";
if(empty($_POST['nome']) || empty($_POST['email']) || 
empty($_POST['cpf']) ||empty($_POST['dataN']) ||
empty($_POST['login']) ||empty($_POST['senha']) ||
empty($_POST['tipo']) ||empty($_FILES['foto']))

{
    echo"preencha todos os campos";
    exit;
};

$nome = $_POST['nome'];
$email = $_POST['email'];
$cpf = $_POST['cpf'];
$dataN = $_POST['dataN'];
$login = $_POST['login'];
$senha = $_POST['senha'];
$permissao = $_POST['tipo'];
$foto = $_FILES['foto'];

$extensao = strtolower(substr($foto['name'], -4));

$nome_foto  = md5(time()).$extensao;
$diretorio = "../foto/";
move_uploaded_file($foto['tmp_name'], $diretorio.$nome_foto);
$inseri = "INSERT INTO cliente_locadora VALUES
('','$nome','$email','$cpf','$dataN','$login','$senha',
                    '$permissao','','$nome_foto', NOW())";
                    
$resultado=$conexao -> query($inseri);
if($resultado){
    echo"foi";
}else{
    echo"n foi possivel cadastrar usuario";
}


}

 

}

?>

 

-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=

 

 

arquivo CONEXÃO:

 

<?php
$host='localhost:3306';
$user='root';
$pass='';
$dataBase='locadora';

$conexao=new mysqli($host,$user,$pass,$dataBase);
if(!$conexao){
    echo"conexão com o banco d ados falhou :(";
    exit;
};


?>

-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

O método 'cadastrar()' provavelmente não recebe o array $_POST.

 

Nesse caso você poderia passar eles explicitamente, Ex:

 

<?php
class Validacao    {
	public function cadastrar($dados){
		if(empty($dados['nome']) || empty($dados['email']) || 
           .....
		

E alterar quem chama a Classe/Metodo:

 

<?php

$validacao = new Validacao();

$validacao->cadastrar($_POST);
Citar

da a mensagem que n foi possível inserir usuário

 

as funções, var_dump, print_r() devem ser suas amigas, exemplo de debug que você deve fazer para entender melhor o que está acontecendo.

 

$inseri = "INSERT INTO cliente_locadora VALUES
('','$nome','$email','$cpf','$dataN','$login','$senha',
                    '$permissao','','$nome_foto', NOW())";
					
echo $inseri;die();

Vai ajustando o seu script até gerar o SQL que deveria, ou melhor ainda utilize o PDO

 

 

--------- 

Alguns pontos que podem ser melhorados:

 

Sobre iniciar o php, de preferencia a tag completa:

 

envés disso:

<?

Prefira isso:

<?php

Mais em:

http://www.php-fig.org/psr/psr-1/#overview

 

 

Evite fazer superclasses, se você esta usando orientação objetos, tente dividir mais as responsabilidades das classes / métodos.

<?php

class ClienteLocadora    {
	
	
	public function validar($dados){
		
		if(empty($dados['nome']) || empty($dados['email']) || 
		empty($dados['cpf']) ||empty($dados['dataN']) ||
		empty($dados['login']) ||empty($dados['senha']) ||
		empty($dados['tipo']) ||empty($_FILES['foto']))
		{
			echo"preencha todos os campos";
			exit;
		};
	}
	
	
	/**
	 * @param  Array Dados do ClienteLocadora
	 * @param  $_FILE
	 * @return boolean FileUpload?
	 */
	public function salvarFoto($dados, $arquivo) { 		
		$foto = $arquivo['foto'];		
		$extensao = strtolower(substr($foto['name'], -4));
		$nome_foto  = md5(time()).$extensao;
		$diretorio = "../foto/";
		return move_uploaded_file($foto['tmp_name'], $diretorio.$nome_foto);	
	}

	
	public function cadastrarNoBanco($dados){
		
		$nome = $dados['nome'];
		$email = $dados['email'];
		$cpf = $dados['cpf'];
		$dataN = $dados['dataN'];
		$login = $dados['login'];
		$senha = $dados['senha'];
		$permissao = $dados['tipo'];
		$extensao = strtolower(substr($foto['name'], -4));
		$nome_foto  = md5(time()).$extensao;
		
		
		
		
		
		$inseri = "INSERT INTO cliente_locadora VALUES
		('','$nome','$email','$cpf','$dataN','$login','$senha',
							'$permissao','','$nome_foto', NOW())";
							
		$resultado=$conexao -> query($	);
		if($resultado){
			echo"foi";
		}else{
			echo"n foi possivel cadastrar usuario";
		}

	}
 
}

 

Ai no seu cadastrar.php ficaria algo +/- assim:

<?php

$clienteLocadora = new ClienteLocadora();
$clienteLocadora->validar($_POST);
$clienteLocadora->salvarFoto($_POST, $_FILE);
$clienteLocadora->cadastrarNoBanco($_POST, $_FILE);

 

Obviamente tem diversas coisas a melhorar, mas só pra te indicar o caminho mesmo.

 

 

 

Obs:

 

Caso não tenha nenhum HTML no fim do arquivo php, evite de fechar a tag php:

 

<?php

//Fim do arquivo php, opcional usar o ?>

 

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela sua resposta gostei muito, estou no serviço assim que chegar em casa eu vou fazer do jeito que você escreveu, qualquer coisa eu volto aqui rs 

Eu fiz correndo tipo uma noite eu tava animado, ae virei a noite fazendo o trabalho que era em grupo kkkk por isso ta meio bagunçado... mas muito obrigado msm, vi coisas que n sabia como por exemplo passar um parâmetro ($_POST)  no objeto 

$validacao->cadastrar($_POST) nem sabia que isso era possível kkk

Compartilhar este post


Link para o post
Compartilhar em outros sites

MUITO OBRIGADO, realmente você achou o erro, como você disse O método 'cadastrar()' provavelmente não  recebe o array $_POST... 

Obrigado, tenha uma boa tarde 

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Vagner Nunes
      Prezados,
       
      Tenho um ambiente, que tem cerca de uns 80 sites publicados, o problema que está ocorrendo, que além da lentidão, hora aparece a mensagem A connection attempt failed because the connected party did nor properly respond a period of time, or established connection failed because connected host has failed to respond. 
       
      Neste ambiente, as minhas páginas são em ASP.NET com C#, com conexão ao banco de dados MySql.
       
      Não sei como proceder nesta situação, poderiam me ajudar?
       

       
    • Por Fábio.info7
      Olá pessoal, estou precisando de uma grande ajuda, tenho duas tabelas no postgres, são elas: PESSOA e a outra é  ENDERECOS, elas estão relacionadas, oq acontece é que no php eu preciso recuperar o valor do id através da função nextval('nome_da_sequnce'), e não estou sabendo fazer, preciso recuperar o ultimo id e depois realizar o insert nas tabelas relacionadas, poderiam me dar um exemplo de como implementar isso? abaixo deixo o meu codigo php, acredito que esteja errado pois não esta gravando no banco.
       
      Minhas tabelas do banco: CREATE TABLE public.pessoa ( codigo_aluno integer NOT NULL DEFAULT nextval('pessoa_codigo_aluno_seq'::regclass), cpf character varying(11) COLLATE pg_catalog."default" NOT NULL, nome character varying(30) COLLATE pg_catalog."default" NOT NULL, sexo character varying(30) COLLATE pg_catalog."default" NOT NULL, nascimentodata date NOT NULL, email character varying(50) COLLATE pg_catalog."default" NOT NULL, endereco integer, CONSTRAINT pessoa_pkey PRIMARY KEY (codigo_aluno), CONSTRAINT pessoa_endereco_fkey FOREIGN KEY (endereco) REFERENCES public.enderecos (codigo_endereco) ) CREATE TABLE public.enderecos ( codigo_endereco integer NOT NULL DEFAULT nextval('enderecos_codigo_endereco_seq'::regclass), logradouro character varying(200) COLLATE pg_catalog."default" NOT NULL, bairro character varying(80) COLLATE pg_catalog."default" NOT NULL, cidade character varying(100) COLLATE pg_catalog."default" NOT NULL, uf character varying(2) COLLATE pg_catalog."default" NOT NULL, cep character varying(20) COLLATE pg_catalog."default" NOT NULL, CONSTRAINT enderecos_pkey PRIMARY KEY (codigo_endereco) ) ****** ABAIXO O PHP *************************************** <?php try { require_once "conexao.php"; $dados = filter_input_array(INPUT_POST, FILTER_DEFAULT); $sql = "select nextval('pessoa_codigo_aluno_seq')"; $seq = $conn->prepare($sql); $id = $seq->execute(); $id = $seq->fetchAll(PDO::FETCH_ASSOC); $sql = "insert into pessoa (cpf, nome, sexo, nascimentodata, email, endereco ) values (:cpf, :nome, :sexo, :nascimentodata, :email, :fk_endereco )"; $inserir = $conn->prepare($sql); $inserir->bindParam(":cpf", $dados["cpf"]); $inserir->bindParam(":nome", $dados["nome"]); $inserir->bindParam(":sexo", $dados["sexo"]); $inserir->bindParam(":nascimentodata", $dados["nascimentodata"]); $inserir->bindParam(":email", $dados["email"]); $inserir->bindParam(":fk_endereco", $id['codigo_endereco']); $inserir->execute(); // Gravando dados de endereço $sql_end = "insert into enderecos (codigo_endereco, logradouro, bairro, cidade, uf, cep, pessoa )values(:codigo_endereco, :logradouro,:bairro,:cidade,:uf,:cep, :pessoa)"; $end = $conn->prepare($sql_end); $end->bindParam(":codigo_endereco", $id['codigo_endereco']); $end->bindParam(":logradouro", $dados["logradouro"]); $end->bindParam(":bairro", $dados["bairro"]); $end->bindParam(":cidade", $dados["cidade"]); $end->bindParam(":uf", $dados["uf"]); $end->bindParam(":cep", $dados["cep"]); $end->execute(); echo "Dados gravados com sucesso!"; } catch (Exception $e) { echo "Mensagem: " . $e->getMessage() . "<br/>"; echo "Linha do Erro: " . $e->getLine() . "<br/>"; } PRECISO CONSEGUIR INSERIR OS DADOS NAS DUAS TABELAS INSERINDO OS IDS RECUPERADOS PELO NEXTVAL()
    • Por luisfeliperm2
      Quero selecionar 10 noticias do banco de dados, irei utilizar paginação, então na próxima pagina será selecionada da 11-20, 21-30. Só que em todos esses select eu quero que venha a noticia principal que é definida pela coluna "destaque".  O motivo é que eu não quero usar 2 select pra buscar noticias.
      Pra ser bem resumido, eu quero selecionar a noticia principal e depois selecionar mais 10 que podem ser qualquer uma
       
      Tentei da seguinte forma:
      select * from news where destaque = true UNION select * from news ORDER BY id DESC LIMIT 10 OFFSET 1;
    • Por cleitonkloc
      Olá, estou desenvolvendo um banco de dados para coletar informações e relatar para a Diretoria as despesas e custos dos veículos.
      Estou um pouco enferrujado, devido minha área atualmente ser a contabilidade.
       
      Preciso que quando informado a Placa do veículo ao descer para o próximo input seja informado o tipo de combustível que aquele veículo utiliza (variando entre Gasolina e Diesel) puxando do cadastro do veículo.
      Por exemplo: Selecionei a placa MMA5554 e ao descer para o próximo input ou na hora que selecionar a placa ele busca no bando de dados e informa o tipo de combustível (para evitar erro no lançamento e facilitar o registro).
      <label>VEÍCULO:</label><br/> <select class="campo_digitar" name="veiculo"> <option>-- Selecione --</option> <?php $consultasql = "SELECT * FROM kloc_panelcontrol.veiculo order by id "; $lista_empresa = $con->query($consultasql); while ($dados = $lista_empresa->fetch()) { ?> <option value="<?php echo $dados['id'];?>"><?php echo $dados['placa'];?></option> <?php } ?> </select><br/> <label>TIPO DE COMBUSTÍVEL:</label><br/>  
    • Por rafaelwww
      Sou novo no fórum e essa é a minha primeira postagem.
      não sei se essa é área apropriada para esse tipo de postagem, mas vamos lá eu tenho um site e queria criar uma opção no qual o usuário poderia gravar um áudio que seria salvo em um banco de
      dados, mas não tenho ideia de como fazer isso se existe uma API que faça isso . 
      Peço por gentileza se alguém pudesse me dar uma dica.
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.