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'");
}
Pergunta
uilquer daniel
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 danielLink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
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.