Ir para conteúdo
Fórum Script Brasil
  • 0

tenho uma duvida sobre um código que fiz em phpoo.


uilquer daniel

Pergunta

Fiz esse código, mais não protegi contra sql injection, a pergunta é: devo proteger a gravação de dados?Ou será que posso proteger apenas login e consultas no banco de dados?

essa classe grava dados de qualquer formulário, mais não consegui fazer ela protegendo o banco.

tentei usar o (prepare();) mais da erros se alguém souber como fazer me ajuda aí favor.

{

<?php

class trataDados {

var $db;
var $maxid;
var $fetch;
var $comparador;


        


function CPDO(){   
$this->db=new PDO('mysql:host=localhost;dbname=butterfly','root','');    
}


// esta funcão deve gravar dados de qualque formulario.
//os dados pedidos dentro da função são: (nome da tabela, variavel que traz dados do formulario get ou post, parametro de comparação ex:email).
//nesse caso não tem proteção contra mysql injection .


function gravarDados($tabela,$dados,$param){
    
    //primeiro fazemos a busca do campo qual queremos validare ex: se for email traz todos os email cadastrados;


         $buscaparam=$this->db->query("select $param from $tabela ");
         $parametro=$buscaparam->fetchALL(PDO::FETCH_OBJ);
         foreach($parametro as $paramfinal)
         { $this->comparador=
         $paramfinal->$param;
           }// fim foreach parametro

         //echo $this->comparador;

//agora fazemos a validação se compador for igual ao dados do formulario a inseção e parada e traz a mensagem para que o usuario troque o nome do dado.
         
         if($this->comparador == $_POST[$param]){
             echo'esse email já esta cadastrado';
             }
// se não da-se a continuação do cadastramento             
             else{
//como ods dados do formulario vem como array na variavel get ou post percorremos com laço foreach.                      
         foreach( $dados as $campo => $valor){
             
         $this->db->exec("INSERT INTO $tabela ($campo)values('$valor')");//insere o primeiro campo do formulario para criar o id do usuario;
         $fetch = $this->db->query("SELECT MAX(id) from $tabela"); //faz uma busca do ultimo id que foi inserido na tabela
         $id=$fetch->fetch(PDO::FETCH_OBJ);
         
            foreach($id as $maxid){
            $this->maxid=$maxid;// recebe o ultimo id inserido na tabela;
            } 
            
         break; // para o laço para que  não seja criado um id para cada dado da variavel que traz os dados do formulario

         }
        
         foreach($dados as $campo => $valor){
             //agora o update cuida de inserir todos os dados do formulario e fim todos os dados estao gravados;
         $this->db->exec("update $tabela set $campo='$valor' where id='$this->maxid'");
          }
          
      }//fim do else
                  
}//fim da função gravaDados
        
    
        
        
}//fim da classe
    

$tratadados=new trataDados();
$tratadados->CPDO();
$tratadados->gravarDados('clientes',$_POST, 'email'); 

 ?>


<form action="tratadados.php" method="post">

<input type="text" name="nome">
<input type="text" name="snome">
<input type="text" name="email">
<input type="submit" value="enviar">

</form>

Editado por uilquer daniel
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
11 horas atrás, uilquer daniel disse:

devo proteger a gravação de dados?Ou será que posso proteger apenas login e consultas no banco de dados?

Você que deve responder. A Segurança do seu banco de dados é importante para você? Se for, proteja TODAS as consultas. Se não for, deixe de qualquer jeito...

Já que está usando PDO, basta implementar Prepared Statements e seu banco estará seguro e imune a SQL Injection. Veja: http://rberaldo.com.br/pdo-mysql/

E não use "var". Prefira os modificadores "public", "protected" e "private", para não ficar com código obsoleto

Link para o comentário
Compartilhar em outros sites

  • 0
Em 17/12/2015 at 07:27, Beraldo disse:

Você que deve responder. A Segurança do seu banco de dados é importante para você? Se for, proteja TODAS as consultas. Se não for, deixe de qualquer jeito...

Já que está usando PDO, basta implementar Prepared Statements e seu banco estará seguro e imune a SQL Injection. Veja: http://rberaldo.com.br/pdo-mysql/

E não use "var". Prefira os modificadores "public", "protected" e "private", para não ficar com código obsoleto

 

sim mais o uso do prepared não deu certo nessa logica que usa um laço de repetição foreach gravando dados de qualquer formulário sem ter que definir em campo vai cada dado.

pode me dar uma dica sobre isso

Agora, uilquer daniel disse:

 

sim mais o uso do prepared não deu certo nessa logica que usa um laço de repetição foreach gravando dados de qualquer formulário sem ter que definir em campo vai cada dado.

pode me dar uma dica sobre isso

quanto a declaração de variáveis ainda vou fazer as mudanças e fazer encapsulamento mais antes quero resolver o problema com essa logica ai.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...