多选不将所选选项插入数据库

时间:2019-03-10 09:13:14

标签: php mysql

这是PHP。

<?php
include 'connect.php';

if (isset($_POST['add'])) {
    $id = 'NULL';
    $Branch = $_POST['Branch'];
    $check = mysqli_query($connect, "SELECT * FROM staff WHERE id='$id'");
    if (0 == mysqli_num_rows($check)) {
        if (1 == 1) {
            $insert = mysqli_query($connect, "INSERT INTO staff(Branch) VALUES('$Branch')") or die(mysqli_error($connect));
            if ($insert) {
                echo '<div class="alert alert-success alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>Data Successfully Saved.</div>';
            } else {
                echo '<div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>OOps, Data Failed to Save!</div>';
            }
        } else {
            echo '<div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>Not the same password!</div>';
        }
    } else {
        echo '<div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>ID already exists!</div>';
    }
}
?>

这是我的mysql专栏。

Branch  text    utf8_general_ci     No  None

这是我表单中的选择元素。

<form action="" method="post">
     <select class="selectpicker form-control" multiple data-live-search="true" name="Branch" required="true">
        <option selected>example 1</option>
        <option value="example 2">example 2</option>
        <option value="example 3">example 3</option>
        <option value="example 4">example 4</option>
      </select>
</form>

接下来是我的问题, 如果我选择一个选项,它的索引数据库没有任何问题。 如果我选择多个选项,则最后选择的选项是索引。 所以我想要的是,如果我选择2个选项,例如“ example 1,example 2”,这两个都应该作为我的mysql中的文本索引。

P.S。我知道我是新手,不会说英语,但请支持我。

3 个答案:

答案 0 :(得分:0)

您需要为其指定一个数组样式名称name="Branch[]"。这样$_POST['Branch']将是一个包含所有选定值的数组,您可以将其中的所有值插入循环中。

if (isset($_POST['Branch'])) {
    foreach ($_POST['Branch'] as $branch) {
        // insert $branch into the database
    }
}

如果要插入逗号分隔的字符串,可以使用implode

$branches = implode(',', $_POST['Branch']);

但是将多个项目放在单个列中的数据库设计通常较差。参见Is storing a delimited list in a database column really that bad?

此外,在HTML中,required="true"应该是requiredrequired="required"。布尔属性不使用true/false值;它们要么没有值,要么与属性名称相同,要么被省略。

答案 1 :(得分:0)

<select>元素的名称应为Branch[]。在您的PHP脚本中,您需要在将$branches = implode(',', $_POST['Branch']);插入数据库之前使用$branches获取值。

答案 2 :(得分:0)

首先,像这样name="Branch[]"更改属性名称

接下来,使用foreach循环并逐个检索值

$branches = $_POST['Branch']; //get values in array

$insert_string = ''; //we need to concat array values into this empty variable

使用foreach循环

foreach($branches as $branch){
   $insert_string .= $branch . ", "; //set values with comma separater
}

//insert
$insert = mysqli_query($connect, "INSERT INTO staff(Branch) VALUES('$insert_string')") or 
             die (mysqli_error($connect));
相关问题