【问题标题】:Multiple Selection for Database <select> tag数据库 <select> 标记的多项选择
【发布时间】:2014-10-23 21:28:54
【问题描述】:

我想选择多个成员分配给一个组! 目前,我可以选择一个成员,我可以将他分配到一个组中。 我想选择几个成员并将他们分配到一个组。

    <?php
        include 'connection.php';
        if( isset( $_POST['add_member'] ) )
        {
             $member_id = $_POST['member_id'];
             $group_id = $_POST['group_id'];

             $query="SELECT `id` FROM `member_group`
                        WHERE `member_id` = $member_id AND `group_id` =  $group_id";
            if(!mysqli_num_rows(mysqli_query($connection,$query)))
            {
                $query="INSERT INTO `member_group`(member_id,group_id) VALUES( $member_id,$group_id)";
                mysqli_query($connection,$query) or die(mysqli_errno($connection));
                echo "<div class='alert alert-info'>Member Assigned. </div>";
            }
        }
        elseif( isset( $_POST['remove_member'] ) )
        {
             $member_id = $_POST['member_id'];
             $group_id = $_POST['group_id'];

             $query="DELETE FROM `member_group`
                    WHERE `member_id` = $member_id AND `group_id` =  $group_id";
             $rows = mysqli_query($connection,$query);
            if(!mysqli_affected_rows($connection))
            {
                echo "<div class='alert alert-info'>Member Already Deleted. </div>";
            }
            else
            {
                    echo "<div class='alert alert-info'>Member Deleted. </div>";
            }
        }

    ?>
    <form action="" method="POST">
        <label> Add Member to the group: </label>
            <select name="member_id" required="required" name="selectionField"  multiple="yes">
                <option value="">Select a Member</option>
                <?php
                    $member_query = mysqli_query($connection, "select id, member_name , fname , email , mobile from `member`");
                    while($member_data = mysqli_fetch_object($member_query) ){
                        echo "<option value='$member_data->id'>$member_data->member_name</option>";
                    }
                ?>
            </select>
            <input type="submit" name="add_member" value="Add" class="btn btn-info" />
            <input type="submit" name="remove_member" value="Remove" class="btn btn-info" />
            <select name="group_id" required="required" name="selectionField" multiple="yes">
                <option value="">Select a Group</option>
                <?php
                    $group_query = mysqli_query($connection, "select id, name from `group`");
                    while($group_data = mysqli_fetch_object($group_query) ){
                        echo "<option value='$group_data->id'>$group_data->name</option>";
                    }
                ?>
            </select>
        <br />
    </form>

【问题讨论】:

    标签: php html mysql phpmyadmin


    【解决方案1】:

    使用multiple attribute 选择复选框或复选框数组。

    $members_id = is_array($_POST['add_member'])
                ? $_POST['add_member']
                : array($_POST['add_member'];
    
    $check_query = "SELECT `id` FROM `member_group` WHERE `member_id` IN(".implode(',', $members_id).") AND `group_id` =  $group_id";
    
    $already_added = array();
    while($member = mysqli_fetch_object($check_query) ){
        $already_added[] = $member->id
    }
    
    $members_id = array_diff($members_id, $already_added);
    
    if(count($members_id) > 0) {
    
        // Add members to DB
        $query = 'INSERT INTO `member_group`(member_id,group_id) VALUES';
    
        foreach($remove_member as $member_id) {
            $query .= " ($member_id, $group_id)";
        }
        $member_query = mysqli_query($query);
    }
    

    第一个查询获取已经添加的用户,然后将这些用户的数组与 $members_id 进行比较。添加不在数据库中的那些(第二个查询)。

    顺便说一句,如果您不保护您的代码免受 SQL injection 的侵害。即使用mysqli_real_escape_string

    【讨论】:

      【解决方案2】:

      代替:

      <select name="member_id" required="required" name="selectionField" multiple="yes">
      

      做:

      <select required="required" name="selectionField[]" multiple="yes">
      

      这样你就告诉 PHP 选择是一个数组,其位置与用户选择的元素一样多。

      获取数组中的信息:

      $member_id = $_POST['selectionField'];
      
      for ($i=0;$i<count($member_id);$i++)
      {
         $currentMember = $member_id[$i];
      // Your code to insert the member in the DB
      }
      

      【讨论】:

      • 它不工作,给出错误“未定义变量:member_id”
      • 它还会对 n 个用户进行 n 个查询。它可以通过一个查询插入。
      • 是的。谢谢,我忘了你可以添加更多的价值条款。你的答案比我的好。
      猜你喜欢
      • 2021-08-09
      • 1970-01-01
      • 2012-12-12
      • 2023-03-14
      • 2016-12-14
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 2018-05-06
      相关资源
      最近更新 更多