Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Function que protege todos os campos do formulário

Como fazer uma function que chama tudo de uma vez? Pois pelo que eu analisei nos post do fórum verifiquei apenas functions que abrangem apenas um campo, como no exemplo abaixo:

function trocaSql($conexao,$tipo){
$tipo=  mysqli_real_escape_string($conexao,$tipo);
return $tipo;
}

--------------------------------------------------------------------------------------------------

function insereProduto($conexao, $nome, $preco, $descricao, $categoria_id,$usado) {
    $nome = trocaSql($conexao,$nome);
      $query = "insert into produtos (nome, preco, descricao, categoria_id,usado) values ('{$nome}', {$preco}, '{$descricao}', {$categoria_id},{$usado})";
 //  var_dump($query);
    return mysqli_query($conexao, $query);
}

Acho que ficaria melhor criar uma maneira que configura-se todos os campos do formulário.

2 respostas
solução!

Pelo que eu entendi de sua pergunta, você quer escapar os campos todos de uma vez e não um por um.

Seguindo o exemplo do curso, você pode fazer pequenos ajustes para conseguir isso.

Supondo que todos os dados venham via $_POST, você pode refatorar a função insere

De:

$resultado = insereProduto($conexao, $nome, $preco, $descricao, $categoria_id,$usado);

Para:

$resultado = insereProduto($conexao, $_POST);

Ao invés de quebrar o POST em variáveis, você pode passar ele direto para a função.

Como o $_POST é um array, você pode criar um novo array com os valores já escapados, e usar estes valores para gravar em seu banco de dados.

Seu código refatorado ficaria assim:

function escaparCampos($conexao, $Campos){
    foreach($Campos as $key => $value) {
        $Campos[$key] = mysqli_real_escape_string($conexao,$value);
    }
    return $Campos
}

function insereProduto($conexao, $dados) {
    $dados = escaparCampos($conexao, $dados);

    $query = "insert into produtos (nome, preco, descricao, categoria_id,usado) values ('" . $dados["nome"] . "', '" . $dados["preco"] . "', '" .$dados["descricao"] . "', " . $dados["categoria_id"] . ", " .$dados["usado"] . ")";
 //  var_dump($query);
    return mysqli_query($conexao, $query);
}

Fiz algumas pequenas alterações para que o código funciona-se corretamente na minha aplicação e o resultado foi este:

    if (insereProduto($conexao, $_POST)) { ?>
            <p class="text-success">Produto: <?php echo $nome; ?>, <?php echo $preco; ?> - Adicionado com sucesso!</p>
    <?php } else { 
        $msg = mysqli_error($conexao);
    ?>
        <p class="text-danger">O produto <?php echo $nome; ?> não foi cadastrado! <?php echo $msg; ?></p>
    <?php };
    ?>
$dados = $_POST;
function escaparCampos($conexao, $dados) {
    foreach($dados as $key => $value) {
        $dados[$key] = mysqli_real_escape_string($conexao,$value);
    };
    return $dados;
     };

function insereProduto($conexao, $dados) {
    $dados = escaparCampos($conexao, $dados);
    $query = "insert into produtos (nome, preco, descricao, categoria_id, usado) values ('" . $dados["nome"] . "', '" . $dados["preco"] . "', '" .$dados["descricao"] . "', " . $dados["categoria_id"] . ", " .$dados["usado"] . ")";
 //  var_dump($query);
    return mysqli_query($conexao, $query);
};

Abraços e obrigado pela ajuda Daniel Bins.