1

I have the following code used to insert a record using PHP into a MySQL database. The form element is a multiple select that works fine when only one option is selected. When I choose more than 1 option, only the last option is inserted. How do I have the form create a new row for each option selected in the multiple select?

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "InsertForm")) {
  $insertSQL = sprintf("INSERT INTO emplikons (EmpNo, IconId) VALUES (%s, %s)",
                       GetSQLValueString($_POST['insertRecordID'], "text"),
                       GetSQLValueString($_POST['icons'], "int"));

  mysql_select_db($database_techsterus, $techsterus);
  $Result1 = mysql_query($insertSQL, $techsterus) or die(mysql_error());

This is the code of the form element. It uses a recordset to dynamically pull values from another table:

<select name="icons" size="10" multiple="multiple">
            <?php
do {  
?>
            <option value="<?php echo $row_icons['id']?>"><?php echo $row_icons['name']?></option>
            <?php
} while ($row_icons = mysql_fetch_assoc($icons));
  $rows = mysql_num_rows($icons);
  if($rows > 0) {
      mysql_data_seek($icons, 0);
      $row_icons = mysql_fetch_assoc($icons);
  }
?>
          </select>
4

1 Answer 1

5

add [] to the name of the select, to get an array of all selected values.

<select name="icons[]" size="10" multiple="multiple">

Then, read from $_POST / $_GET... (assuming form method="post")

$sql = '';
foreach ($_POST['icons'] as $icon) {

    // no idea where to get EmpNo from, let's assume it is in $empno.
    $sql .= "('$empno','$icon'),";

}

$sql = "INSERT INTO tablename (EmpNo, IconId) VALUES " . trim($sql,',');

// Now, please use mysqli_* or PDO instead of mysql_* 
Sign up to request clarification or add additional context in comments.

4 Comments

However, you'll also have to update the insert query, because the current query will only insert a single row
@michi EmpNo is a session variable but I get a 500 server error when I insert that it like this: $row_WADAsess['EmpNo'] Is it because of the 'EmpNo'? How do I escape that?
@RoccoTheTaco: what about $_SESSION['nameofvariable']??
OH MY, duh! I feel like a dummy LOL...perfect, worked great. Thanks so much!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.