Jump to content
Sign in to follow this  
eliezerborges

Inserir muitas informações no banco de dados com PHP

Recommended Posts

Boa Tarde Pessoal,

 

Estou começando a criar sistemas em PHP e kme surgiu uma dúvida em relação a inserção de dados no banco.

 

Em um formulário com poucos campos estou inserindo os dados no banco da seguinte forma:

INSERT INTO usuarios(nome, sobrenome, pais, estado, cidade, email, senha) VALUES('$nome', '$sobrenome', '$pais', '$estado', '$cidade', '$email', '$senha' )

 

Numa situação de um formulário que tenha muitas informações para serem enviadas ao banco, há alguma forma que agilize o processo, ao invés de ter que digitar cada variável dentro do INSERT INTO, ou é desta forma mesmo?

 

Obrigado,

 

E um abraço!

 

 

Share this post


Link to post
Share on other sites

É desse jeito, mesmo.

Se você estudar sobre ORM, verá que existem formas mais simples. Na verdade, interfaces que mapeiam os valores. Mas a implementação segue esse padrão que você postou.

 

O que dá pra fazer é inserir várias linhas com um único INSERT, se for aplicável no seu caso. Veja este tutorial

Share this post


Link to post
Share on other sites

Faça uma classe banco.class.php que tenha esse código:

abstract class banco{
		//propriedades
		public $servidor = localhost;
		public $usuario =  root;
		public $senha = '';
		public $nomebanco = NOME DO BANCO;
		public $conexao = null;		
		public $dataset =null;
		public $linhasafetadas = -1;
	
		//metodos	
		public function __construct(){
			$this->conecta();
		}//construtor
		 
		public function __destruct(){
			if($this->conexao != null):
				mysql_close($this->conexao);
			endif;
		}//destrutor
		public function conecta(){
			$this->conexao = mysql_connect($this->servidor,$this->usuario,$this->senha,true) 
			or die($this->trataErro(__FILE__,__FUNCTION__,mysql_errno(),mysql_error(),true));
			mysql_select_db($this->nomebanco) or die($this->trataErro(__FILE__,__FUNCTION__,mysql_errno(),mysql_error(),true));
			mysql_query("SET NAMES 'utf8'");
			mysql_query("SET character_set_connection=utf8");
			mysql_query("SET character_set_client=utf8");
			mysql_query("SET character_set_results=utf8");
			//echo "metedo conecta foi chamado";
		}//fecha conecta
		public function inserir($objeto){
			//insert into "nome da tabela" (campo1, campo2) values (valor1, valor2);
			$sql = "INSERT INTO ".$objeto->tabela." (";
			for($i=0;$i<count($objeto->camposValores); $i ++):
				$sql .= key($objeto->camposValores);
				if($i<(count($objeto->camposValores)-1)):
					$sql .= ", ";
				else:
					$sql .= ") ";
				endif;	
				next($objeto->camposValores);
			endfor;
			reset($objeto->camposValores);
			$sql .= "values (";
			for($i=0; $i<count($objeto->camposValores); $i++):
				$sql .= is_numeric($objeto->camposValores[key($objeto->camposValores)]) ? 
				$objeto->camposValores[key($objeto->camposValores)] :
				"'".$objeto->camposValores[key($objeto->camposValores)]."'";
				if($i < (count($objeto->camposValores)-1)):
					$sql .= ", ";
				else:
					$sql .= ") ";
				endif;	
				next($objeto->camposValores);
			endfor;		
			return $this->executaSQL($sql);
		}//inserir

mais um arquivo chamado base.class.php com o seguinte código:

abstract class Base extends  banco{
		//propriedades ou atributos
		public $tabela = "";
		public $camposValores = array();
		public $campoPk = null;
		public $valorPk = null;
		public $extrasSelect = "";
		//funções ou métodos
		public function addCampo($campo=null,$valor=null){
			if($campo!=null): $this->camposValores[$campo] = $valor;
			endif;			
		}//addCampo
		public function delCampo($campo =null){
			if(array_key_exists($campo, $this->camposValores)):
			unset($this->camposValores[$campo]);
			endif;
		}//delCampo
		public function setValor($campo=null, $valor=null){
			if($campo!=null && $valor != null): 
			$this->camposValores[$campo] = $valor;
			endif;
		}//setValor
		public function getValor($campo =null){
			if($campo != null && array_key_exists($campo, $this->camposValores)):
			return $this->camposValores[$campo]; 
			else:
				return false;
			endif;
		}//getValor
	}//fim da classe Base

Quando você quiser mandar dados para o banco, exemplo, voc tem uma class Funcionario

é chamar

class Funcionario extends base{ //Você deve sempre extender a base, nunca a Banco
		public function __construct($campos=array()){
			parent::__construct();
			$this->tabela = "NOME DA SUA TABLE NO BANCO" EX: "funcionario";
			if(sizeof($campos)<=0): //os campos do array abaixo deve ser o nome exato
				$this->camposValores = array( //dos campos da tabela
				"nome" => NULL,
				"email" => NULL,
				"login" => NULL,
				"senha" => NULL,
				"ativo" => NULL,
				"administrador" => NULL,
				"dataCad" => NULL,
				);
			else:
				$this->camposValores = $campos;
			endif;
			$this->campoPk = "id";	 //nome do campo primary key da sua tabela
		}//construct

Ai você está no seu arquivo que recebe os dados do formulário via post ou get

voc da um include_once 'funcionario.class.php';

#instancia um novo objeto dessa classe: $novoFuncionario = new Funcionario(array( //

'nome' => antiInject($_POST['nome']), //tira o antiInjet pq é uma função minha e não está neste código
'email' => ($_POST['email']), //esse $_post está pegando os dados que veio do seu formulário
'login' => ($_POST['login']), #todas as linhas do array terminam em vírgula
)); //você pode incluir todos os campos um a um dentro do array
$novoFuncionario ->inserir($novoFuncionario ); //Aqui voc está mandando o objeto para funcao inserir() e a magica acontece

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
Sign in to follow this  

  • Similar Content

    • By terra
      Olá,
       
      Preciso pegar o valor desse select
       
       
       aqui nessa query
       
       
      Agradeço qualquer ajuda
    • By violin101
      Caros amigos, saudações...
       
      Gostaria de tirar uma dúvida com os amigos se tem a possibilidade de fazer e como fazer.
       
      A pasta MODELS tem como fazer separado como a pasta CONTROLLERS, por exemplo:
       
      a pasta controller consigo fazer assim: PASTA e SUBPASTAS.
       
      controller
      |__ Admin
      |_____ Estoque
      |_______ Financeiro
       
      na pasta Models, fica tudo junto as funções, como por exemplo:
      admin_model.php
      caixa_model.php
      vendas_model.php
      e etc
       
      na Models, tem como fazer como na pasta controller, assim:
      |__ Admin
           |__ admin_model.php
      |_____ Estoque
                 |__ estoque_model.php
      |_______ Financeiro
                    |__ caixa_model.php
       
      para chamar uma função no controller, faço desta forma: 
      <?php $this->load->model('categorias_model'); $this->data['categorias'] = $this->categorias_model->getActive('categorias', 'categorias.idCategorias,categorias.categoria'); ?>  
      Conforme minha dúvida acima, como seria o caminho para chamar esta função:   
      $this->load->model('categorias_model');
       
       
      Grato,
       
      Cesar
    • By Samuel Pietro
      Tenho um select em PDO e preciso que a consulta retornada vire uma variavel, mas a variavel só pega a ultima linha da tabela e eu preciso que pegue todas as linhas que existirem.
       
      $conexao = conexao::getInstance(); $sql = 'SELECT * FROM RegistroE'; $stm = $conexao->prepare($sql); $stm->execute(); $Sql = $stm->fetchAll(PDO::FETCH_OBJ); foreach ($Sql as $SqlReg): $conteudo_meio = picture_X($SqlReg->E_01,1) .picture_X($SqlReg->E_02,25) .picture_9($SqlReg->E_03,4) .picture_X($SqlReg->E_04,14) .picture_9($SqlReg->E_05,8) .picture_9($SqlReg->E_06,8) .picture_9($SqlReg->E_07,8) .picture_9($SqlReg->E_08,8) .picture_9($SqlReg->E_09,8) .complementoRegistro(96,"brancos") .picture_9($SqlReg->E_11,1) .complementoRegistro(1,"brancos") ; endforeach; Como eu poderia está fazendo isto?
    • By peterstefan
      Bom dia, estou fazendo uma cadastro via rest e estou utilizando o curl para cadastrar no webservice...
      Meu código está cadastrando tudo certinho, porem quando ele cadastra e mostra o retorno que foi cadastrado com sucesso ele fica o AGUARDE, CARREGANDO e não para.. não sei oque esta faltando pq já tentei varias coisas e não deu certo... 
       
       
       
      $Data = [ "nomeRazaoSocial" => $PostData['nomeRazaoSocial'], "identMF" => $PostData['identMF'], "email" => $PostData['email'], "telefone" => $PostData['telefone'], "senhaProvisoria" => $PostData['senhaProvisoria'] ]; $DataString = json_encode($Data); $curl = curl_init(WEBSERVICECADASTRO); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl, CURLOPT_POSTFIELDS, $DataString); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($DataString)) ); $result = curl_exec($curl); if ($result) { $jSON['success'] = "<i class='icon-checkmark'></i>Pronto, cadastro foi realizado com sucesso!"; }else{ $jSON['error'] = "<i class='icon-warning'></i>Oops! Erro ao cadastrar! Por favor, tente novamente!"; }  

       

    • By RSN
      Boa Noite,
      Preciso enviar uma consulta sql no corpo do e-mail, porém não estou conseguindo concatenar o laço while.
      <?php include_once('conexao.php'); require 'PHPMailer/PHPMailerAutoload.php'; $resultado = mysql_query("SELECT * FROM cupom WHERE FlagEstorno = 1;"); $linhas = mysql_num_rows($resultado); $mensagem = '<div class="x_content"> <table id="datatable-buttons" class="table table-striped table-bordered"> <thead> <tr> <th>Loja</th> <th>Nro Cupom</th> <th>Data</th> <th>Operador</th> </tr> </thead> <tbody> while($linhas = mysql_fetch_array( $resultado)){ echo " <tr>"; echo "<td>".$linhas['nroloja']."</td>"; echo "<td>".$linhas['NroCupom']."</td>"; echo "<td>".$linhas['DataProc']."</td>"; echo "<td>".$linhas['Operador']."</td>"; echo " </tr>"; }'; $mail = new PHPMailer(); $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->SMTPSecure = 'tls'; $mail->Username = ''; $mail->Password = ''; $mail->Port = 587; $mail->setFrom(''); $mail->addReplyTo(''); $mail->addAddress('', 'Nome'); $mail->isHTML(true); $mail->Subject = 'Assunto do email'; $mail->Body = $mensagem; $mail->AltBody = 'Para visualizar essa mensagem acesse http://site.com.br/mail'; //$mail->addAttachment('/tmp/image.jpg', 'nome.jpg'); if(!$mail->send()) { echo 'Não foi possível enviar a mensagem.<br>'; echo 'Erro: ' . $mail->ErrorInfo; } else { echo 'Mensagem enviada.'; } ?>  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.