Roberto Avelino 0 Denunciar post Postado Março 27, 2018 Apesar de usar este código em outra tabela e que está gravando perfeitamente no banco de dados do mesmo projeto. Não consigo inserir as informações editadas no 2º formulário de 11 que o projeto terá. Sou iniciante em programação. Mi ajudem a encontrar o erro ? O Netbeans informa ( Não Acessar Array Super Global $_POST Diretamente) acess_Represent.php require('Classe/OperadorDAO.php'); if (isset($_POST['nome'])){ $dados['identificador'] = preg_replace('/[^[:alpha:]_]/', '', filter_input()(INPUT_POST['identificador'])); $dados['nome'] = preg_replace('/[^[:alpha:]_]/', '', filter_input()(INPUT_POST['nome'])); $dados['cpf'] = preg_replace('/[^[:alpha:]_]/', '', filter_input()(INPUT_POST['cpf'])); $dados['identificacao'] = preg_replace('/[^[:alpha:]_]/', '', filter_input()(INPUT_POST['identificacao'])); $dados['endereco'] = preg_replace('/[^[:alpha:]_]/', '', filter_input()(INPUT_POST['endereco'])); $dados['banco'] = preg_replace('/[^[:alpha:]_]/', '', filter_input()(INPUT_POST['banco'])); $dados['agencia'] = preg_replace('/[^[:alpha:]_]/', '', filter_input()(INPUT_POST['agencia'])); $dados['operador'] = preg_replace('/[^[:alpha:]_]/', '', filter_input()(INPUT_POST['operador'])); $dados['conta'] = preg_replace('/[^[:alpha:]_]/', '', filter_input()(INPUT_POST['conta'])); $dados['autorizacao'] = preg_replace('/[^[:alpha:]_]/', '', filter_input()(INPUT_POST['autorizacao'])); if(OperadorDAO::insert($dados)) { ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <?php require('database.php'); class OperadorDAO { private static $table="operador"; public static function insert($dados){ $sql = "INSERT INTO " . SELF::$table . " (identificador,nome,cpf,identificacao,endereco,banco,agencia,operador,conta,autorizacao)VALUES(?,?,?,?,?,?,?,?,?,?)"; $stmt = DB::prepare($sql); $stmt->bindValue(1, $dados['identificador']); $stmt->bindValue(2, $dados['nome']); $stmt->bindValue(3, $dados['cpf']); $stmt->bindValue(4, $dados['identificacao']); $stmt->bindValue(5, $dados['endereco']); $stmt->bindValue(6, $dados['banco']); $stmt->bindValue(7, $dados['agencia']); $stmt->bindValue(8, $dados['operador']); $stmt->bindValue(9, $dados['conta']); $stmt->bindValue(10, $dados['autorizacao']); return $stmt->execute(); } } database.php <?php require('config.php'); class DB{ //Estou usando conceitos de encapsulamento, a única coisa pública é o método prepare, pois é o unico que precisaremos fora da classe. private static $conexao; private static function getConexao(){ try { if(is_null(self::$conexao)){ self::$conexao=new PDO("mysql:host=".DB_HOST."; dbname=".DB_NAME,DB_USER,DB_PASS,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); //array adiciona configurações UTF-8 } } catch (PDOException $e) { $e->getMessage(); } return self::$conexao; } public static function prepare($sql){ return self::getConexao()->prepare($sql); } } config.php <?php define("DB_HOST", "localhost"); define("DB_NAME", "criar"); define("DB_USER", "root"); define("DB_PASS", ""); ini_set('display_errors', true); error_reporting(E_ALL); ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 27, 2018 A forma que você está utilizando filter_input está errada: filter_input()(INPUT_POST['identificador']) O correto seria: filter_input(INPUT_POST , 'identificador') Veja os exemplos no manual: http://php.net/manual/en/function.filter-input.php#refsect1-function.filter-input-examples Compartilhar este post Link para o post Compartilhar em outros sites
Roberto Avelino 0 Denunciar post Postado Março 27, 2018 Olá Gabriel, Obrigado pelo interesse em mi dar este apoio! Mas eu fiz a correção indicada por você e não consegui resolver o problema. Fiz desta forma a correção: $dados['identificador'] = preg_replace('/[^[:alpha:]_]/', '', filter_input(INPUT_POST , 'identificador'); mas ainda mostra erro! Eu tenho muita dificuldade em encontrar erros devido ao pouco conhecimento. Este sistema que estou tentando fazer funcionar com os campos do formulários protegidos, eu já fiz; porem sem proteção nenhuma contra injection, agora eu estou tentando fazer o certo, acredito! O NetBeans mostra: inesperado: variable '$dados' Possível erro de sintaxe (verifique erro de sintaxe valida anterior) inesperado Instrução vazia Fica aqui o registro de qualquer forma e obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 27, 2018 O erro anterior: Citar Não Acessar Array Super Global $_POST Diretamente Não é bem um erro, é apenas uma informação. Não é recomendado realizar o acesso direto. O único lugar que você faz o acesso direto é aqui: if (isset($_POST['nome'])) { E você pode substituir esse código por este: if (filter_has_var(INPUT_POST , 'nome')) { ou if (filter_input(INPUT_POST , 'nome' , FILTER_NULL_ON_FAILURE)) { A flag FILTER_NULL_ON_FAILER irá retornar false quando o campo não existir. Sobre o novo erro: Citar inesperado: variable '$dados' Possível erro de sintaxe (verifique erro de sintaxe valida anterior) inesperado Instrução vazia Adicione o código corrigido aqui para que possamos avaliar. Compartilhar este post Link para o post Compartilhar em outros sites
Roberto Avelino 0 Denunciar post Postado Março 27, 2018 Fiz a correção conforme solicitado e agora a tela fica branca e não grava no banco de dados. O NetBeans não apresentou mais nenhuma informação no código dos arquivos, executei todos e não apresenta erro. Ou seja não estou conseguindo gravar com segurança. Saudações. Citar <?php require('Classe/OperadorDAO.php'); /* Proteção com regex, tira caracteres com risco de SQLi, isso combinado com o bindValue do PDO, deixa um grande nível de proteção. */ if (filter_input(INPUT_POST , 'nome' , FILTER_NULL_ON_FAILURE)) { $dados['identificador'] = preg_replace('/[^[:alpha:]_]/', '', filter_input(INPUT_POST ,'identificador')); $dados['nome'] = preg_replace('/[^[:alpha:]_]/', '', filter_input(INPUT_POST ,'nome')); $dados['cpf'] = preg_replace('/[^[:alpha:]_]/', '', filter_input(INPUT_POST ,'cpf')); $dados['identificacao'] = preg_replace('/[^[:alpha:]_]/', '', filter_input(INPUT_POST ,'identificacao')); $dados['endereco'] = preg_replace('/[^[:alpha:]_]/', '', filter_input(INPUT_POST ,'endereco')); $dados['banco'] = preg_replace('/[^[:alpha:]_]/', '', filter_input(INPUT_POST ,'banco')); $dados['agencia'] = preg_replace('/[^[:alpha:]_]/', '', filter_input(INPUT_POST ,'agencia')); $dados['operador'] = preg_replace('/[^[:alpha:]_]/', '', filter_input(INPUT_POST ,'operador')); $dados['conta'] = preg_replace('/[^[:alpha:]_]/', '', filter_input(INPUT_POST ,'conta')); $dados['autorizacao'] = preg_replace('/[^[:alpha:]_]/', '', filter_input(INPUT_POST ,'autorizacao')); if(OperadorDAO::insert($dados)) { ?> Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 28, 2018 Ative os erros do PHP conforme informado nesse post: Compartilhar este post Link para o post Compartilhar em outros sites