Search for Array () in the variable and database

2

I have the following fields in Array ():

# Tratamento das variaveis para substituição da mensagem
$campos = array(
    0 => '#celular',
    1 => '#ddd',
    2 => '#cpf_cnpj',
    3 => '#nome_razaosocial',
    4 => '#mensagem',
    5 => '#cod_cliente',
    6 => '#cod_contrato',
    7 => '#cod_barras',
    8 => '#valor_divida',
    9 => '#telefone_r_1',
    10 => '#telefone_r_2',
    11 => '#telefone_r_3'
);

And I also have a variable:

$dados['mensagem'] = "Aqui mensagem #celular #ddd #cod_barras";

And I have the value of these tags, in the fingers bank, in the files_fields table

I need to check the $ message if any of these available tags exist, and replace.

I tried it this way:

<?php
    $sql_dados = mysqli_query($conn, "SELECT * FROM files_fields LIMIT 5");
    while($row_dados=mysqli_fetch_assoc($sql_dados)){
?>
<tr>
    <td><?php echo $row_dados['celular']; ?></td>
    <td>
        <?php 
            //foreach($campos_arr as $valor){ 
                if(in_array($campos, $dados['mensagem'])){ 
                    $mensagem = str_replace($campos, $row_dados[$valor], $dados['mensagem']); 
                } else {
                    $mensagem = $_GET['mensagem'];
                }
            //  echo $mensagem;
        //  } 
        ?>
    </td>

</tr>
<?php } ?>

But returns the following error:

  

Warning: in_array () expects parameter 2 to be array, string given in   D: \ Sites \ Localhost \ EasyPHP-DevServer-14.1VC11 \ data \ localweb \ panel-wallace \ php \ generateAbstract.php   online 46

How can I work out the right way?

    
asked by anonymous 28.10.2016 / 14:24

1 answer

1

I thought of something like this:

<?php

$campos = [
   0  => '#celular',
   1  => '#ddd',
   2  => '#cpf_cnpj',
   3  => '#nome_razaosocial',
   4  => '#mensagem',
   5  => '#cod_cliente',
   6  => '#cod_contrato',
   7  => '#cod_barras',
   8  => '#valor_divida',
   9  => '#telefone_r_1',
   10 => '#telefone_r_2',
   11 => '#telefone_r_3'
];

$valor = [
   0  => '(19) 99999-9999',
   1  => '999',
   2  => '999.999.999-99',
   3  => 'Teste de Razão Social',
   4  => 'Obrigado por me testar',
   5  => '99',
   6  => '999',
   7  => '99999999.99999999.99999999.9999999.9.9999999',
   8  => '9.99',
   9  => '(19) 99999-9999',
   10 => '(19) 99999-9999',
   11 => '(19) 99999-9999'
];

$dados['mensagem'] = 'Meu celular é #celular e meu código do cliente é #cod_cliente. Segue o código de barras: #cod_barras';
$mensagem = $dados['mensagem'];

foreach($campos as $key => $item){
   if(strpos($dados['mensagem'], $item)){
      $mensagem = str_replace($item, $valor[$key], $mensagem);
   }
}

echo $mensagem;

See working on sites:

Sandbox PHP

IdeOne

Explanation

strpos() - A function that searches the word in a given string. If it exists, the return is the position of the word in the string. When it does not find returns -1.

I made foreach to search the array $campos if one or more fields exist in the $mensagem variable. If it exists, it replaces the value of the same position of the array $valor , which in your case is a variable that comes from the database.

In your case if the field names are the same as in the array it can be done like this:

$column = str_replace('#', '', $item);
$mensagem = str_replace($item, $row_dados[$column], $mensagem);

It takes # from the field with str_replace() .

Or

$mensagem = str_replace($item, $row_dados[$key + 1], $mensagem);

$key + 1 why has the table ID field probably (I do not know your table)

    
28.10.2016 / 14:31