Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get values from select multiple and get them in to database

What is the best way to get the all values of one multiple select box, and then i want to save those values in one row in the database, then from that row i want to get each value separate. What is the best way to do such a thing ? My goal is to save the values and then get each separate.

like image 417
gambozygame Avatar asked Dec 09 '25 20:12

gambozygame


2 Answers

You could do it this way

<select name="foo[]" multiple="multiple">
     <option value="dog">Dog</option>
     <option value="cat">Cat</option>
     <option value="fish">Fish</option>
</select>

<?php

$pets = $_POST['foo'];

//sanitize and verify the input here. Escape properly and what not

$query = mysql_query("INSERT INTO `pets` (`pet1`, `pet2`, `pet3`) VALUES ('".$pets[0]."', '".$pets[1]."',  '".$pets[2]."')");
?>

But to be honest it's an awful way to go about building a database. It'll be very annoying or difficult to do anything meaningful with.

Why not have the following database setup:

users:

id | name 
----------
 1 | Tim

pets:

id | user_id | type
-------------------
1  | 1       | Fish
2  | 1       | Cat
3  | 4       | Kakapo

And then you would have a much more easily searchable and manipulatable database that's consistent.

like image 77
Dormouse Avatar answered Dec 11 '25 08:12

Dormouse


I believe you should receive the value selected as an array in the $_POST variable so say your select has a name="products"

The values selected will be in $_POST["products"] assuming you are submitting the form via POST.

Then you can use the implode function to generate a string. For example:

$myProducts = implode("|", $_POST["products"]); //This will give you a pipeline delimeted string like : computer|laptop|monitor

$myProducts = mysql_real_escape_string($myProducts); //Just to santize before inserting in DB

Then just insert that string into the DB.

When retrieving the data you can reverse the process by using the explode function:

$myProducts = explode("|" , [The value retrieved from the database]); //This will give you an array which you can iterate and thus accessing the values individually.

Hope this helps :)

like image 34
Gabriel Spiteri Avatar answered Dec 11 '25 08:12

Gabriel Spiteri



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!