Insert multiple checkboxes into the Database

Asked

Viewed 72 times

0

How do I insert multiple checkboxes into the same database line?

Follow the code, the checkbox menu is what 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>

2 answers

6


As you updated the question, it follows a small correction. You have to take the commas from the values, because the implode You’ll put them on, 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, only suggest not to use comma in the ID:

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

Then this is basically it:

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

Just to make it more readable:

if( isset( $_POST['menu'] ) && is_array( $_POST['menu'] ) ) {
   $menu = implode( ',', $_POST['menu'] );
} else {
   $menu = '';
}

1

Whatever is not recommended (as it hurts the 1FN).

Well, the $_POST['menu'] contains the two information of value 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 the unserialize(), will go back to array, 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 has been taken into account, including mysql_query is already obsolete.

Storage of this type is not recommended. Ideally create another table to store this information and then make a JOIN or IN to obtain data from two tables.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.