Insert multiple checkboxes in the Database

0

How do I insert multiple checkboxes on the same row as the database?

Follow the code, the menu checkbox will be inserted several times:

require_once("conn.php");

$nome=$_POST['nome'];
$tipo=$_POST['tipo'];
$desc=$_POST['desc'];
$menu=$_POST['menu'];

$query = "INSERT INTO 'portfolio' ('nome', 'tipo', 'desc', 'menu')
 VALUES ('".$nome."', '".$tipo."', '".$desc."', '".$menu."')";

// Executa a query
$inserir = mysql_query($query);

if ($inserir) {
echo "Post inserido com sucesso!";
} else {
echo "Não foi possível inserir o Post, tente novamente.";
// Exibe dados sobre o erro:
echo "Dados sobre o erro:" . mysql_error();
}

FORM:

 <form action="recebe.php" method="POST">
         <label>NOME DO CLIENTE:</label>
            <input type="text" name="nome" style="
    margin-left: 50px;
"><br><br />
         <label>TIPO DE SERVIÇO</label>
            <input type="text" name="tipo" style="
    margin-left: 57px;
"><br><br />
         <label>MENU:</label>
        <fieldset>
        <input type="checkbox" name="menu" id="visu," value="visu,"><label for="visu,">IDENTIDADE VISUAL</label><br>
        <input type="checkbox" name="menu" id="web," value="web,"><label for="web,">DESENVOLVIMENTO WEB</label><br>
        <input type="checkbox" name="menu" id="grafico,tdmg," value="grafico,tdmg,"><label for="grafico,tdmg,">MATERIAL GRAFICO</label><br>

             <input type="checkbox" name="menu" id="visimg," value="visimg," class="radiosaq"><label for="visimg,">CARTÃO DE VISITA</label><br>
             <input type="checkbox" name="menu" id="pap," value="pap," class="radiosaq"><label for="pap,">PAPELARIA</label><br>
             <input type="checkbox" name="menu" id="fol," value="fol," class="radiosaq"><label for="fol,">FOLDER</label><br>
             <input type="checkbox" name="menu" id="card," value="card," class="radiosaq"><label for="card,">CARDÁPIO</label><br>
             <input type="checkbox" name="menu" id="rev," value="rev," class="radiosaq"><label for="rev,">REVISTA</label><br>
             <input type="checkbox" name="menu" id="emb," value="emb," class="radiosaq"><label for="emb,">EMBALAGEM</label><br>


        <input type="checkbox" name="menu" id="comu,tdcv," value="comu,tdcv,"><label for="comu,tdcv,">COMUNICAÇÃO VISUAL</label><br>

             <input type="checkbox" name="menu" id="amb," value="amb," class="radiosaq"><label for="amb,">AMBIENTAÇÃO</label><br>
             <input type="checkbox" name="menu" id="dec," value="dec," class="radiosaq"><label for="dec,">DECORAÇÃO</label><br>
             <input type="checkbox" name="menu" id="ade," value="ade," class="radiosaq"><label for="ade,">ADESIVOS</label><br>
             <input type="checkbox" name="menu" id="pla," value="pla," class="radiosaq"><label for="pla,">PLACAS</label><br>
             <input type="checkbox" name="menu" id="ban," value="ban," class="radiosaq"><label for="ban,">BANNERS</label><br>
             <input type="checkbox" name="menu" id="plo," value="plo," class="radiosaq"><label for="plo,">PLOTAGEM</label><br>
             <input type="checkbox" name="menu" id="out," value="out," class="radiosaq"><label for="out,">OUTROS</label><br>


        <input type="checkbox" name="menu" id="digi," value="digi,"><label for="digi,">MARKETING DIGITAL</label><br>
  </fieldset><br /><br />
         <label>IMAGEM MINI:</label>  <input type="file" name="pic" accept="image/*"><br><br />
         <label>IMAGEM GRANDE:</label>  <input type="file" name="pic" accept="image/*"><br><br />
       <label>DESCRIÇÃO</label><br />
           <textarea id="desc" name="desc" required=""></textarea><br><br />
     <input type="submit" value="ENVIAR DADOS PARA O SITE :D">
   </form>
    
asked by anonymous 12.01.2016 / 18:05

2 answers

6

As you updated the question, here is a small correction. You have to remove the commas from the values, because implode will already put them, and name needs to be adjusted:

<input type="checkbox" name="menu[]" id="visimg" value="visimg" class="radiosaq">

In this case, in particular, you can leave a comma separating the items, I would only suggest not using a comma in the ID:

<input type="checkbox" name="menu[]" id="grafico_tdmg" value="grafico,tdmg">

Then, it's basically this:

$menu = isset( $_POST['menu'] ) && is_array( $_POST['menu'] )
        ? implode( ',', $_POST['menu'] ) : '';

Just to be more readable:

if( isset( $_POST['menu'] ) && is_array( $_POST['menu'] ) ) {
   $menu = implode( ',', $_POST['menu'] );
} else {
   $menu = '';
}
    
12.01.2016 / 18:11
1

What is not recommended (because it hurts 1FN).

Well, $ _POST ['menu'] contains the two value information 1 and value 2, if both are marked.

What you can do to insert both values into the database in a single column is:

1. Serialize:

$menu = serialize($_POST['menu']);    
// irá gerar um valor armazenável, tornando a array como está em uma string.

To recover the data use unserialize() , it will return the array, just the way it was.

2. Implode (mentioned above):

$menu = implode(',',$_POST['menu']);
// irá inserir virgula (ou outro elemento que desejar) entre cada item.

To recover the data use explode() , so it will return as it was.

Note:

  

No security feature was taken into account, including mysql_query is already deprecated.

     

Storage of this type is not recommended. Ideally, create another table to store this information, and then% or JOIN to get the data from two tables.

    
12.01.2016 / 18:19