Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!
Está ok!
Muito obrigado pela resposta e desculpe a demora para retornar.
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
É 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