Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Paulo Marcelo_26862

[TUTORIAL] Insert dinamico no mysql

Recommended Posts

Boa tarde pessoal.

Acabei de criar um script que acredito poder solucionar a vida de várias pessoas.

 

Vamos supor que você tem uma função que realiza o INSERT dos dados no banco de dados.
Ela está toda pronta, porém, o cliente pediu para que você coloque mais 5 novos campos no cadastro do cliente.
Você coloca, e tem que mudar na função do INSERT também, correto?


Com esse script, você pode inserir e remover quantos campos quiser do cadastro, pois ele pega o número de campos, os valores e os nomes dos campos, dinamicamente

 

Outra vantagem, é que com alguma implementação, você pode enviar o nome do banco de dados pelo POST (algo como <hidden>) e assim, você vai criar essa função para inserir os dados uma única vez, não importanto quantas tabelas e quantos inserts você utilize.
Sempre irá passar apenas por essa única função.

 

Vamos lá.

<?php
function inserir($dados){ // DADOS SÃO OS CAMPOS QUE VEM DO FORMULÁRIO POR POST OU GET
			
			$campos = array_keys($hashDados); // Aqui, separamos os indices do array para pegarmos o nome do campo, e não seu valor	
			for ($i=0; $i <sizeof($campos) ; $i++) { // Fazemos uma repetição para salvarmos na variável $cp o nome dos campos
							
				$cp .= $campos[$i].",";
				
			}
			
			for ($i=0; $i <sizeof($campos) ; $i++) { // Fazemos uma nova repetição para salvarmos os valores
				$cp2 = $campos[$i];	 
				$valores .= $hashDados[$cp2].",";
			}
			
			$cp = substr($cp,0,-1); // Tiramos a virgula do último campo
			$valores = substr($valores,0,-1); // Tiramos a virgula do último valor
			
			$sql = "INSERT INTO pessoa_fisico (".$cp.") VALUES (".$valores.")" ; // Criamos a String
			
			
		}
?>

 

Simples!

Compartilhar este post


Link para o post
Compartilhar em outros sites

[inline]dados(array('nome'=>'fulano', 'email'=>'teste@email.com"); truncate table pessoa_fisico; insert into pessoa_fisico (nome) values("pwn3d'));[/inline]

 

 

 

 

 
for ($i=0; $i <sizeof($campos) ; $i++) { // Fazemos uma repetição para salvarmos na variável $cp o nome dos campos

$cp .= $campos[$i].",";

}

for ($i=0; $i <sizeof($campos) ; $i++) { // Fazemos uma nova repetição para salvarmos os valores
$cp2 = $campos[$i];
$valores .= $hashDados[$cp2].",";
}

 

 

pra que separar em dois for diferente??

 

 

for ($i = 0; $i < sizeof($campos); $i++) {
    $cp .= $campos[$i].",";
    $cp2 = $campos[$i];
    $valores .= $hashDados[$cp2].",";

 

Você pode por lógica dentro das chaves

 

 

$valores .= $hashDados[$campos[$i]] . ",";

 

Sempre que for iterar um array sem alterar seu conteúdo, armazene o tamanho do array antes do loop

 

$max = sizeof($campos);
for ($i = 0; $i < $campos; $i++) {

 

Pesquise sobre SQL Injection

Pesquise sobre implode

 

 

$data = array('nome'=>'Evandro', 'sobrenome'=>'Oliveira', 'idade'=>'24');
echo implode(',', array_keys($data));
echo implode(',', $data);

 

Por último, mas não menos importante, pesquise sobre prepared statements

 

 

$conn = new PDO(...);
$fields = implode(',', array_keys($data));
$values = ':' . str_replace(',', ',:', $fields);
$stmt = $conn->prepare("INSERT INTO pessoa_fisico ({$fields}) values({$values})");
$stmt->exec($data);

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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