Home > database >  Insert multiple HTML form checkbox values in single database column
Insert multiple HTML form checkbox values in single database column

Time:12-27

I am making an HTML form using Bootstrap 4 that contains three multiple-choice questions, allowing the reader to choose more than one answer using checkboxes.

Here is an example of one question in the form.

<div >
    <form action="/survey/insert.php"  method="post">
        <div >
            <legend  for="tmp-area"><b>Please select the nearest city, town, or area where you have detailed knowledge of roads, trails, and places on public land.</b></legend>

            <div >
                <label  for="tmp_area"><input type="checkbox"  id="tmp_area" name="tmp_area" value="Black Canyon City, Bumblebee, Cortes Junction" />Black Canyon City, Bumblebee, Cortes Junction </label>
            </div>
            <div >
                <label  for="tmp_area"><input type="checkbox"  id="tmp_area" name="tmp_area" value="Bouse, Brenda, Parker" />Bouse, Brenda, Parker </label>
            </div>
            <div >
                <label  for="tmp_area"><input type="checkbox"  id="tmp_area" name="tmp_area" value="Kingman, Lake Havasu City" />Kingman, Lake Havasu City </label>
            </div>
            <div >
                <label  for="tmp_area"><input type="checkbox"  id="tmp_area" name="tmp_area" value="Littlefield, Masquite" />Littlefield, Masquite </label>
            </div>
            <div >
                <label  for="tmp_area"><input type="checkbox"  id="tmp_area" name="tmp_area" value="Arizona Strip, Parashant National Monument" />Arizona Strip, Parashant National Monument</label>
            </div>
            <div >
                <label  for="tmp_area"><input type="checkbox"  id="tmp_area" name="tmp_area" value="Tuscon, Winkelman" />Tuscon, Winkelman </label>
            </div>
            <div >
                <label  for="tmp_area"><input type="checkbox"  id="tmp_area" name="tmp_area" value="Buckeye, Rainbow Valley" />Buckeye, Rainbow Valley </label>
            </div>
            <div >
                <label  for="tmp_area"><input type="checkbox"  id="tmp_area" name="tmp_area" value="Tonto National Forest " />Tonto National Forest </label>
            </div>
            <div >
                <label  for="tmp_area"><input type="checkbox"  id="tmp_area" name="tmp_area" value="Coconino National Forest" />Coconino National Forest </label>
            </div>
            <div >
                <label  for="tmp_area"><input type="checkbox"  id="tmp_area" name="tmp_area" value="Apache Sitgreaves National Forest" />Apache Sitgreaves National Forest </label>
            </div>
            <div >
                <label  for="tmp_area"> <input type="checkbox"  id="tmp_area" name="tmp_area" value="Prescott National Forest" />Prescott National Forest </label>
            </div>
        </div>
    </form>
</div>

Here is an example of /survey/insert.php

<?php
        //Database connection
        $servername = "localhost";
        $username = "user";
        $password = "password";
        $dbname = "name";
        $conn = new mysqli($servername, $username, $password, $dbname);

        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }

        // Taking all values from the form data(input)
        $tmp_area = $_REQUEST['tmp_area'];
        

        //Insert form data into table. Set table and columns.
        $sql = "INSERT INTO Survey1 (tmp_area) VALUES ('$tmp_area')";

        if ($conn->query($sql) === true) {
            echo "Your survey has been submitted";
        } else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }
        ?>

The problem

When the user selects multiple checkboxes, only a single checkbox value is added to the database column.

I would prefer that ALL checkbox values, that are selected by the user, insert into the same database column.

All examples and tutorials I have found online require that each checkbox have its own column. Or do not go into much detail on how to accomplish this.

My knowledge of PHP is limited and any help would be greatly appreciated. :)

CodePudding user response:

Change tmp_area to tmp_area[]

 <div >
   <label  for="tmp_area"><input type="checkbox"  id="tmp_area" name="tmp_area[]" value="Bouse, Brenda, Parker" />Bouse, Brenda, Parker </label>
 </div>

During Insert

// Taking all values from the form data(input)
$tmp_area= implode(",",$_REQUEST['tmp_area']); // Store this to your database

If you need your tmp_area , then use this to convert to array again

$tmp_area[] = explode(",",$your_tmp_area);

CodePudding user response:

I will suggest a alternative way, If you can store real value in db.

Like this:

Change input type name to array type.

<input type="checkbox"  id=".." name="tmp_area[]" value=".." />

Create array value before insert to your database.

$tmp_area = ""; // create a variable to store all data

$tmp_area = implode(',',$_REQUEST['tmp_area']); // convert array type to string

When you retrieve data you can,

$tmp_area[] = explode(",",$data_tmp_area_replace_here); // convert string data from database to array
  • Related